指数搜索?

时间:2013-10-02 18:38:47

标签: java implementation

是否有任何正文都有指数搜索的java实现?我找不到关于该算法的任何想法如何实现它?类似的东西:

 * Signature method that must implement exponential search.
 * @ Param searchArray integer array in ascending.
 * @ Param x integer element to search for.
 * @ Return integer containing the position in the array <CODE> searchArray <\ CODE>
 * In case the element <CODE> x <\ CODE> be located in this otherwise
 * <CODE> Returns NOT_FOUND </ CODE>

public int exponentialSearch (int [] searchArray, int x);

2 个答案:

答案 0 :(得分:0)

我愿意打赌,这不是指数式搜索,而是binary search,您的数据已经按升序排序。

大致遵循以下步骤:

  • 从一个定义为数组长度的楼层的点开始除以2.
  • 将该点与您要查找的值进行比较。
  • 如果匹配,请返回找到它的位置。
  • 如果它较小,请将数组的子集从0开始到您的起点(不包括),然后重复上述步骤。
  • 如果它更大,请从起点+ 1和阵列的其余部分中取出数组的子集,然后重复上述步骤。

答案 1 :(得分:0)

Wikipedia中所述,指数搜索算法假定列表已排序,并且由两个阶段组成。

(1)确定搜索键位于哪个(2 k-1 ,2 k )间隔(k> = 1)中

(2)在此间隔内执行binary search

用于对整数数组进行指数搜索的伪代码:

int exponentialSearch(int arr[], int size, int key)
{
    if (size == 0) {
        return NOT_FOUND;
    }

    int bound = 1;
    while (bound < size && arr[bound] < key) {
        bound *= 2;
    }

    return binarySearch(arr, key, bound/2, min(bound + 1, size));
}

算法的复杂度为O(log i),其中i是数组中搜索关键字的索引。