這題實在沒什麼思路,網上找了一下答案。
如果一開始就能夠確定好的晶元多於壞的,則可以保證每輪檢測結束好的晶元都多於壞的,一直到最後如果剩2塊晶元,則兩塊肯定都是好的;剩3塊晶元就再檢測一次,如果結果都是好的,就隨意取一片必定是好的;如果結果都是壞的,則剩下的那塊肯定是好的。
來證明一下上面的結論:
設有x組好晶元,y組一好一壞的晶元,z組壞晶元,一共a塊好的晶元,b塊壞的晶元。可以看到a=2x+y,b=2z+y,當然可能還有一塊多出來的,等會兒再討論。
假設一開始就已知a>b,則2x+y>2z+y,可得x>z。某一輪檢測結束剩下x個好晶元和z個壞晶元,還是有x>z,所以好晶元還是多於壞晶元。而且x+z如果有一塊多出來:
1、假設它是好的,則a=2x+y+1,由a>b得,2x+y+1>2z+y,得x+1/2>z,所以x+1>z,所以好晶元還是多於壞晶元。x+z+1<=x+y+z+1/2,可得每次檢測完都小於原規模的一半。
2、假設它是壞的,則b=2z+y+1,由a>b得,2x+y>2z+y+1,得x>z+1/2,所以x>=z+1,好晶元還是多於壞晶元。x+z+1<=x+y+z+1/2,可得每次檢測完都小於原規模的一半。
綜上,可以證明這個方法是正確的,只要a>b,就一定能在最後一輪檢測出一塊好的晶元。
檢測一塊好的晶元遞迴式為:t(n)=t(n/2)+θ(n),時間複雜度θ(n),再用這塊好的晶元去重新檢測剩下的所有晶元,時間複雜度θ(n)。所以總共時間複雜度還是θ(n)。
演算法導論 思考題 4 3
a.利用主方法可得,t n n的log3 4次方 b.n f n lgn,不能應用主方法 共log3 n 1層,每層代價n lg n 3 的i次方 最後一層共n個 1 的結點,代價為 n t n n lg n 3 的i次方 n n lgn n n log3 2 n o n 又因為t n 最後一層代價...
演算法導論 思考題 8 4
寫一下我的思路,大概是對的,詳細證明不出來。設藍色水壺為a,紅色為b 先取乙個a1,對所有的b做一次比較,可以將b分為兩個部分,一部分大於a1,一部分小於a1 再取乙個a2,將b分為三個部分 再取a3,將b分為四個部分 假設現在b被分成了k個部分,b1,b2,b3.bk,每次取ai,都從b集合的一半...
演算法導論 思考題15 7 解碼演算法
先解釋一下問題,解碼存在乙個困難為同乙個字可能被譯為它的同音字,比如語音輸入 我的手 的 可能對應於 的地得 需要結合語境判斷。ps.我看有些答案說這是 viterbi 演算法,可以自行了解。問題a,解法是乙個帶備忘錄的動態規劃 過程類似於深度遍歷 偽 如下 input v 圖的節點列表 sigma...