algorithm - 渐近符号和通过分析算法形成递推关系

标签 algorithm recurrence

我看了很多关于渐近符号的讲座、视频和资源。我明白 O、Omega 和 Theta 是什么。但是在算法中,为什么我们总是只使用 Big Oh 符号,为什么不使用 Theta 和 Omega(我知道这听起来很笨,但请帮助我)。按照算法,这个上限和下限到底是什么?

我的下一个问题是,我们如何从算法中找到复杂性。假设我有一个算法,我如何找到递归关系 T(N) 然后计算它的复杂性?我如何形成这些方程式?就像使用递归方式的线性搜索一样,T(n)=T(N-1) + 1。如何?

如果有人可以解释我是一个新手,这样我就能更好地理解,那就太好了。我在 StackOverFlow 中找到了一些答案,但不够令人信服。

谢谢。

最佳答案

与 Theta 和 Omega 相比,为什么我们如此频繁地使用 big-O:这在一定程度上是文化原因,而不是技术原因。当 Theta 真的更合适时,人们说大 O 是非常普遍的。 Omega 在实践中使用不多,因为我们通常更关心上界而不是下界,也因为非平凡的下界通常更难证明。 (琐碎的下界通常是那种说“你必须查看所有输入,所以运行时间至少等于输入的大小。”)

当然,这些关于下界的评论也部分解释了 Theta,因为 Theta 既涉及上界也涉及下界。

提出递归关系:没有解决所有情况的简单方法。这是相对简单的递归算法的描述。

令 N 为初始输入的大小。假设你的递归函数中有 R 次递归调用。 (示例:对于合并排序,R 将为 2。)进一步假设所有递归调用将初始输入的大小减少相同的数量,从 N 到 M。(示例:对于合并排序,M 将为 N/2。)最后,假设递归函数 在递归调用之外工作。(示例:对于合并排序,对于合并,W 将是 N。)

那么递归关系就是 T(N) = R*T(M) + W。(例如:对于合并排序,这将是 T(N) = 2*T(N/2) + N。)

关于algorithm - 渐近符号和通过分析算法形成递推关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11915603/

相关文章:

javascript - Kendo - Reccurrence Editor - 更改日期格式导致值不回发到服务器

algorithm - 将最大点数包围在长度为 l 的正方形内

algorithm - 如何判断N个圆是否相交以及相交在哪一点?

algorithm - 如何求解递归 T(n) = T(n-c) +T(c) + n^2

algorithm - 合并排序的重复 - 需要解释

math - 计算机科学数学中的递归关系 T(n) = 6T(n/6) + 2n + 3 对于 n 的 6 次方 T(1) = 1?

javascript - 如何找到 3 个或更多字符串的公共(public)部分?

javascript - 用小数编写你自己的指数幂函数

algorithm - 采访 : on People Matching

algorithm - 合并排序的递归与时间复杂度