簡體   English   中英

在.NET / C#上下文中,什么是二進制搜索?如何/為什么要使用二進制搜索?

[英]In a .NET/C# context, what is a binary search and how/why can I use one?

今天,我第一次在Wikipedia上閱讀了有關二進制搜索的信息,只是略微介紹了一下。 似乎它用於在內存稀疏的情況下快速查找集合中的項目。

在.NET / C#上下文中,我是否需要使用一個? 您在構建生產實際應用軟件時曾經使用過它們嗎?

很抱歉,如果這個問題被認為是煽動性的,但是我在問一個真正的學生問題!

List<T>具有BinarySearch方法,而Array也具有BinarySearch方法。 如果您具有排序列表並且需要查找元素,則可以使用它們。 因為它們返回索引,所以您可以使用直接字典來做其他事情,例如找到小於鍵的最大元素。

我在實際軟件中使用二進制搜索的一個地方是進行范圍搜索。 運費是針對重量范圍給出的,因此,對於0-1磅,可能是一種運費,對於1-5磅,可能是一種運費,對於5-10磅,其中一種List<T>.BinarySearch如果我呼叫List<T>.BinarySearch並查找4磅,它會給我第一個高於4磅的索引,我可以用它找到1-5磅的范圍。 字典只會告訴我找不到4磅。

對於常規排序的數據,通常最好使用SortedListSortedDictionary

二進制搜索僅適用於已排序的數據,因此,只要您知道已對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 ++中的Quicksort和Binary Search算法的信息 盡管它是C ++代碼,但它應該為您提供如何/為什么使用二進制搜索。 它還顯示了如何實現二進制搜索算法。 提供了一個示例應用程序,以便您可以自己對其進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM