【发布时间】: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