【问题标题】:In a .NET/C# context, what is a binary search and how/why can I use one?在 .NET/C# 上下文中,什么是二分搜索以及如何/为什么要使用二分搜索?
【发布时间】:2010-07-15 10:03:10
【问题描述】:

我今天第一次在 Wikipedia 上阅读了二进制搜索,只是略略略过表面。它似乎用于在内存稀疏的集合中快速查找项目。

在 .NET/C# 上下文中,我是否需要使用一个?您是否曾在构建生产实际软件时使用它们?

如果这个问题被认为是煽动性的,我很抱歉,但作为一名学生,我问的是一个真诚的问题!

【问题讨论】:

  • 在 .NET 中使用二分搜索的原因与在任何其他平台上使用二分搜索的原因完全相同。
  • 请不要更改标题,我是故意写 C# 的,因为我需要与语言相关的答案(如果有的话)。谢谢。

标签: c# .net binary-search


【解决方案1】:

List<T> 有一个BinarySearch 方法,Array 也是如此。如果你有一个排序列表并且需要找到一个元素,你会使用它们。因为它们返回一个索引,所以你可以做一些直接字典做不到的事情,比如找到小于键的最大元素。

我在实际软件中使用二进制搜索的一个地方是进行范围搜索。运费是针对重量范围给出的,因此可能有一种 0-1 磅的费率,一种 1-5 磅的费率,一种 5-10 磅的费率。如果我打电话给List<T>.BinarySearch 并寻找 4 磅,它会给我是第一个高于 4 磅的指数,我可以使用它找到 1-5 磅的范围。字典只会告诉我找不到 4 磅。

对于一般排序数据,您通常最好使用SortedListSortedDictionary

【讨论】:

    【解决方案2】:

    二分查找仅适用于已排序的数据,因此只要您在 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);
    

    是的,当您搜索已排序的数据时,您肯定希望使用二进制搜索。

    【讨论】:

    • “显示找到的索引元素 5”是什么意思?您的列表中没有五个。
    • 感谢您了解该类型。我的意思是说 8,被搜索的元素。
    【解决方案3】:

    不久前(当我还是计算机工程课程的学生时)我不得不使用搜索算法。这样的课程作业的结果是一篇论文。

    我在我的博客上发布了关于 Quicksort and Binary Search algorithms in C++ 的信息。虽然它是在 C++ 代码中,但它应该为您提供如何/为什么使用二分搜索。它还展示了如何实现二进制搜索算法。提供了一个示例应用程序,您可以自己测试它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多