在渐近分析的情况下,迭代和递归二进制搜索算法之间的区别是什么

时间:2011-10-15 19:43:03

标签: python algorithm recursion iteration binary-search

我需要展示迭代和递归二进制搜索算法'渐近运行时分析'之间的差异。据我所知,它们具有相同的最坏情况复杂度(O(log(n))但在某些资源中它表示递归有O(log(n)+1)。我有点困惑,有人可以帮我吗关于这种情况?

我还需要改进python递归二进制搜索算法,使其在与迭代时间相同的时间运行。代码写在下面。

谢谢!

def binarySearch(alist,item):
    if len(alist) == 0:
        return False
    else:
        midpoint = len(alist)/2
        if alist[midpoint] == item:
            return True
        else:
            if item<alist[midpoint]:
                return binarySearch(alist[:midpoint],item)
            else:
                return binarySearch(alist[midpoint+1:],item)

1 个答案:

答案 0 :(得分:2)

O(log(n)+ 1)与O(log(n))相同 - 渐近地,它们产生相同的函数集。常量加法被忽略,就像常数倍。

它们在空间使用方面有所不同 - 递归二进制搜索将使用log(n)空间(因为堆栈),除非编译器删除尾部调用并将其转换为非递归定义。 / p>

无论如何,你的算法在性能上有很大的损失,因为切片非常昂贵(O(n))。