Python bisect: 值的搜索范围

Python bisect: search range of values

我正在探索 Python 中的 bisect 模块。该模块的全部用途对我来说很清楚,我现在知道如何使用它了。但是 Performance notes 在文档中说明了这一点:

Bisection is effective for searching ranges of values. For locating specific values, dictionaries are more performant.

“搜索值的范围”是什么意思? bisectbisect_left()bisect_right(),它们都接受单个值来查找索引。对文档有任何解释吗?谢谢。

我认为这意味着在 [a, b] 范围内查找值效率更高。如果您需要找到等于 c 的值,则需要在列表内搜索。但是如果用字典的话,不用查找也可以在O(1)时间内找到。

Python 字典被散列,因此提供 O(1) search/insert/delete 时间复杂度,而二进制搜索是对数的。

当您搜索特定值时,查找字典比二进制搜索更高效。如果您也在寻找特定值附近的范围,则二分搜索更有意义。例如,如果您想要最接近搜索词的值。或者,如果您想知道在您要查找的元素的位置之前已经有多少个元素。或者您正在查找的两个特定元素之间有多少元素。散列字典当然不能这样做。如您所见,在二进制搜索中,所有元素在总排序方面都是 相关的(但是它是为该特定类型定义的)。这个 属性 排序列表使二进制搜索能够对范围进行操作。在散列字典中,元素彼此无关,除非它们的散列值完全相同。