我正在尝试实现Heap定义的优先级队列,该算法来自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,我该如何定义-∞?
答案 0 :(得分:9)
Python具有特殊值float('inf')
和float('-inf')
。
答案 1 :(得分:3)
实际上,在Python 2中,None
小于任何整数,因此您可以使用None
。在Python 3中,你有(至少)四种选择:
None
,每当您比较两个值时,请明确测试它们为None
。Heap-Increase-Key
。答案 2 :(得分:0)
我在自己处理堆实现时偶然发现了这个问题。 :)
从 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 常量)。