时间复杂度和计算复杂度之间的差异


14

为了衡量算法的复杂度,是时间复杂度还是计算复杂度?它们之间有什么区别?

我曾经在算法中计算基本(成本最高)操作的最大(最差)计数。


2
不是您的问题的答案,但鉴于您对这种事情感兴趣,您可能也对cs.stackexchange.com/q/13669/755
DW

1
提到渐进式片段时,“算法的复杂性”是(经常使用的)错误用语。您想说“渐近运行时”。
拉斐尔

Answers:


9

计算复杂度只是一个更笼统的术语,因为时间不是我们可能要考虑的唯一资源。第二个最明显的是算法使用的空间,因此我们可以讨论空间复杂度,它也是计算复杂度的一部分。实际上,我们可以针对您关心的任何措施执行此操作,当然某些措施比其他措施更有用。

因此,计算最坏情况下算法所采取的步骤数将为解决的问题提供时间复杂度界限,计算其使用的内存/磁带单元数将为空间复杂度界限等。

还要记住,如果要严格一点,复杂性是指问题,而不是算法,因此问题具有复杂性界限,算法具有资源界限(运行时间,空间使用...)。这只是定义形式的问题,复杂性理论可以解决问题。是的,算法是用于分析问题和复杂性和Algorithmics公司紧密联系在一起的重要工具,但形式上我们不会说合并排序(算法)是,它的问题S ^ ō [R 牛逼ñ 这是在P。合并排序使用某些资源(O n log n P小号Ø[RŤ一世ñGPØñ日志ñ步骤)。资源的约束和算法的正确性暗示了问题的复杂性(上限),但是它们是不同的东西。也是Ť Ç 0 -complete下Ç 0 -reductions,这种复杂的约束真的只能被用于一个问题陈述(但是拥有算法影响)。小号Ø[RŤ一世ñGŤC0一种C0


@shekharsuman问题,我是指计算问题的形式概念(例如k-Vertex Cover),而不是一般含义。计算复杂度是计算问题的分类,因此从形式上讲,复杂度是指我们可以对问题说的话。关于算法的结果告诉我们有关问题的复杂性的事情,但本身并不是复杂性的结果(但非正式地,我们确实谈论算法的复杂性)。
2015年

1
@shekharsuman 维基百科页面的开头段落是一个很好的摘要。
路加·马蒂森

@Luke谢谢,这很清楚。但是,如果我可以使用成语“最常用的复杂性类型来正式评估算法”(即使我知道这并不精确)。时间与计算是什么时间?我认为,总的来说,最重要的是时间,因为从某种意义上讲资源可以扩展!
中位希拉尔(Hilal)2015年

1
@MedianHilal时间确实是解决问题复杂性的最常用方法。空间并不算太落后(至少是由复杂性理论家以及处理非常大的数据集的人,而不是每天这样)。
路加·马蒂森

-2

循环复杂度通常用作计算复杂度的度量,https://stackoverflow.com/questions/9097987/calculation-of-cyclomatic-complexity中提供了一个有用的示例

通过算法可能有许多不同的路径(可能是嵌套的路径),从而使其具有较高的循环复杂度,但是没有循环会使其具有较低的时间复杂度。具有单个循环的程序将具有较低的循环复杂度,但可能具有较高的时间复杂度。

圈复杂度通常用作代码所需维护的度量。http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity中提供了更详细的讨论。这与时间复杂度不同,后者是代码的运行时间测量,可用于评估用户对系统有效性的感知。


问题是关于计算复杂度,而不是圈复杂度!
Am_I_Helpful

您可能需要阅读OP-他在询问算法的复杂性-循环复杂度可以静态衡量算法的计算复杂性-下次尝试添加正反馈
velvetytoast 2015年

2
圈复杂度不能衡量计算复杂度。计算复杂度是指运行时间,而不是源代码结构的复杂程度。
DW

@DW更准确地说,计算复杂性是指解决问题所需的资源(可能包括空间,交替,预言调用等,以及时间)。
David Richerby

@DavidRicherby我不是这方面的专家,所以请纠正错误。静态复杂性度量(例如程序大小)在某些情况下确实起作用。我是否正确,这与Kolmogorov的复杂性更相关?循环复杂性是否也是如此?一种是编写程序或问题的复杂性,另一种是解决或运行它们的复杂性……可能是情况的简短近似。我不确定我会对此提出一个明智的问题。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.