|
1
26
是的,这是一个安全风险——具体来说是DoS——通过在快速排序中添加递归深度检查,并在达到某个深度时切换到其他内容,可以很容易地减轻这种风险。如果你换成heapsort,你会得到 introsort ,这是许多STL实现实际使用的。 或者,您只需随机化轴元素的选择。 |
|
2
9
许多快速排序的实现都是使用 randomized version of the algorithm DoS attack 使用精心编制的输入是不可能的。
|
|
|
3
5
看一下这个问题(和有标记的答案),它讨论了减少QuickSort最坏情况的方法: |
|
|
4
1
如果性能很重要,那么在大多数情况下,无论是否出于安全考虑,快速排序似乎都是一个糟糕的选择。有没有什么东西会让你回避像Heapsort或Mergesort这样的算法? |
|
|
5
1
我认为这在很大程度上是一个问题,你实际上在哪里使用快速排序。例如,在处理5个项目的数组时,使用O(n^2)算法是非常好的。另一方面,当数据可能非常大时,担心DoS并不是你要面对的第一个问题——第一个问题是在你面对真正的问题之前性能会变得很差。考虑到大量其他可用的算法,如果它位于关键位置,请更换它。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |