我在这里有一点疑问......
如果我知道列表中的搜索元素(包括按顺序排序的32个元素)出现在前四个位置,
这是最好的搜索算法。
线性搜索至少需要4次迭代.... 二进制搜索至少5次迭代 二进制搜索树如何...在这种情况下它是否提供更好的解决方案或等于二进制搜索...
我相信对于这种情况,线性搜索会更好。
请有人确认一下吗?
答案 0 :(得分:1)
如果你知道位置在前4个位置比线性搜索更好,因为你必须测试不超过4个元素。使用二进制搜索lg 32 = 5,因此您必须测试最多5个元素。
此外,对于像这样的少量元素,时间差异可以忽略不计,并且通过保持简单和进行线性搜索,您将获得最佳服务。
您也可以使用HashTable或HashSet进行O(1)时间,但是对于少量数据,线性搜索可能比执行散列函数更快。
如果差别确实很小,我会建议在它运行的环境中进行测量。
答案 1 :(得分:0)
你可以对前4个元素进行二分查找。它将是lg 4 = 2次迭代! : - )
答案 2 :(得分:0)
准确地说,只要有一定数量的元素和你手头的确切应用,二元搜索树就会有点过头了。
此外,为了解决现在的问题,线性搜索会更好,因为定位特定元素的预期迭代次数将超过二进制搜索。
对于现实生活场景,呈现的问题将非常罕见。因此,在排序数组上使用二进制搜索总是更好。
答案 3 :(得分:0)
如果数据以某种方式均匀分布,则使用插值搜索是明智的。通过使用分布知识,您很有可能在一步中猜出正确的位置。预期的复杂性是O(log(log(n)))。
以下是我的网页链接,其中我使用Java实现了算法:Algoritmy.net - interpolation search implementation