我想知道算法的复杂性与问题的复杂性之间的区别,也就是说,哪些点与两个不同
答案 0 :(得分:3)
好问题!大多数人都不区分这两者,这是一个很大的禁忌。
简单地说,算法的复杂性是算法的运行时间。这可以通过多种方式表示,大O,大Theta或任何类似的Landau Notations。还有其他表示形式,但最常用于大O表示法,可用于分析算法的最坏情况时间复杂度作为输入大小的函数。
问题的复杂性通常是解决问题的任何算法的下限(wiki这里是一个不错的资源)。例如,我们可以证明基于比较的排序具有n log n
的下限。这意味着,通过比较元素进行排序的任何算法,无论使用哪种算法,在最坏的情况下至少需要n log n
次。使用Landau表示法我们会说这个问题需要Omega(n log n)
。
总之,问题复杂性是一个下限,算法通常建立一个上限。当您找到一个算法的上限与问题的下限匹配时,您就找到了一个渐近最优的算法!