ヒープ定義の優先度キューを実装しようとしています。アルゴリズムはCLRSブックの第6章にあります。擬似コードを以下に示します。
Max_Heap_Insert(A, key):
A.heap_size = A.heap_size + 1
A[A.heap_size] = -∞
Heap_Increase_Key(A, A.heap_size, key)
私の質問は、Pythonを使用して、-∞をどのように定義するかということです。
Pythonには特別な値float('inf')
とがありfloat('-inf')
ます。
たまたま、Python 2ではNone
どの整数よりも小さいので、を使用できますNone
。Python 3では、(少なくとも)4つの選択肢があります。
None
し、2つの値を比較するときは常に、それらがであるかどうかを明示的にテストしますNone
。Heap-Increase-Key
どういうわけかパッチを当てる必要があります。自分でヒープの実装に取り組んでいるときに、これに遭遇しました。:)
Python 3.5以降、数学モジュールからinf定数を使用できます
from math import inf
inf + inf # inf
inf - inf # nan
inf / inf # nan
inf * inf # inf
max(list(range(1_000_000)) + [inf]) # inf
min(list(range(-1_000_000, 1)) + [-inf]) # -inf
私はこれを知りませんでした、そして同じ順序付けプロパティを達成するためにカスタムクラスを使用しました
class MinusInf:
def __gt__(self, other):
return False
def __ge__(self):
return False
def __lt__(self, other):
return True
def __le__(self, other):
return True
def __eq__(self, other):
return False
minus_inf = MinusInf()
minus_inf >= -1_000_000 # False
これはヒープの目的で機能しますが、推奨される方法は単に使用することですmath.inf
(または、numpy.inf
これはnumpyのinf定数です)。