2

ギザギザの Array がありString[][]ます。今、String[n][0] 私が持っているもので特定の値を持つ配列を見つける必要があります。その瞬間は単純です

foreach foo in bar{
 if(foo[0]==needle){
  return foo;
 }
}

ご覧のとおり、これは明らかな理由で非常に遅いです。私は C# を初めて使用し、indexOf を見たばかりですが、ジャグ配列で indexOf を使用するにはどうすればよいですか?

私が考えた別の方法は、配列を並べ替え、String[n][0]真ん中のレコードに移動し、値が大きいか大きいかを確認し、上部/下部領域の半分にジャンプするなど、おそらく3回または4回です。より速くレコードを見つけます。

それで、私だけが知っているギザギザの配列で配列を取得する最速の方法は何[][0]ですか?

4

3 に答える 3

4

Dictionary<int, int[]>キーが配列の最初の項目である場所を使用します。ディクショナリは一定時間アクセスし、データ全体がメモリに収まる場合はランダム アクセスが非常に高速です。

于 2011-03-03T12:18:27.717 に答える
3

おそらく、ギザギザの配列よりも、キーが各配列の最初の項目である Dictionary の方が適しているでしょう。辞書はハッシュ テーブルであるため、ルックアップは高速である必要があります。

// Some test data.    
var dictionary = new Dictionary<string, string[]>
{
    { "foo1", new string[] { "foo1", "bar1" }},
    { "foo2", new string[] { "foo2", "bleh" }},
    { "foo3", new string[] { "foo3", "bar3", "hello", "world" }},
    { "foo4", new string[] { "foo4",  }},
    { "foo5", new string[] { "foo5", "bar5", "test" }},
};

string[] item = dictionary["foo3"]; // Fast look up.
于 2011-03-03T12:25:03.347 に答える
2

さて、あなたはからまでarray[i][0]のすべてについてオンにできる値を探していますよね? 次に、ジャグ配列とは何の関係もありませんが、コレクション内の値を見つけることとは関係ありません(あなたの場合はコレクションです)i0n{array[i][0], for each 0 <= i < n )

一度だけ検索する場合、実行できる最善の方法は、線形時間で実行される独自のソリューションです。O(n)

何回も検索する場合 ( を変更せずarray[i][0]i)、配列を並べ替えてString[n][0]「バイナリ検索」を実行できます。これは、説明したアルゴリズムとまったく同じです。仕分けO(n lgn)に時間がかかります。ただし、各検索は非常に高速O(lg n)です。

于 2011-03-03T12:25:02.490 に答える