假設不是將元素a[i]與子陣列a[i…n]中的隨機乙個元素相交換,而是將它與陣列任何位置上的隨機元素相交換:
permute-with-all(a)這段**會產生均勻隨機排列嗎?為什麼會?或為什麼不會?1 n
2 for i
3 do swap a[i] a[random(1, n)]
顯然**肯定可以產生a中元素的全排列,但是產生的排列中有一些是相同的,這樣就要考察a中元素的每乙個全排列的重複次數是否相同,如果相同就能產生,反之就不能。
假設a=[1, 2, 3],那麼分析第2,3行的for迴圈,有下面的產生鏈:
由圖可見,
[1, 2, 3]
4[1, 3, 2]
5[2, 1, 3]
5[2, 3, 1]
5[3, 1, 2]
4[3, 2, 1]
4 a中元素的全排列中每乙個排列出現的次數是不同的,所以不會產生均勻的隨機序列。通過上面的分析,permute-with-all(a)會產生n
n 個序列,而a中元素的全排列只有n!個,並且n
n /n! ,當n>2時,是不可能得到整數的,所以當n>2時,不可能產生出均勻的隨機序列。
演算法導論 隨機演算法
一.概率分布 對於有些問題本身是屬於概率問題,如僱傭問題 對於此類問題,我們需要利用概率分析來得到演算法的執行時間,有時也用來分析其他的量。例如,僱傭問題中的費用問題也需要結合概率分析來計算得到。為了使用概率分析,我們必須使用或者假設已知關於輸入的概率分布,然後通過分析該演算法計算出平均情況下的執行...
《演算法導論》 演算法導論2 2 1插入排序
2.1 插入排序。我們分析的第乙個演算法是插入排序演算法,輸入 n個數 a1,a2,a3,a4,a5,a6,a7 an 輸出 序列的乙個排列 即重新排序 a1 a2 a3 使a1 a2 a3 插入排序演算法的偽 是以乙個過程的形式給出的,稱為insertion sort,它的引數是乙個陣列。包括了n...
演算法導論目錄
出版者的話 專家指導委員會 譯者序前言 第一部分 基礎知識 引言 第1章 演算法在計算中的作用 1.1 演算法 1.2 作為一種技術的演算法 第2章 演算法入門 2.1 插入排序 2.2 演算法分析 2.3 演算法設計 2.3.1 分治法 2.3.2 分治法分析 第3章 函式的增長 3.1 漸近記號...