什么是“快速排序的杀手对手”?

时间:2016-04-03 09:38:29

标签: algorithm quicksort

我已阅读快速排序。我们使用pivot元素而不管数组中的其他数据集。我所知道的;这个杀手对手告诉输入导致二次时间复杂度(实际上)。但是如何?

编辑:快速排序对手杀手published paper的以下几行不明白。

最初对手使所有物品都燃气。当两个燃气项目进行比较时,一个被”冻结“进入 一个明确的“固体”值,大于任何已经固定的值。然后重新比较操作数。 当一个固体项目与一个燃气项目进行比较时,它会比较低。当比较两个固体项目时, 答案取决于冻结值。

Link to adversary killer for quick sort

2 个答案:

答案 0 :(得分:1)

将“gas”和“solid”视为对手应用于数组项目的标签,以便记住quicksort已经看到哪些项目。对手的工作原理如下:

  • 对手给出了一系列标有“gas”的项目,并且正向无穷大的值为quicksort;
  • quicksort选择要比较的项目;
  • 对手可以介入,将“gas”标签更改为“solid”标签,为该项目提供有限的整数值,然后允许quicksort继续进行。

该程序的设计使得只有在快速排序尚未移动的情况下才能冻结项目。因此,如果我们在所有项目都是实体的情况下取出它们,按照原始顺序排列它们,并在没有对手的情况下快速进入,快速排序将使用与对手存在时完全相同的比较序列。

答案 1 :(得分:1)

本文假设对手方面具有异常能力:对手控制quicksort调用的比较函数。换句话说,攻击者不仅可以在开始时提供恶意制作的数据数组,还可以在quicksort运行期间调整其行为。

鉴于这种力量,对手可以有效地构建一个即时的输入阵列' (由quicksort观察),其中每个枢轴的选择值都高于之前观察到的所有元素。这样,选择n个枢轴,并将每个枢轴与O(n)个元素进行比较,产生O(n^2)的运行时间。

'在飞行中'功能允许也打破quicksort的随机版本。但是,除非您提供攻击者同时提供输入和比较方法的在线排序服务,否则您不必担心此攻击。