【问题标题】:Linear Search or Binary Search or Binary Search Tree线性搜索或二分搜索或二分搜索树
【发布时间】:2011-10-05 06:14:31
【问题描述】:

我有一个小疑问...

如果我知道列表中的搜索元素(例如包含按顺序排序的 32 个元素)出现在前四个位置,

这是最好的搜索算法。

线性搜索至少需要4次迭代...... 二分查找至少 5 次迭代 二叉搜索树怎么样..在这种情况下它提供更好的解决方案还是等于二叉搜索...

我相信线性搜索在这种情况下会更好..

有人可以确认一下吗?

【问题讨论】:

    标签: algorithm search


    【解决方案1】:

    如果您知道该位置位于前 4 个位置,则比线性搜索更好,因为您必须测试不超过 4 个元素。使用二分搜索 lg 32 = 5 ,因此您最多必须测试 5 个元素。

    此外,对于这样的少量元素,时间差可以忽略不计,最好保持简单并进行线性搜索。

    您也可以在 O(1) 时间内使用 HashTable 或 HashSet,但同样,对于少量数据,线性搜索可能比执行散列函数更快。

    如果微小的差异真的很重要,我建议在它将运行的环境中进行测量。

    【讨论】:

    • 二叉搜索树呢?和二分查找类似吗?
    • 是的,二叉搜索树是一种围绕执行二叉搜索而设计的数据结构。二叉搜索树相对于排序数组的优势在于插入和删除元素。查找时间(假设树是平衡的)是相同的。
    【解决方案2】:

    您可以对前 4 个元素进行二分搜索。这将是 lg 4 = 2 次迭代! :-)

    【讨论】:

    • 谢谢你.. 必须对所有元素进行搜索.. 只有少数我会知道它将在前 4 个元素中
    【解决方案3】:

    如果你手头有这么多的元素和确切的应用程序,二叉搜索树将是多余的。

    此外,为了解决目前的问题,线性搜索会更好,因为定位特定元素的预期迭代次数将超过二分搜索。

    对于现实生活场景,出现的问题将非常罕见。因此,对已排序的数组使用二分搜索总是更好。

    【讨论】:

      【解决方案4】:

      如果数据以某种方式均匀分布,则使用插值搜索是明智的。通过使用分布知识,您很有可能一步猜出正确的位置。预期的复杂度为 O(log(log(n))) 。

      这是我的页面的链接,其中我使用 Java 实现了算法:Algoritmy.net - interpolation search implementation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-20
        • 1970-01-01
        • 2014-11-05
        • 1970-01-01
        • 2019-01-09
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多