【发布时间】:2012-10-12 03:13:44
【问题描述】:
我正在课堂上研究算法复杂性,我需要知道是否还有其他算法复杂性,我知道和研究的是两种类型 1- 是 BIG O 中的复杂性,即时间和性能以及其他 2-是空间复杂度,即内存复杂度, 算法有任何其他类型的复杂性吗?算法是否由我错过的其他任何东西来衡量?
【问题讨论】:
标签: algorithm data-structures complexity-theory
我正在课堂上研究算法复杂性,我需要知道是否还有其他算法复杂性,我知道和研究的是两种类型 1- 是 BIG O 中的复杂性,即时间和性能以及其他 2-是空间复杂度,即内存复杂度, 算法有任何其他类型的复杂性吗?算法是否由我错过的其他任何东西来衡量?
【问题讨论】:
标签: algorithm data-structures complexity-theory
就算法的渐近复杂度而言 - 是的,算法(和问题)是根据空间和时间来衡量的。
但是,我可以说的还有很多。我会尝试解决一些问题:
空间/时间消耗来源于一种分析方法
有 4 种常用的算法分析方法,用于空间和时间。请记住,big-O 是一组函数,但是如何导出函数呢?复杂度的函数是根据分析方法推导出来的,分析方法(通常)是以下之一:
这些方法中的每一种都可以用于任何算法 - 并且不能保证结果相同。例如,快速排序具有O(n^2)最坏情况时间复杂度和O(nlogn)平均情况时间复杂度。
更多套装:
除了大 O 符号,我们还使用其他符号来表示复杂度。其他常用符号是(按使用的通用性):
不要与分析方法混淆:Big Theta/Big O/ 符号中的每一个...都可以与任何分析方法配对(最坏情况/平均情况/...)
更多关于 Big Theta、Big O 的详细信息以及它们之间的区别,请查看this thread
理论复杂度:
在理论领域"Complexity Theory" - 我们分析问题,而不是算法。在这个领域,我们关心一个问题是否可以多项式解决(也就是说,如果输入的大小为 n,那么问题可以在 n 的某个幂次方中解决),多项式验证(给定一个可能的解决方案,检查它是否正确)。但是,还有其他类。
常见的复杂度类别有:
此外 - 我们感兴趣的是问题是否可以解决/可决定。描述问题的可解决性的常用类有:
现实世界:
在现实世界的应用程序中 - 我们不仅关心理论空间/时间复杂性,还关心常数(一种算法花费一半时间的算法要好得多,即使它们可以属于同一复杂度等级。这是因为复杂性类忽略了常量。)。
我们还考虑程序/算法的实施时间和可维护性。
【讨论】: