0

長さ 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;
            }
        }
    }
}

これは前のものよりもはるかに高速です。

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 に答える