例: 1000 の浮動小数点数のセットがあります。セットから最小のアイテムを繰り返し削除し、0 から 1 の間の乱数に置き換えたいとします。これを行う最も速い方法は、heapq モジュールを使用することです。
heap = [0.0] * 1000
# heapify(heap) # usually you need this, but not if the list is initially sorted
while True:
x = heappop(heap)
heappush(head, random.random())
これには、反復ごとに、ヒープの長さの対数に相当する時間がかかります (つまり、長さ 1000 のリストの場合、約 7 単位)。他のソリューションは、直線的な時間を要します (つまり、約 1000 単位で、140 倍遅くなり、長さが増加するとますます遅くなります)。
lst = [0.0] * 1000
while True:
x = min(lst) # linear
lst.remove(x) # linear
lst.append(random.random())
また:
lst = [0.0] * 1000
while True:
x = lst.pop() # get the largest one in this example
lst.append(random.random())
lst.sort() # linear (in this case)
あるいは:
lst = [0.0] * 1000
while True:
x = lst.pop() # get the largest one in this example
bisect.insort(lst, random.random()) # linear