【问题标题】:What is the time complexity of the following short algorithm?以下短算法的时间复杂度是多少?
【发布时间】:2021-02-19 04:08:05
【问题描述】:

我正在尝试设计和分析一种类似于二分搜索算法的算法,但不是每次将它们分成两半,而是将它们分成三分之二或三分之二。

这是它的伪代码:

BinarySearchThirds(A, low, high, k)
    if low == high
        if A[low] == k
            return low
        else
            return "not found"
    else
        third = third + (high-low)/3
        if key == A[mid]
            return mid
        if key < A[mid]
            return BinarySearchThirds(A, low, third - 1, k)
        else
            return BinarySearchThirds(A, third + 1, high, k)

我知道这一步 return BinarySearchThirds(A, low, third - 1, k) 需要 T(n/3) 而这一步 return BinarySearchThirds(A, third + 1, high, k) 需要 T(2n/3) 等等该算法的递归方程为T(n) = T(2n/3) + T(n/3) + some_constant_time

我不确定这个递归方程是否正确,如果正确,如何将其转换为可以通过主方法求解以将其转换为 theta(...) 的形式

【问题讨论】:

  • 您要搜索的数字在底部 1/3 中的可能性有多大?排名前 2/3 的情况如何?您认为常规二分搜索的复杂性是什么?
  • 就我所知,常规二进制搜索的复杂性是 theta(log(n))。我只需要一个简单的时间复杂度估计(没有概率分布,所以我会说底部 1/3 的数字等于顶部 2/3 的可能性
  • 是的,二分查找是 O(log_2(n))。
  • 但是想想数字 1-100。它在 [1,33] 中的概率是多少?它在 [34,100] 中的概率是多少?可能性不相等。
  • 假设键在数组中任意一点的概率相等(即没有一个位置的概率高于其他位置),那么有 1/3 的概率是键位于底部 1/3,而键位于顶部 2/3 的概率为 2/3。

标签: algorithm time-complexity binary-search


【解决方案1】:

分界点是在 1/2 还是 2/3 还是 999/1000 或任何分数都无关紧要。只要您有一个常数分数,您可以将n 与该分数相乘直到小于 1 的次数在 n 中是对数的。改变的只是对数底数,但底数在 big-o 表示法中无关紧要,因为所有对数都彼此成比例。

因此渐近时间复杂度必须与标准二分搜索算法中的相同,即O(log n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2020-11-15
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    相关资源
    最近更新 更多