【发布时间】:2016-10-14 11:35:13
【问题描述】:
我正在尝试创建一个递归函数将一个数组拼接成两半,直到它的长度只有 3 和 2,而不是将所有这些新数组整齐地放在一个数组中。
我想我需要一种方法来测量我需要多少个数组,创建它们然后将它们放入我分割的数组中? (我在想 Pow?)。
我正在使用 half 和 Round,因为我在纸上做过实验,这意味着我最终会得到 2 和 3,而不是除以 3,因为它有时会得到 1 的余数(我打算使用稍后使用此数据构建三角剖分的相同脚本)。
当前代码,(不完整,要使其正常工作必须继续创建额外的 if 语句)。
var pointlist = [];
var pointCount = 666;
var generate = function(t, n) {
for (count = 0; count < n; count++) {
var point = {
x: (Math.random() * 1000),
y: (Math.random() * 1000)
};
t.push(point);
}
}
generate(pointlist, pointCount);
var divisions = [];
var divide = function(a) {
a.sort(function(a, b) {
return a.x - b.x
});
if (a.length > 3) {
b = a.splice(Math.round(a.length / 2), a.length);
divisions.push(a, b);
if (a.length > 3) {
c = a.splice(Math.round(a.length / 2), a.length);
d = b.splice(Math.round(b.length / 2), b.length);
divisions = [];
divisions.push(a, c, b, d);
if (a.length > 3) {
e = a.splice(Math.round(a.length / 2), a.length);
f = c.splice(Math.round(c.length / 2), c.length);
g = b.splice(Math.round(b.length / 2), b.length);
h = d.splice(Math.round(d.length / 2), d.length);
divisions = [];
divisions.push(a, e, c, f, b, g, d, g);
}
}
}
};
divide(pointlist);
console.log(divisions.length + " arrays");
console.log(divisions[0].length + " first length");
console.log(divisions[1].length + " second length");
【问题讨论】:
-
您追求的输入和输出是什么? (不是算法、计算等,要拼接的数组)
-
我想拼接点列表数组并将它们插入到分区数组中,使它们保持排序函数创建的顺序。
-
请具体准确的输入输出样本,描述无济于事。
-
我在您的代码中看不到任何递归函数,我不确定您到底要做什么,但这可能有助于作为通过分而治之算法处理数组的示例在 Javascript 中:mgechev.github.io/javascript-algorithms/…
-
我有一个名为 pointlist 的数组,它包含点对象。我想使用 splice 将点列表数组分成两半,直到这些新数组的每个长度不超过 3 个(每个数组有 3 个或 2 个对象)。比我想将这些数组按顺序插入到一个称为分区的预制数组中。无论哪种顺序,它都会发挥最佳效果。
标签: javascript arrays math divide-and-conquer