長さ 300 の 2 つの配列があります。それらは次のようになります (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);
}
}
}
}
}
}
これらの配列で同じ単語を検索する必要があり、単語が同じである場合は、値を合計して合計を 3 で割り、その値を state_keywords 配列に置き換えます。したがって、配列内に複数回ある単語ごとに、その値の手段があります。
今...私のアプローチは非常に悪いです。なぜなら、私は今約300ミリの反復をしていて、それはクレイジーです. JavaScript で配列をより適切に実装する必要があります。辞書編集ツリーや kd-tree などのようなもの。
ありがとうございました。
編集:
ここにhttp://jsfiddle.net/dD7yB/1/の例があります。
EDIT2:
よくわからない場合は申し訳ありません。だから私は何をしているのか:
- 私は配列を持ってい
state_keywords
ます。インデックスは 0 から 299 まであり、それらはthemes
... - 各テーマは 15 語で表すことができ、配列が到着するたび
new_keywords
に異なる可能性があります。 - new_keywords 配列が到着したら、その配列内のすべての単語が
state_keywords
同じテーマ インデックスの配列内にあるかどうかを確認する必要があります。 - そうである場合: 確率を足して 2 で割ります。
- そうでない場合: 新しい単語を state_keyword 配列に追加しますが、1 つのテーマに対して 15 単語を超える場合 (現在はそうです)、最初の 15 単語だけを確率で並べ替えて保存する必要があります。
そして、これは可能な限り効果的に行う必要があります。なぜなら、これを毎秒行う必要があるため、高速でなければならないからです。
EDIT3:
今、私はこのコードを使用します:
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;
}
}
}
}
これは前のものよりもはるかに高速です。