循环内二进制搜索的时间复杂度

时间:2018-01-31 09:55:09

标签: java time-complexity binary-search


我很难确定解决方案的时间复杂程度 任务是找到 An 序列的 n 值 - 1,3,5,11,21,43 ......

A0 = 1
A1 = 3
An =(An-1)+ 2 *(An-2)

序列是"隐藏"在排序的数组中。
例如,以下数组 -
1 ,2, 3 ,4, 5 11 ,17, 21 ,40,65
将返回4,因为A4 = 21,而21是给定数组中出现的序列的最后一个数字。

并为下一个数组 -
-3,-2,0,10,11,17,21,60 该方法将返回-1,因为A0不在数组中。

我的代码:

public static int elements(int[] arr)
{
    int i=1, j=3, k, tmp;
    int a=-1;
    tmp =indexOf(arr, i);
    if(tmp==-1)
        return a;
    a++;
    tmp=indexOf(arr,j);
    if(tmp==-1)
        return a;
    a++;
    k=(2*i)+j;
    tmp=indexOf(arr,k);

    while(tmp!=-1)
    {
        tmp=indexOf(arr,k);
        a++;
        i=j;
        j=k;
        k=(2*i)+j;
    }
     return a-1;
}

indexOf()是O(log n)二进制搜索。

1 个答案:

答案 0 :(得分:1)

while循环中,搜索空间永远不会减少,因为arr使用了相同的参数indexOf。在最坏的情况下,这意味着arr包含序列A的开始间隔,并使用n次搜索,其中n是{{1}中的元素数量}}。总的来说,这会产生arr的最坏情况运行时复杂性。