2016-04-03 29 views
2

我已閱讀快速排序。我們使用pivot元素而不管數組中的其他數據集。我所知道的;這個殺手對手講述導致二次時間複雜度(實際上)的輸入。但是如何?什麼是「快速排序的殺手對手」?

編輯:下面幾行來自published paper上的快速排序對手殺手不理解。

最初的對手讓gas.When兩個氣體加以比較的所有項目,一個被‘凍結’在 一個明確的‘實’的值,比任何已有了堅實的值,然後將操作數重新進行比較。 當固體項目相比,氣體項目,它比較low.When兩種固體物品進行比較時, 答案取決於凍結值。

Link to adversary killer for quick sort

+0

該文件解釋瞭如何,它比這個網站的格式允許更好。也許如果論文中的某個具體位置因爲某個特定的原因而不清楚,那麼可以進行一次話題討論。 –

+0

@ n.m。也許,你是對的,但我不明白上述論文的以下幾行。 「最初,敵人使所有物品都是氣體。當比較兩個氣體項目時,一個被」凍結「成明確的」固體「值,大於任何已經固定的值,然後重新比較操作數。 當固體物品與氣體物品進行比較時,它比較低。當比較兩個固體物品時, 答案取決於凍結值。「 – Bam

+0

請[edit](http://stackoverflow.com/posts/36383788 /編輯)你的問題,並把這個信息。 –

回答

1

想到‘氣’和」實「作爲對手應用於數組項目以便記憶的標籤哪些物品已被快速查看過。對手的工作原理如下:

  • 對手給出了一系列標記爲「gas」的項,並且具有正無窮大值以便快速排序;
  • 快速排序選擇希望比較哪些項目;
  • 對手可能會介入,將「氣體」標籤更改爲「固體」標籤,給該項目一個有限的整數值,然後允許快速排序繼續。

該過程的設計使得只有在快速排序不移動它時才能凍結項目。因此,如果我們在所有物品都紮實之後拿走這些物品,按照原始順序排列這些物品,並在沒有對手的情況下給它們進行快速排序,則快速排序將使用與對手出現時完全相同的比較順序。

+0

「對手給出了一組標有「gas」的項目以及正數無窮大的快速排序;「 你想從這句話中傳達什麼? – Bam

+0

我試圖解釋對手是如何工作的。如果我不成功,我很抱歉。 –

1

本文假設對手方有不尋常的能力:對手控制着quicksort所調用的比較函數。換句話說,攻擊者不僅可以在開始時提供惡意製作的數據陣列,還可以在運行期間調整其行爲。

鑑於這種能力,攻擊者可以在運行中有效地構建輸入數組(如quicksort所觀察到的),其中每個樞軸的選擇值都高於先前觀察到的所有元素。這樣,n樞軸被選中,並且每個元素與O(n)元素進行比較,產生O(n^2)的運行時間。

'即時'功能還允許打破quicksort的隨機版本。但是,除非您在攻擊者同時提供輸入和比較方法的情況下提供在線分類服務,否則不必擔心這種攻擊。

+0

我完全可以看到自己寫了一個類似的「對手」。我不認爲你需要任何惡意的意圖來打這個。 – Rotsor

+0

@Rotsor:的確,如果你使用了一個比較函數,那麼你會得到'O(n^2)'。但是,當比較排序算法的運行時間時,通常假設比較採用'O(1)'。 – blubb

+0

這是不同的,因爲你會平均得到'O(n * log(n))'比較,所以'qsort'的承諾沒有被破壞。 – Rotsor