7

タイトル付きの配列を使用しています。各タイトル インデックスは、そのタイトルの html を含むデータベース内の ID に対応します。

タイトルの 1 つを含む文字列があるとします。

title = "why-birds-fly";
titles[] // an array which contains all the titles

文字列「タイトル」を使用して対応する ID を取得するには、次のようにします。

for (i = 0; i < titles.length-1; i++) {
  if (titles[i] == title)
    return i+1;
}

私が使用できる別の方法は、titles の正反対である titles 配列と共に連想配列を作成することです。つまり、文字列をインデックスとして使用し、数値を返します。

titles_id {blah:0,why-birds-fly:1,blah2:2}

次に、次の方法で ID にアクセスできます。

return titles_id[title]+1;

CPU、メモリなどを考慮すると、何が最も効果的でしょうか?

また、私の論理がすべて間違っている場合はお知らせください。

ありがとうウィレム

4

4 に答える 4

10

線形検索アプローチの複雑さは O(n) であり、連想配列アプローチの最悪のケースはおそらく O(log n) だと思います ( JS エンジンがハッシュを使用して取得している場合、最良のケースはおそらく O(1) です)。衝突なし)。これは、JS エンジンが連想配列/オブジェクトをどのように実装するかによって異なりますが、O(n) に勝ることは間違いありません。

したがって、2 番目のアプローチは高速になりますが、もちろんより多くのメモリを使用します。これは非常に典型的なトレードオフであり、速度は向上しますが、より多くのメモリを使用します。そのトレードを行うかどうかを決定できるのは自分だけです。

于 2009-03-13T10:40:42.870 に答える
0

保存する必要のあるキーと値のペアの数を考慮することも重要です。約50未満の場合(実装によって異なります)、ハッシュ値の計算と衝突の解決にコストがかかるため、線形検索を実行することは、ハッシュテーブルルックアップを実行することと同じくらい効率的です。例外は、Google chrome v8 JavaScriptエンジンが、オブジェクトのプロパティの直接ルックアップを実行できるようにする、すべてのオブジェクトのキャッシュバージョンの一種を保持することです。したがって、ハッシュテーブルとしてのObjectクラスの使用は、より高速になる可能性があります。このキャッシュされたバージョンを作成するコストが、より小さなリストの利点を上回るかどうかはわかりません。

于 2009-03-13T17:18:52.743 に答える
0

最初のメソッドでArrayのindexOf関数を使用できます。

以下はMozillaDeveloperからの情報です: https ://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:Array:indexOf

indexOfは、ECMA-262標準のJavaScript拡張です。そのため、標準の他の実装には存在しない場合があります。これを回避するには、スクリプトの先頭に次のコードを挿入して、ネイティブでサポートされていないECMA-262実装でindexOfを使用できるようにします。このアルゴリズムは、FirefoxとSpiderMonkeyで使用されているものとまったく同じです。

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
   };
}
于 2009-03-13T17:21:11.550 に答える
-2

Javascript配列は、インデックスに「why-birds-fly」というタイトルなどの値を使用できます。

例:var title = "why-birds-fly";

var TitleArray [] = new Array();

TitleArray [title] = id;

次に、タイトルでIDに直接アクセスできます。

TitleArray[タイトル]を返します。

于 2009-03-13T16:17:46.633 に答える