创建二进制搜索功能以查找插入元素的位置

时间:2014-03-23 19:33:26

标签: python binary-search

任务:编写一个函数binary_search,它具有O(log n)时间复杂度,以找到插入元素的位置,使得:

binary_search(42, (-5, 1, 3, 5, 7, 10))

给出6。

请帮我解决这个问题。我该怎么办呢?

2 个答案:

答案 0 :(得分:1)

以下内容可能会有所帮助: 该解决方案具有O(log(n))运行时。类似于二进制搜索 Binary Search Wiki

equals

答案 1 :(得分:0)

这是二元搜索的变体问题,它与查找序列中小于k(要插入的元素)或大于k的最小元素的最大元素相同。

def binary_search_insert(target, seq):
    U = len(seq) - 1 
    L = 0 
    result = 0 
    if target <= seq[0]:
        result = 0 
    elif target >= seq[len(seq) - 1]: 
        result = len(seq)
    else:
        while L <= U:
            M = (L + U)/2
            if seq[M] <= target:
                L = M + 1 
            else:
                result = M 
                U = M -1
    return result

#test case
In [34]: seq
Out[34]: [1, 2, 3, 4]

In [35]: k = 2

In [36]: binary_search_insert(k, seq)
Out[36]: 2

In [37]: k = 2.5

In [38]: binary_search_insert(k, seq)
Out[38]: 2

In [39]: k = 3.5

In [40]: binary_search_insert(k, seq)
Out[40]: 3