0

我有两个长度为 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;
            }
        }
    }
}

这比前一个要快得多。

4

1 回答 1

2

你为什么不把这些数组变成对象,用字符串作为值的键呢?那么您可以直接查找单词并获取值吗?

var wordlists = [
    {
        "word1":0.000199,
        "word2":0.000102,
          ...
        "word15":0.000102
    },
      ...
    {
        "anotherword1":0.0032199,
        "anotherword2":0.032302,
          ...
        "anotherword15":0.0320102
    }
]

然后查找

wordlists[0]["word2"]  //0.000102
于 2013-03-27T02:28:13.747 回答