22

ヒープ定義の優先度キューを実装しようとしています。アルゴリズムは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を使用して、-∞をどのように定義するかということです。

4

3 に答える 3

43

Pythonには特別な値float('inf')とがありfloat('-inf')ます。

于 2013-03-02T01:42:46.183 に答える
5

たまたま、Python 2ではNoneどの整数よりも小さいので、を使用できますNone。Python 3では、(少なくとも)4つの選択肢があります。

  1. min(A)-1を使用します。
  2. を使用Noneし、2つの値を比較するときは常に、それらがであるかどうかを明示的にテストしますNone
  3. 整数または-∞のいずれかで構成され、比較を正しく処理する新しいデータ型を定義します。
  4. 2行目が削除されるようにアルゴリズムを変更します。Heap-Increase-Keyどういうわけかパッチを当てる必要があります。
于 2013-01-10T17:25:45.617 に答える
3

自分でヒープの実装に取り​​組んでいるときに、これに遭遇しました。:)

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定数です)。

于 2021-06-17T20:58:46.767 に答える