最近在看动态规划的时候遇到了
res = float('INF')
,不知道是什么意思,为什么要这么使用,经过查阅,现将用法记录如下。
def coinChange(coins: List[int], amount: int):
def dp(n):
# base case
if n == 0: return 0
if n < 0: return -1
# 求最小值,所以初始化为正无穷
res = float('INF')
for coin in coins:
subproblem = dp(n - coin)
# 子问题无解,跳过
if subproblem == -1: continue
res = min(res, 1 + subproblem)
return res if res != float('INF') else -1
return dp(amount)
如上面的例子中使用到的:
float("INF")表示为正无穷;
float("-INF")表示负无穷用法:
- 用INF做加法、乘法等算数运算仍然会的到inf:
In [1]: 1 + float('INF')
Out[1]: inf
In [2]: 88 * float('INF')
Out[2]: inf
注意:这里使用INF * 0会的到not-a-number(nan)
# 正无穷 * 0 得到nan
In [3]: 0 * float('INF')
Out[3]: nan
- 除了 INF 外的其他数除以 INF ,会得到0:
In [4]: float('INF') / float('INF')
Out[4]: nan
In [5]: 2020 / float('INF')
Out[5]: 0.0
In [6]: 12138 / float('INF')
Out[6]: 0.0
- 任何其他的数值除以 INF 都会得到 INF, 因为INF表示正无穷
In [7]: float('INF') / 1203434
Out[7]: inf
- 如果 INF 涉及到 < 和 > 不等式的问题:
- 记住所有数都比 -inf 大,所有数都比 +inf 小就可以了。
In [8]: 12138 < float('INF')
Out[8]: True
In [9]: 12138 < float('-INF')
Out[9]: False