Algorithm 算法的复杂性

Algorithm 算法的复杂性,algorithm,sorting,complexity-theory,Algorithm,Sorting,Complexity Theory,我正在读这一页,他们想关注的一点是: “表明在选择算法时,最坏情况下的渐近行为并不总是决定因素。” 然而,我相信这是决定性的,因为取决于数组的长度,一种排序可能比另一种更好,这通过它的渐近线以图形的方式显示出来。你怎么认为?多亏了经常出现这样的问题:一种算法通常比另一种算法快,但最坏的情况是渐进地慢。具体来说,对于您正在处理的特定数据,一种算法可能会更快,即使在最坏的情况下它会逐渐变慢。在某些情况下,内存使用也可能是一个问题。快速排序与合并排序是一个很好的例子。它们的平均运行时间都是O(n lo

我正在读这一页,他们想关注的一点是:

“表明在选择算法时,最坏情况下的渐近行为并不总是决定因素。”


然而,我相信这是决定性的,因为取决于数组的长度,一种排序可能比另一种更好,这通过它的渐近线以图形的方式显示出来。你怎么认为?多亏了

经常出现这样的问题:一种算法通常比另一种算法快,但最坏的情况是渐进地慢。具体来说,对于您正在处理的特定数据,一种算法可能会更快,即使在最坏的情况下它会逐渐变慢。在某些情况下,内存使用也可能是一个问题。快速排序与合并排序是一个很好的例子。它们的平均运行时间都是O(n logn),但快速排序通常更快。但是,在最坏的情况下,快速排序的运行时为O(n^2)。此外,mergesort传统上需要O(n)个额外内存。有一个就地变量,但我认为速度要慢得多。另一个考虑因素是mergesort更容易并行化


总之,算法的选择取决于您使用的数据、多线程容量和内存使用情况

以哈希表为例。一般来说,它们非常快,插入、查找、删除应该在固定的时间内工作,这很好。这就是为什么每个人都使用它们。然而,在最坏的情况下,每个元素的哈希值都是相同的,然后运行时会变得更糟。有一些方法可以将损害降至最低,如布谷鸟哈希等,但在最坏的情况下,哈希表的运行时间或内存消耗比其他数据结构更差。通常,您不会选择哈希表,因为它们是最坏情况下的渐近运行时,因为这不太可能发生


编辑:很抱歉,我没有回答这个问题是关于算法的,而不是一般的运行时复杂性。但我只需要一个小小的改变:假设您需要一个算法来查找数组中的所有重复项。只需将所有元素插入哈希集中即可。如果您有一个好的散列函数,通常只有在元素相同时才会发生冲突。因此,您将有O(n)运行时。但是如果你得到很多误报,其中元素有相同的散列值,即使它们不同,你的findDuplicates算法将占用二次运行时间。同样,这些碰撞不太可能发生,因此您可能无论如何都会采用这种方法。

在现实世界中,K和M也是一个主要因素,例如动画没有考虑这些因素。K是算法中的常数因子,M是内存开销

这就是为什么Quicksort在任何地方都被广泛使用的原因,因为它们不仅具有良好的平均值,而且平均值的K&M非常低


但是,您必须缓解最坏情况仍然非常糟糕的问题,使用类似的回退算法,如果递归太深,请回退到堆排序,或者当值的数量变少时,请切换到插入排序。

经典示例是快速排序,这是一种常用的排序算法,因为它的速度很快,预期的时间是O(N logn),即使最坏的情况是O(N^2)。。。尽管库实现通常具有保护和回退功能,以确保病理数据保持O(N logn)