当我看到它虽然是n log n
时,我正在阅读关于快速排序的时间复杂性,但是对于病理输入,它减少到 n^2
。当我去检查病理输入在这种情况下意味着什么时,我在维基百科(以及其他几个博客)上读到,在计算机科学中,病态输入是任何违反正常复杂性或算法正确性的输入!嗯,这有点循环。在这种情况下,病理输入究竟是什么?
答案 0 :(得分:3)
许多排序算法存在数据
的问题我发现这个page that looks interesting与各种各样的视觉比较
答案 1 :(得分:3)
它可能更适合英语(或其他一些词源相关的)SO网站,但病理来自希腊语,意味着研究疾病或痛苦(也是情感,因为古希腊人是以将这两者联系起来而着称......),并在这种情况下 - 对正常秩序的各种破坏。
因此,算法的病态案例是它可能必须处理的最糟糕的输入,一个如此中断或排列不当以至于它使您最难执行任务的工作。最糟糕的情况是执行复杂性,并且通常用于描述未知数据的算法复杂性。在某些情况下,当最坏的情况真的很模糊或不太可能时,也可以讨论常见的案例复杂性并找到优化它的算法。
对于快速排序算法,它将是一个输入恰好包含您选择的所有枢轴(无论是随机的还是其他方法),映射到当前部分的一侧,渲染排序过程始终通过步骤方面最差的路径。
答案 2 :(得分:1)
我认为一个例子可能有所帮助。
假设您的Quicksort程序中位数为3。它伪随机地选择三个元素,在中间取一个元素,并将其用作枢轴。 (你希望它尽可能接近中间数。)如果选择输入的顺序恰到好处,那么每次选择三个元素时,它们要么是最高的三个,要么是最低的三个,你会做一个每次都对枢轴进行可怕的选择,迫使算法使用两个排序过程来仅排序三个元素并导致最坏情况下的Omega(n ^ 2)操作。
一般来说,如果数据被选择为每个步骤中程序中最差(或至少异常不好)的数据,则数据是病态的。