【发布时间】:2017-05-27 04:12:54
【问题描述】:
我有以下具有指数复杂度的函数:
c :: Integer -> Integer
c n
| n <= 4 = n + 10
| otherwise = c (n-1) + 2 * (c (n-4))
我正在努力使这个函数的复杂性变为线性。
c x 应该终止,即使 1000
【问题讨论】:
-
您可以从
0开始将该函数的值制成表格,并将递归调用替换为对该表的查找。使用一个简单的列表,这变成了 O(n^2)。正如 n.m. 所建议的那样。然后,这可以避免 O(n) 查找并实现 O(n) 总复杂度。