我有两个长度为 300 的数组。它们看起来像这样(JSON 表示):
[
[
["word1",0.000199],
["word2",0.000102],
...
["word15",0.000102]
],
...
[
["anotherword1",0.0032199],
["anotherword2",0.032302],
...
["anotherword15",0.0320102]
]
]
我有这个蛮力算法:
for(var i = 0; i < 300; i++)
{
for(var j = 0; j < 15; j++)
{
for(var ii = i + 1; ii < 300; ii++)
{
for(var jj = 0; jj < 15; jj++)
{
for(var jjj = 0; jjj < 15; jjj++)
{
if(new_keywords[i][j][0] === new_keywords[ii][jj][0] && new_keywords[ii][jj][0] === state_keywords[i][jjj][0])
{
console.log(0);
}
}
}
}
}
}
我需要在这些数组中搜索相同的单词,如果单词相同,那么我将值相加并将 sum 除以 3 并在 state_keywords 数组中替换该值。因此,对于数组中不止一次的每个单词,我都有其值的含义。
现在......我的方法非常糟糕,因为我现在有大约 3 亿次迭代,这太疯狂了。我需要在 JavaScript 中更好地实现我的数组。像字典树或 kd-tree 之类的东西。
谢谢你。
编辑:
这是http://jsfiddle.net/dD7yB/1/示例。
编辑2:
如果我不够清楚,我很抱歉。那么我正在做什么:
- 我有数组
state_keywords
。索引从 0 到 299,它们代表themes
... - 每个主题可能由 15 个单词表示,并且每次
new_keywords
数组到达时,它们可能会有所不同。 - 当 new_keywords 数组到达时,我需要检查该数组中的每个单词是否
state_keywords
在同一主题索引的数组中。 - 如果是:将概率相加并除以 2。
- 如果不是:将新词添加到 state_keyword 数组中,但如果一个主题的词数超过 15 个(现在是),我只需要存储按概率排序的前 15 个词。
我需要尽可能有效地做到这一点,因为我需要每秒都这样做,所以它必须很快。
编辑3:
现在我使用这段代码:
var i, j, jj, l;
for(i = 0; i < 300; i++)
{
for(j = 0; j < 15; j++)
{
l = new_keywords[i].length;
for(jj = 0; jj < l; jj++)
{
if(state_keywords[i][j][0] === new_keywords[i][jj][0])
{
state_keywords[i][j][1] = (state_keywords[i][j][1] + new_keywords[i][jj][1]) / 2;
}
}
}
}
这比前一个要快得多。