演算法導論第三版習題5 3

2021-07-09 14:19:14 字數 1633 閱讀 6450

在進入迴圈前,先將在整個陣列中隨機選擇乙個數至於a[

1]即可:

permute-in-place(a)

1 n=a.length

2 swap a[1] with a[random(1,n)]

3 for i=2 to n

4 swap a[i] with a[random(i,n)]

第二步其概率為1n

,後面一樣

不能。雖然這個演算法確實不會產生恒等排列,但是不能產生除恒等排列外的任意排列。因為演算法第三步使所有a[

i]不能至於原來的位置。例如,當n=

3 時,除恒等排列外一共應該有n!

−1=5

個排列,但該演算法只能產生3個排列。

不會。。。對於a

中每個元素a[

i]來說,當of

fset

確定了,則a[

i]將出現在i+

offs

et位置(超過了

n 就減去

n),這樣由於of

fset

=ran

dom(

1,n)

,off

set 取1−

n 中任意乙個的概率都為1/

n ,所以a[

i]出現在

b 中任何替丁位置的概率都為1/

n。 但是因為該演算法只是在1−

n 之間取了乙個數,然後將整個陣列

a 向右平移了of

fset

個位置,所以一共只能產生

n 個排列,而均勻隨機排列一共應該有n!

個,所以aemstrong教授錯了

在過程permute-by-sorting中,我們是在1到n3

這n3 個數中隨機選擇

n 個出來放在陣列p中,所以對於p,其中每乙個元素都唯一的概率為 pr

=n3⋅

(n3−

1)⋅⋯

⋅(n3

−n+1

)n3n

由於 n3−

n+1>n3

−n2=

n2(n

−1)

所以 pr≥

[n2(

n−1)

]nn3

n 也即 pr≥

n−1n

=1−1

n 可以對於相同的幾個優先順序的繼續使用permute-by-sorting演算法將其再次進行排序

演算法實際執行的第一步為 s=

random-sample(0,n-m)=∅

第二步中取第乙個元素i=

rand

om(1

,n−m

+1) ,相當於在總集和的前n−

m+1 個元素中任選乙個元素,概率為1n

−m+1

之後娶第二個元素時,總集和中的前n−

m+2 個元素中,第一次已經取得了乙個元素,故還剩n−

m+1 個元素,在這n−

m+1 個元素中在任取乙個作為第二個元素,其概率也為1n

−m+1

對於所有取得的

m 個元素,概率都為1n

−m+1

故每個m子集是等可能的,且一共只取

m 次,故值呼叫ramdom函式m次

演算法導論第三版習題5 2

正好僱傭一次說明第一次僱傭的就是所有應聘者中最好的,所以概率為1n 正好僱傭 n 次說明所有應聘者按優秀從低到高依次出現,第一位是最差的,概率為1n 第二位其次,概率為1n 1,所以整體概率為1n 正好僱傭兩次,說明第乙個應聘者不是最好的,概率為n 1n,第二個應聘者是最好的,概率為1n 1,所以概...

演算法導論第三版習題6 3

a a.leng th 9 故從i a.l engt h 2 4開始呼叫max heapify a,i a 4 9 8 故交換a 4 和a 8 得到新的序列a1 b 接下來呼叫max heapify a,3 a 7 3 6 故交換a 3 和a 6 得到a2 c 第三步呼叫max heapify a,...

演算法導論第三版習題8 1

最小深度為n 1 就像插入排序最好的情況一樣,對已經排序好的序列排列的情況。k 1nl gk k 1n lgn nlgn 所以,lg n o n lgn k 1nlg k k 1n 2lgk k n 2 1nlg k k n 2 1nl gk k n 2 1n lg n 2 n2lg n2 n 2l...