插值搜索产生错误的输出

时间:2018-03-05 12:27:37

标签: python python-3.x search

这里我试图在Python(3.6.1)中实现插值搜索。我的逻辑似乎是正确的,但输出总是给我False,除非我将列表的第一个索引作为搜索键。 代码如下:

def NSearch(l,n,s):
    beg = 0
    end = (n-1)

    while (beg<=end) and (s>=l[beg]) and (s<=l[end]):
       p  = beg + int(((float(end - beg) / ( l[end] - l[beg])) * ( s - l[beg])))
       if (l[p]==s):
         return True
       if (l[p]<=s):
         beg = p + 1
       else:
         end = p - 1

    return False    

liost = [23, 76, 17, -87, 56]
#x = int(input())
x = 76
print(NSearch(liost,len(liost),x))

1 个答案:

答案 0 :(得分:0)

阅读:How-to-debug-small-programs/

我在你的时间设置一个断点,并仔细研究你的例子的值。

# while (beg<=end) and (s>=l[beg]) and (s<=l[end]):

while (0<=4) and (76>=23) and (76<=56):     # this is false, function does not enter while.

    # all code in while block never executed == irrelevant 

return False

然后我查了interpolation search

  

插值搜索是一种搜索已按照数值

排序的索引数组中的给定键的算法

然后我查看了你的输入:

liost = [23, 76, 17, -87, 56]  # not ordered

并将其修复为:

x = 76
print(NSearch(sorted(liost),len(liost),x))

现在如果发现它 - 添加了几个其他值来检查和瞧瞧:工作。

旁注:

print (x in liost) # prints True as well...