排序容器的时间复杂度

Time complexity for a sorted container

我正在使用 Python 的 SortedDict 容器来解决问题,想知道获取最高键的时间复杂度是多少:

from sortedcontainers import SortedDict
treeMap = SortedDict()
treeMap[1] = [4]
treeMap[1].append(6)
treeMap[3] = [9]
print(treeMap.keys()[-1]) # get the highest key in the sorted dictionary, should be 3

我知道 SortedDict 中的大多数操作都是 O(log(n)),但我对 treeMap.keys()[-1] 特别困惑。对于普通字典,d.keys() 在 python3 中是 O(1)。.也是 d.keys()[-1] O(1)?在 sorteddict 的情况下是 log(n) 还是 O(n) 因为我需要访问最后一个元素?

sortedcontainers SortedDict 维护密钥顺序,在幕后,在 sortedcontainers.SortedList 中。所以你问的操作真的是SortedList.__getitem__()。来自 the docs:

__getitem__(index)[source] Lookup value at index in sorted list.

sl.__getitem__(index) <==> sl[index]

Supports slicing.

Runtime complexity: O(log(n)) – approximate.

现在是对数时间。