二进制搜索传递列表片而不是整个lis

2024-04-26 07:07:09 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我们传递list slice而不是整个list,那么这个排序列表的二进制搜索会更快吗?在

正常:

def binary_search(data, target, low, high):
if low > high:
    return False
else:
    mid = (low + high) // 2
    if target == data[mid]:
        return True
    elif target < data[mid]:
        return binary_search(data, target, low, mid-1)
    else:
        return binary_search(data, target, mid+1, high)

对于list slice(我不得不修改一下):

^{pr2}$

我目前正在学习算法,所以我真的不知道这是否是最佳实践。在


Tags: target列表searchdatareturnif排序二进制
2条回答

第二种方法的问题是,这种切片在每次迭代时从原始列表创建另一个list对象,这意味着:

  • 内存分配
  • 从原始列表复制内存

因此,索引可能会变得更清晰,但性能实际上会降低,导致搜索效果的相反。在

我认为第二种方法的TimeComplexity与普通二进制搜索相同,但是{}是不必要的增加。。在

第一个二进制搜索使用常量O(1) space,这意味着算法占用的空间对于数组中任何数量的元素都是相同的。 但在第二种情况下,空间复杂度不需要增加O(logn),因此效率低下。在

相关问题 更多 >