java - 循环内二分查找的时间复杂度

标签 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、511、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) 的二分查找。

最佳答案

while 循环中,搜索空间永远不会减少,因为 indexOf 使用相同的参数 arr。在最坏的情况下,这意味着 arr 包含序列 A 的开始间隔,并且使用 n 搜索,其中 narr 中的元素数量。总的来说,最坏情况下的运行时复杂度为 O(n log n)

关于java - 循环内二分查找的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48539212/

相关文章:

c# - List<T>.BinarySearch 返回意外结果

algorithm - 二分查找帮助

java - 无法将 Roo 配置添加到首选项中

algorithm - 为什么以下两个重复查找算法的时间复杂度不同?

algorithm - 树 : Performance comparison between stack implementation and recursive call of Traversal in BST

python - 枚举的复杂度

algorithm - 对未排序的数组进行二进制搜索?

java - 我怎样才能只获得 IPv4 地址

java - 如何使用可完成的 future 异步运行方法

java - Java中如何声明和消费事件