【问题标题】:Optimize Binary Search优化二分查找
【发布时间】:2017-12-05 03:28:27
【问题描述】:

我是 python 新手,非常热衷于学习算法。 我已经为二进制搜索编写了示例代码,任何人都可以建议我如何以更 Python 的方式获得相同的结果(优化代码,或者尽可能使用 Bisect)?

def bee_search(alist, target):
    sort_list = sorted(alist)

    while len(sort_list) >= 1:
        end = len(sort_list)
        middle = int((0 + end)/2)

        if target == sort_list[middle]:
            print "Found it", str(sort_list[middle])
            break
        elif target > sort_list[middle]:
            sort_list = sort_list[middle:]
        elif target < sort_list[middle]:
            sort_list = sort_list[:middle]
        else:
            return "Fount it", str(sort_list[middle])

    else:
        print "List is Empty"

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
bee_search(arr,15)

【问题讨论】:

标签: python binary-search


【解决方案1】:

这可能回答了您的部分问题。并不需要真正获取中间索引,可以比较alisttarget中的最大值:

def bee_search(alist, target):
    largest = max(alist)
    if target == largest: 
        print "Found", target
    elif target < largest: 
        print"Found", target
    else:                  # target > largest
        print("Not found")

target == largesttarget &gt; largest 时这没问题,但target &lt; largest 时不行,是的,这是一个错误的算法!

arr = [1,0,2,3, 10, 200, 5, 29, 10, 39, 109]
bee_search(arr, 30)

运行时输出:Found 30

这个问题也适用于你的算法,一个简单的比较不能明确告诉我们alist是否有整数30的引用。您可能需要考虑解决方法,不要放弃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2021-06-14
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多