私は今日初めてウィキペディアで二分探索について読み、表面を少しざっと見ました。メモリが少ないコレクション内のアイテムをすばやく見つけるために使用されているようです。
.NET / C#のコンテキストでは、これを使用する必要がありますか?実稼働環境のソフトウェアを構築する際にそれらを使用したことはありますか?
この質問が刺激的なものとして外れてしまったら申し訳ありませんが、私は学生として本物の質問をしています!
私は今日初めてウィキペディアで二分探索について読み、表面を少しざっと見ました。メモリが少ないコレクション内のアイテムをすばやく見つけるために使用されているようです。
.NET / C#のコンテキストでは、これを使用する必要がありますか?実稼働環境のソフトウェアを構築する際にそれらを使用したことはありますか?
この質問が刺激的なものとして外れてしまったら申し訳ありませんが、私は学生として本物の質問をしています!
List<T>
Arrayと同様に、BinarySearchメソッドがあります。ソートされたリストがあり、要素を見つける必要がある場合は、それらを使用します。それらはインデックスを返すので、キーよりも小さい最大の要素を見つけるなど、まっすぐな辞書ではできないことを行うことができます。
私が実際のソフトウェアでバイナリ検索を使用した場所の1つは、範囲検索を実行するためのものです。送料は重量範囲に応じて記載されているため、0〜1ポンド、1〜5ポンド、5〜10ポンドの料金が適用される場合があります。電話List<T>.BinarySearch
して4ポンドを探すと、最初の料金が表示されます。 4ポンドより高いインデックス。1〜5ポンドの範囲を見つけるために使用できます。辞書には、4ポンドが見つからなかったことが示されます。
一般的な並べ替えられたデータの場合、 SortedListまたはSortedDictionaryを使用する方がよい場合がよくあります。
バイナリ検索は、並べ替えられたデータに対してのみ機能します。したがって、並べ替えられていることがわかっているC#のデータのコレクションがある限り、バイナリ検索を実行できます。最善の策は、すでに提供されている実装(などList<T>.BinarySearch()
)を使用することですが、使用している特定のコレクションにバイナリ検索メソッドがない場合は、いつでも作成できます。
組み込みライブラリを使用した例を次に示します。
// An ordered list of ints
List<int> ints = new List<int>() { 1, 4, 8, 20, 30, 44 };
// Search for 5 in the list
int ix = ints.BinarySearch(8);
// Display the index the element 8 was found at
Console.WriteLine(ix);
そして、はい、ソートされたデータを検索するときは、間違いなくバイナリ検索を使用することをお勧めします。
しばらく前(私がコンピュータ工学コースの学生だったとき)、私は検索アルゴリズムを使わなければなりませんでした。そのような授業の結果は論文でした。
C++のクイックソートとバイナリ検索アルゴリズムについてブログに投稿しました。これはC++コードですが、バイナリ検索を使用する方法/理由を提供する必要があります。また、二分探索アルゴリズムを実装する方法も示しています。自分でテストできるように、サンプルアプリケーションが提供されています。