algorithm - 如何将递归定义的输入大小函数转换为问题输入大小的直接函数?

标签 algorithm math time

假设我有一个对大小为 n 的输入进行运算的算法,并且我知道 n 所花费的时间是 n-1 所花费时间的两倍。我可以观察到在这个简单的情况下(假设 n = 0 需要 1 秒)算法需要 2n 秒。

是否有一种通用方法可以将递归定义的定义转换为更熟悉的直接表达式类型?

最佳答案

Master Theorem

特别是:

有 T(n) = aT(n/b) + nc

如果 logba < c,则 T(n) = O(nc)

如果 logba = c,则 T(n) = O(nclog[n])

如果logba > c,则T(n) = O(nlogba)

这是一个需要知道的有用定理,但不能完全回答您的问题。

您正在寻找的是递归关系的生成函数。一般来说,这些只能解决非常简单的情况,即当 f(n) = Af(n-1) + Bf(n-1) 和 f(0) = f(1) = 1(或 f(1) =一个)。其他递归关系很难求解。

参见 linear recurrence relation了解更多信息。

关于algorithm - 如何将递归定义的输入大小函数转换为问题输入大小的直接函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185795/

相关文章:

c - 轮询 C 中的时钟周期数 sw

java - 时间:下周五怎么过?

algorithm - 一种类似于谷歌地图中的绘图编码算法

algorithm - 30,000 个数据点,找出 2 周时间内的最大变化

ruby - 如何在 Ruby 中对数字数组求和?

java - 创建一个函数来查找任意线段和正方形的交集

PHP 检查当前时间是否小于指定时间

algorithm - 如果在 Breadth-FirstSearch(BFS) 算法中使用堆栈而不是 queueq 会发生什么?

algorithm - 检查是否存在两个相等的集合

php - 基于字符集的固定长度的所有字符串组合