给定排序数组,确定它是否包含给定数字x: 而不是使用二进制搜索,即将数组分成两部分 如果我将数组分成三部分并递归地找到这三部分中的元素。那么这个算法的时间复杂度或顺序(就数组的大小n而言)是什么
答案 0 :(得分:1)
复杂性与二分搜索相同。
原始二进制搜索包含两个阶段。首先是原始数组上的常量步数,然后是半数组数组的递归调用。因此,复杂性可以表示为
T(n) = C1 + T(n/2)
如果划分为三个部分,则执行更多比较和条件测试,但仍然对大小为n的数组执行常量时间操作,然后在大小为n / 3的数组上递归调用。这意味着
T(n) = C2 + T(N/3)
两个函数都评估为Theta(log n)
。
你可以概括。如果我划分k
部分怎么办?复杂性是
f(n) = Ck + f(n/k)
导致
f(n) = Ck log(n)/log(k) + Dk
随着k增加,你得到一个更大的算术除数,但常数Ck和Dk也会增加,因为你在跳入子数组之前执行了更多的操作。想想n=k