2010-07-15 50 views
2

我今天第一次讀到維基百科上的二進制搜索,只是略微表面了一下。看起來它很快用於在內存稀少的情況下快速查找某個集合中的項目。在.NET/C#上下文中,什麼是二進制搜索以及如何/爲什麼可以使用它?

在.NET/C#上下文中,我是否需要使用它?你是否在構建真實世界的軟件時使用它們?

對不起,如果這個問題出現煽動,但我作爲學生提出一個真正的問題!

+3

您將在.NET中使用二進制搜索,其原因與在任何其他平臺上使用二進制搜索完全相同。 – 2010-07-15 01:40:50

+0

請不要改變標題,我特意寫了C#,因爲我需要與語言相關的答案(如果有的話)。謝謝。 – 2010-07-15 01:49:53

回答

3

List<T>有一個BinarySearch方法,如Array。如果您有排序列表並需要查找元素,則可以使用它們。因爲他們返回一個索引,所以你可以做一些你不能用直接字典來做的事情,比如找到一個小於一個鍵的最大元素。

我在實際軟件中使用二進制搜索的一個地方是用於範圍搜索。運費是給定的重量範圍,所以可能有一個0-1磅,一個1-5磅,一個5-10磅。如果我打電話List<T>.BinarySearch並尋找4磅,它會給我第一個指數高於4磅,我可以使用它找到1-5磅的範圍。一本字典會告訴我沒有找到4磅。

對於一般分類數據,通常使用SortedListSortedDictionary更好。

1

二進制搜索僅對已排序的數據有效,所以只要您在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); 

是的,你肯定會想使用二進制搜索,當你搜索排序的數據。

+0

你是什麼意思與'diplay索引元素5被發現'?列表中沒有五個。 – 2010-07-15 01:52:58

+0

感謝您接觸此類型。我的意思是說8,被搜索的元素。 – 2010-07-15 02:03:32

0

前段時間(當時我是計算機工程課程的學生),我不得不使用搜索算法。這些課程的結果是一篇論文。

我發佈在我的博客上關於Quicksort and Binary Search algorithms in C++。儘管它使用C++代碼,但它應該爲您提供如何/爲什麼使用二進制搜索。它還展示瞭如何實現二進制搜索算法。提供了一個示例應用程序,以便您可以自己測試它。

相關問題