Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 跳转搜索算法:伪代码错误_Algorithm_Search - Fatal编程技术网

Algorithm 跳转搜索算法:伪代码错误

Algorithm 跳转搜索算法:伪代码错误,algorithm,search,Algorithm,Search,我正在读一本关于数据结构和算法的书,目前我正在读一本关于跳转搜索算法的书。我认为书中的伪代码有错误(请检查下面打印的代码)。在步骤3期间不执行跳转,因此,下面的算法的运行时间为O(n)(并且正确实现的跳转搜索算法的运行时间为O(sqrt(n)) 总而言之,我认为跳转搜索算法中有一个错误,但是我可能错了,我将感谢任何帮助/评论。谢谢 **JUMP_SEARCH (A, lower_bound, upper_bound, VAL, N)** Step 1: [INITIALIZE] SET STE

我正在读一本关于数据结构和算法的书,目前我正在读一本关于跳转搜索算法的书。我认为书中的伪代码有错误(请检查下面打印的代码)。在步骤3期间不执行跳转,因此,下面的算法的运行时间为O(n)(并且正确实现的跳转搜索算法的运行时间为O(sqrt(n))

总而言之,我认为跳转搜索算法中有一个错误,但是我可能错了,我将感谢任何帮助/评论。谢谢

**JUMP_SEARCH (A, lower_bound, upper_bound, VAL, N)**

Step 1: [INITIALIZE] SET STEP = sqrt(N), I = 0, LOW = lower_bound, HIGH = upper_bound, POS = –1
Step 2: Repeat Step 3 while I < STEP
Step 3:
    IF VAL < A[STEP]
        SET HIGH = STEP – 1
    ELSE
        SET LOW = STEP + 1
    [END OF IF]
    SET I = I + 1
[END OF LOOP]

Step 4: SET I = LOW
Step 5: Repeat Step 6 while I <= HIGH
Step 6:
    IF A[I] = Val
        POS = I
        PRINT POS
        Go to Step 8
    [END OF IF]
    SET I = I + 1
[END OF LOOP]
Step 7: IF POS = –1
    PRINT "VALUE IS NOT PRESENT IN THE ARRAY"
[END OF IF]
Step 8: EXIT
**跳转搜索(A、下限、上限、VAL、N)**
步骤1:[初始化]设置步骤=sqrt(N),I=0,低=下限,高=上限,位置=–1
步骤2:重复步骤3,同时I<步骤
步骤3:
如果VAL步骤5:重复步骤6,而我你完全正确。伪代码有很多问题:

  • 步骤3总是进行相同的比较,因为
    步骤
    未在循环中修改。因此,这意味着在此循环中,要么设置了
    ,要么设置了
    ,但决不设置两者。如果设置了
    ,则搜索仍将采用O(n)正如您正确指出的,
    A
    的索引应该在该循环中更改,并进行“跳跃”

  • 当在该循环中设置了
    HIGH
    时,循环应立即退出

  • >P>当代码>低被设置时,<代码> + 1 < /代码>也是错误的,因为它不认为前面的元素可能是被查找的值。

  • 尽管有一个特定
    下限的参数
    ,但该变量仅在开始时用于初始化
    下限
    ,但在实际访问
    a
    时,它从未使用过

  • 奇怪的是,
    N
    是一个参数,因为逻辑上
    N=上限-下限+1
    。因此这只会导致进一步的不一致性


  • 结论:此伪代码中的错误太多,无法提供帮助。

    代码的棘手之处在于,它给出了正确的答案,但其性能是O(n),而不是O(sqrt(n))。(正确实现的跳转搜索算法的性能应该是O(sqrt(n))。)它并不总是给出正确的答案。如果正在搜索的值是唯一的,并且位于[STEP],那么它将不会被检测到,因为第(3)点。其次,如果lower_bound>STEP,并且搜索的值低于lower_bound,那么它可能会在那里被找到,而它不应该在那里被找到。与higher_bound类似的问题。当然,正确的O(sqrt(n))算法(伪代码)在上可用