Arrays 在长度未知的数组中查找x的位置

Arrays 在长度未知的数组中查找x的位置,arrays,algorithm,search,sorting,find,Arrays,Algorithm,Search,Sorting,Find,给定一个无限数组,数组长度未知,在这个无限数组中有n个整数元素排序。n排序元素的数目未知。在logn时间内找到一个整数i在这个无限数组中的位置。logn意味着将数组一直除以2,直到找到它为止,就像在二进制搜索中一样。。。所以你需要知道n的值 C代码: 调用函数的代码: int position = findInteger(array, 0, searchedValue); public int findInteger(int[] array, int position, int searchV

给定一个无限数组,数组长度未知,在这个无限数组中有n个整数元素排序。n排序元素的数目未知。在logn时间内找到一个整数i在这个无限数组中的位置。

logn意味着将数组一直除以2,直到找到它为止,就像在二进制搜索中一样。。。所以你需要知道n的值

C代码:

调用函数的代码:

int position = findInteger(array, 0, searchedValue);
public int findInteger(int[] array, int position, int searchValue)
{
    if(array[position] = searchValue)
        return position;
    else if (array[position] > searchValue)
        position = position / 2;
    else // array[position] < searchValue
        position = (array.Count() + position)/2;
    findInteger(array, position, searchValue);
}
职能:

int position = findInteger(array, 0, searchedValue);
public int findInteger(int[] array, int position, int searchValue)
{
    if(array[position] = searchValue)
        return position;
    else if (array[position] > searchValue)
        position = position / 2;
    else // array[position] < searchValue
        position = (array.Count() + position)/2;
    findInteger(array, position, searchValue);
}

从问题陈述中可以看出,存在一个长度不定的数组A,其中至少有n个条目存在,并且按排序顺序排列。我们假设前n个条目是升序的正整数,如果j>=n,则访问[j]返回nil。一开始,n是未知的。给定i,问题是确定j使得A[j]==i,或者如果没有这样的j,则中断到步骤5。否则继续执行步骤2的while循环。 现在k=i。在[k:L]中进行二进制搜索以查找i。如果找到,则返回其索引,否则返回nil。 为了确定所述方法是Oln有界的,请注意,它最多使用2*lgn步来查找n或L,以使A[L]>i,然后最多使用lgn步来查找A[k:L]中的i,其中lgn=lnn/ln2


如果假设当j>=n时,访问[j]不会返回nil,而是返回一个“随机数”,那么这种方法就失败了;首先,它可能会找到[j]==i,但j>n;另一方面,Oln时间界限可能不成立,或者仅在概率上成立;该算法需要重述,以检测A[L]值序列中的减少;如果A是这样的,A[n+1]>A[n]>A[n-1],那么n无论如何都不能确定

无限数组!=未知数组长度这个问题的答案是二进制树可能的算法分析classinfinite数组是未知长度,因为你永远不会知道数组的长度。我知道BT是解决方案的一部分,但它不是完整的解决方案。我编辑了答案,因为我在它意外完成之前发送了答案。是的,我在考虑这个问题,但如果有重复怎么办。也就是说,数组的开头有一百万个0。搜索值是10,然后10在一百万个零之后,所以它永远找不到它,因为它看起来是从0到10。而不是专注于寻找x的指数。我怎样才能找到有多少排序元素?很好的答案!!!完美的非常感谢。