以下算法的时间复杂度是多少?

时间:2013-09-29 06:55:25

标签: algorithm search data-structures big-o time-complexity

给定排序数组,确定它是否包含给定数字x: 而不是使用二进制搜索,即将数组分成两部分 如果我将数组分成三部分并递归地找到这三部分中的元素。那么这个算法的时间复杂度顺序(就数组的大小n而言)是什么

1 个答案:

答案 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

的情况