【问题标题】:sequential search顺序搜索
【发布时间】:2010-03-06 17:23:01
【问题描述】:

对于顺序搜索,在文件中查找记录所需的平均比较次数是多少?

【问题讨论】:

    标签: search sequential


    【解决方案1】:

    sequential search 从文件的开头开始,逐个检查每个元素,直到找到所需的元素。假设您要搜索的记录在文件中仅存在一次,并且可能以相同的概率出现在文件中的任何位置,则平均比较次数等于文件中记录数的一半。

    但是,如果文件中不存在该记录,则必须先检查文件中的每条记录,然后才能发现这一点。

    【讨论】:

    • 当值不在文件中时,所有记录的最坏情况。
    • 我也将其视为 (n+1)/2。为什么是 n+1?
    • @Phenom:这是因为您可以从两个不同的假设开始。如果假设知道该条目在文件中,只需要查找索引,则最小比较次数为 1,最大比较次数为 (n-1),平均为 ((n-1)+ 1)/2 = n/2。如果您假设您不知道该条目在文件中,则最小值为 1,最大值为 n,因此在元素在文件中的情况下,平均值为 (n+1)/2,并且 n如果不是。
    【解决方案2】:

    对于一个有 n 个项目的列表,最好的情况是当值等于列表的第一个元素时,在这种情况下只需要一次比较。最坏的情况是该值不在列表中(或仅在列表末尾出现一次),在这种情况下需要进行 n 次比较。

    Asymptotically,因此线性搜索的最坏情况成本和期望成本都是O(n)

    【讨论】:

      【解决方案3】:

      我想补充一些以前的答案没有指出的几点:

      • 另一方面,我们必须考虑文件是在一个设备上可用还是分布在多个设备上。如果是 T ram,那么复杂度将是 O(T*N/(1+log(T)))

      • 一般来说,顺序搜索采用O(N) time complexity

      • 当与 R-Tree 等数据结构结合使用时,对于文件中的记录,它可以给出O(N/(log(log(N)))) 的最佳情况时间复杂度。

      • 这取决于文件的结构/格式,如果数据字段在哈希映射中可用,则顺序搜索是一个积压。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多