算法導論 4-6

Table of Contents

1 題目

VLSI測試

Diogenes教授有n個被認爲是完全相同的VLSI芯片,原則上他們是可以互相測試的。教授的測試裝置一次可測二片,當該裝置中放有兩片芯片時,每一片就對另一片作測試並報告其好壞。一個好的芯片總能夠報告另一片的好壞,但一個壞的芯片的結果是不可靠的。這樣,每次測試的四種可能結果如下:

A芯片報告 B芯片報告 結論
B是好的 A是好的 都是好的,或都是壞的
B是好的 A是壞的 至少一片是壞的
B是壞的 A是好的 至少一片是壞的
B是壞的 A是壞的 至少一片是壞的
  1. 證明若多於n/2的芯片是壞的,在這種成對測試方式下,使用任何策略都不能確定哪個芯 片是好的。假設壞的芯片可以聯合起來欺騙教授。
  2. 假設有多於n/2的芯片是好的,可慮從n片中找出一片好芯片的問題。證明⌊ n/2 ⌋對測試就足以使問題的規模降至近原來的一半。
  3. 假設多於n/2的芯片是好的,證明好的芯片可用Θ(n)對測試找出。給出並解答表達 測試次數的遞歸式。

2 分析與解答

  1. 壞芯片可以任意輸出被測試芯片的好壞結果,當壞芯片多餘n/2且有“智能”時,所有芯 片的檢測結果可以是一樣的。當壞芯片數大於n/2的話,那麼把芯片分成三個集合:
    • k個好芯片,定義爲集合G
    • k個壞芯片,定義爲集合H
    • j個壞芯片,定義爲集合I

    其中n=2k+j,將壞芯片可以聯合起來欺騙教授定義爲,壞芯片清楚自己所在的集合,清楚自 己所在的測試裝置的位置,和與自己放在一起的芯片所在的集合。如此,將測試結果爲“芯 片是好的”定義爲1,壞的定義爲0,每個芯片的測試結果是如下結果中的一種:

      B芯片取自G B芯片取自H B芯片取自I
    A芯片取自G k-1個(1, 1) k個(x, 0) j個(x, 0)
    A芯片取自H k個(0, x) k-1個(x, x) j個(x, x)
    A芯片取自I k個(0, x) k個(x, x) j-1個(x, x)
    這樣只要壞芯片採用如此策略就能使所有芯片的檢查結果都相同:
    • 對取自集合H的芯片
      • 在對好芯片測試時,將好芯片污衊成壞芯片;
      • 在與H集合的芯片進行測試時,認爲H集合的芯片都是好芯片(包括自身);
      • 在與I集合的芯片進行測試時,在A位時,認爲I集合的芯片是壞芯片,在B位時,提 前選擇某一芯片認爲自己是I集合的成員,並且認爲I是好芯片。
    • 對取自集合I的芯片
      • 在B位時,都認爲A都是好芯片
      • 在A位時,將好芯片污衊成壞芯片,認爲H中芯片是好芯片,認爲I中其他芯片是壞芯 片。

    採用這種策略時,所有芯片的檢測結果都是k-1個(1, 1),k個(0, 0),j個(1, 0)。

  2. 當好芯片多於n/2時,先證明題中的方法能夠測得芯片的好壞,用同樣方法分析,將集合 I定義成好芯片,得到的測試結果爲:
      B芯片取自G B芯片取自H B芯片取自I
    A芯片取自G k-1個(1, 1) k個(x, 0) j個(1, 1)
    A芯片取自H k個(0, x) k-1個(x, x) j個(0, x)
    A芯片取自I k個(1, 1) k個(x, 0) j個(1, 1)
    可見,此時,當測試結果中有大於等於k-1個(1, 1)時,就可以認爲芯片是好的,如果得 到的芯片是好,那麼用這個芯片就可以將剩餘的芯片的好壞測出(只有測試結果爲(1, 1)的芯片是好芯片);如果得到的芯片是壞的,那麼將此芯片去掉,此時好芯片的數目 仍然大於n /2,重複使用此方法就可最後測試出芯片好壞,但是這種方法的最壞情況 下是每n-1次使規模降低到n-1次。要想達到題目要求的效果需要其他算法,要求每次測 試的數目爲n/2,自然想到配對測試分組,比較次數就滿足了題目要求。算法描述如下:將測試芯片的集合稱爲V,觀察測試結果表,當測試結果出現0時,兩個芯片中至少有一 個是壞的,那麼就可以把測試結果出現0的測試芯片從V中去掉歸到集合U, 顯然U中的壞的芯片數量大於等於U中元素數的一半;剩下的芯片留在集合V中,,顯然集合V中好的芯片的數量大於V中元素數的一半;重複此過程,直至V中只 剩一個元素或兩個元素,那麼V中的芯片都是好芯片,最終可以利用好芯片測試出其他 芯片的好壞。 這裏有兩個細節:
    1. 考慮芯片爲偶數的極端情況,上述某次遞歸處理的集合中,如果芯片數是奇數,那麼在下一次遞歸開始時,可能會出現恰好有2k個好芯片和2k個壞芯片,測試 時恰好好芯片與壞芯片配對,壞芯片與壞芯片測試,那麼最後結果爲0,那麼可以知道在奇數時這樣得到的集合V規模與原規模相同,爲了解決這種情況,我們對結果爲(1, 1)的芯片對,只選取其中的一個留在V中,這樣V中就有k+⌈ j /2⌉個好芯片和k 個壞芯片,V中的好芯片還是多餘一半,那麼重複使用同時1中的算法,可以得到正確 結果,並且滿足題目對規模縮小的要求。
    2. 某次遞歸開始時,V中芯片數爲奇數,按照上面的算法,兩兩配對測試後,會出現一個沒有比較的芯片。對這個芯片需要決定是否放到V中,如果放在V中,不難想象,如果芯片是壞芯片,則V中好芯片和壞芯片可能各佔一半;如果不放在V中,那麼如果芯片是好的,則V中也可能出現好壞芯片各一半的情況。如何解決這個問題,考慮下次遞歸開始前的情況:
      • 如果下次遞歸開始前,不論剩下的這個芯片是好是壞,,如果V中有奇數個芯片,則好芯片數目一定大於壞芯片數目,因爲如果剩下的芯片是壞芯片,相當於將此芯片放在U中,自然好芯片數目大於總數一半,如果剩下的芯片是好芯片,那麼當上次遞歸時V是奇數時遞歸後V還是V並且剩下的是好芯片的話,上次遞歸時V中必定有k個壞芯片和k+2i+1(0<=i)個好芯片,再加j個好芯片和j個壞芯片,則一共有k+j個壞芯片和k+2i+1+j個好芯片,剩下一個1好芯片後並進行配對測試,就剩k/2個壞芯片和k/2+i個好芯片。所以如果下次遞歸開始前V中有奇數個芯片,則不將剩下芯片放在V中
      • 如果下次遞歸開始前,不算剩下的這個芯片,如果V中有偶數個芯片。也分兩種情況,當剩下芯片是好芯片時,最壞的情況就是好芯片和壞芯片各佔一半。當剩下的芯片是壞芯片時,那麼不算這個壞芯片,上次遞歸開始時V中好芯片至少比壞芯片多2個,所以遞歸後好芯片數肯定多與壞芯片,又因爲根據上面的假設,遞歸後V中有偶數個芯片,所以好芯片比壞芯片至少多兩個,加上這個壞芯片V中的好芯片也比壞芯片多。
      綜上,就是如果某次遞歸開始時V中的芯片數是奇數,那麼當遞歸後如果V中剩下奇數個芯片,則這奇數個芯片構成V繼續遞歸;如果V中剩下的芯片個數爲偶數個,那麼就加上沒有配對測試的那個芯片組成V進行遞歸
  3. 根據2中分析,T(n)=T(⌈ n/2 ⌉)+D(n)+C(n),顯然D(n)=Θ(⌊ n/2 ⌋),C(n)是常數 爲Θ(1)。所以T(n)=T(⌈ n/2 ⌉)+Θ(⌊ n/2 ⌋)+Θ(1) = T(⌈ n/2 ⌉)+Θ(⌊ n/2 ⌋),忽略上下界,利用主定理,得 T(n)=Θ(f(n))=Θ(n)。
發佈了96 篇原創文章 · 獲贊 14 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章