证明算法的上限或下限是什么意思?
答案 0 :(得分:49)
证明上限意味着您已经证明该算法将使用不超过对资源的某些限制。
证明下限意味着您已经证明该算法将使用不小于对资源的某些限制。
此上下文中的“资源”可能是时间,内存,带宽或其他内容。
答案 1 :(得分:5)
上限和下限与算法的最小和最大“复杂度”有关(我建议使用该词,因为它在复杂性分析中具有非常特殊的含义)。
以我们的老朋友泡泡排序为例。在所有数据已经排序的理想情况下,所花费的时间是f(n),该函数取决于n
,列表中的项目数。那是因为您只需要对数据集进行一次传递(交换为零)以确保您的列表已排序。
在一个特别糟糕的情况下,数据的排序方式与您想要的顺序相反,所用的时间变为f(n 2 )。这是因为每个传递将一个元素移动到正确的位置,您需要n
个传递才能完成所有元素。
在这种情况下,上限和下限是不同的,即使大O复杂度保持不变。
顺便说一句,泡沫排序受到很多诽谤(通常是有充分理由的)但在某些情况下它可能有意义。我实际上在一个应用程序中使用它,其中大部分数据已经被排序,并且一次只有一个或两个项目被添加到列表的末尾。要添加一个项目,并使用反向冒泡排序,您可以保证新列表将在一次通过中排序。这说明了下限概念。
实际上,您可以优化冒泡排序,将下限设置为f(1),只需提供一个额外的数据,指示列表是否已排序。您可以在排序后进行设置,并在最后添加项目时将其清除。
答案 2 :(得分:2)
无论边界(上限或下限)如何,我们总是在谈论我们可以考虑的最坏情况输入。例如,在排序中,我们假设最坏情况是未排序的输入列表。
我的理解是问题有一个下限。例如,我们说基于比较的排序的下限是\ Omega(n log n);我们没有假设我们使用什么特定的基于比较的排序算法。无论算法(合并排序,快速排序等),我们都不能比\ Omega(n log n)的这个边界做得更好。下划线直观地告诉我们,特定的问题有多难。
当我们谈论一个特定的算法时,我们谈论上限。例如,我们说冒泡排序的上限是O(n ^ 2),合并排序的上限是O(n log n)。直观地说,上限告诉我们一个特定的算法在解决问题方面有多好。