日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法设计与分析】15 分治策略:芯片测试

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法设计与分析】15 分治策略:芯片测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章學習了【算法設計與分析】14 分治算法的一般描述和分析方法

文章目錄

    • 1. 芯片測試
      • 1.1 一次測試的過程
      • 1.2 如何測試一塊芯片的好壞
      • 1.3 蠻力算法
      • 1.4 分治算法設計思想
        • 1.41 分治算法的正確性證明
        • 1.42 時間復雜度分析
    • 2. 總結

本篇文章借助具體的例子來學習分治策略。這個例子是課本上的:芯片測試的例子。

1. 芯片測試

在講解具體的芯片測試的分治策略算法之前,先來了芯片測試的意思

1.1 一次測試的過程


如上圖,A、B為芯片。測試方法為:將2片芯片(A和B)置于測試臺上,互相進行測試,測試報告是“好”或者“壞”,只取其一。

  • 假設:好芯片的報告一定是正確的,壞芯片的報告是不確定的(可能會出錯)

那么上述測試的結果有四種可能,如下圖:

上面的結果應該不難理解

那么現在問題來了:

  • 輸入:n片芯片,其中好芯片,至少比壞芯片多一片
  • 問題:設計一種測試方法,通過測試從n片中挑出1片好芯片
  • 要求:使用最少的測試次數

1.2 如何測試一塊芯片的好壞

針對上述問題,現在先來研究一下,如何在上述n片芯片中,測試出A是好芯片還是壞芯片?

  • 問題:給定芯片A,判定A的好壞
  • 方法:用其他n-1片芯片對A進行測試。

假設:n=7:好芯片數>=4

  • A好,6個芯片中至少3個報“好”
  • A壞,6個芯片中至少4個報壞
  • 所以對于n是奇數情況下:好芯片數>=(n+1)/2
    A好,至少有(n-1)/2個報“好”
    A壞,至少有(n+1)/2個報“壞”

    結論:

  • 至少一半報好,A是好芯片
  • 超過一半報壞,A是壞芯片
  • 假設: n=8:好芯片數>=5

  • A好,7個芯片中至少4個報“好”
  • A壞,7個芯片中至少5個報“壞”
  • 所以對于n是偶數:好芯片數 >= n/2+1.
    A 好, 至少有 n/2個報告“好”
    A 壞, 至少有 n/2+1個報告“壞”

    結論:n-1份報告中

  • 至少一半報好,A是好芯片
  • 至少一半報壞,A是壞芯片
  • 上面的分析,已經很清晰,我們已經知道如何測試一塊芯片的好壞。那么人們最拿手的方法就是:暴力算法(蠻力算法)可以直接寫代碼了。。。

    1.3 蠻力算法

    測試算法:任取 1片測試,如果是好芯片,測試結束;如果是壞芯片,拋棄,再從剩下芯片中任取 1片測試,直到得到 1片好芯片

    時間估計:

    第一片是壞芯片,最多測試n-2次
    第二片是壞芯片,最多測試n-3次

    總計:Θ(n2)\Theta(n^2)Θ(n2)

    可見時間復雜度之高,數據量一多,肯定會超時。

    1.4 分治算法設計思想

    在分析分治算法的正確性之前,我們先給出這個算法的描述:

    假設n為偶數,將n片芯片兩兩一組做測試淘汰,剩下芯片構成子問題,進入下一輪分組淘汰。

    淘汰規則為:

    • “好,好” ==> 任留1片,進入下輪
    • 其他情況 ==> 全部拋棄

    遞歸截止條件:n<=3
    3片芯片,一次測試可得到好芯片
    1或者2片芯片,不需要再測試,他們都為好芯片。

    上述算法過程就是我們給出的分治策略的設計。那么為什么上述的策略是正確的呢?

    回憶一下,前面的文章,要保證分治策略的正確性的基本條件是:子問題與原問題性質相同。下面我們就來證明,上述分治策略的子問題與原問題性質相同。

    1.41 分治算法的正確性證明

    原問題:n片芯片,其中好芯片,至少比壞芯片多一片

    那么子問題,命題1:當 n 是偶數時,在上述淘汰規則下,經過一輪淘汰,剩下的好芯片比壞芯片至少多1片

    我們需要證明上述子問題的命題1是正確的。

    證明:假設原問題中A,B都好的芯片有i組,A與B一好一壞的有j組,A與B都壞的有k組。那么經過一輪淘汰后,好芯片還剩i片,壞芯片還剩k片。

    因為

    • 初始芯片總數 2i+2j+2k = n
    • 初始好芯片多于壞芯片:2i+j > 2k+j

    得出:i>k

    所以,剩余的芯片好芯片比壞芯片,至少多1片。命題1 是正確的。即證明了上述分治算法的正確性。

    當n為奇數時,特殊處理。當n是奇數時,可能會出現問題,如圖:

    可見淘汰后的子問題并不滿足于原問題性質相同,此時無法繼續測試。

    • 處理辦法是:當n為奇數時,增加一輪對輪空芯片的單獨測試,如果該輪空芯片為好芯片則算法結束,如果是壞芯片,則淘汰該芯片。

    下面給出上述分治算法的偽碼描述:

    1.42 時間復雜度分析

    設輸入規模為n,,每輪淘汰后,芯片數至少減半,測試次數(含輪空處理):O(n)

    時間復雜度:

    W(n) = W(n/2) + O(n)
    W(3)=1,W(2)=W(1)=0

    解上述方程的得:W(n) = O(n)

    結果很振奮人心,你已經將一個O(n2)O(n^2)O(n2)級別的算法優化為了O(n)O(n)O(n)級別!!!

    2. 總結

    最大的需要注意的地方就是:如何保證子問題與原問題性質相同:

    可以:

  • 增加額外處理(比如上述n為奇數時對輪空數據的處理)
  • 額外處理的工作量,不改變函數的階
  • 總結

    以上是生活随笔為你收集整理的【算法设计与分析】15 分治策略:芯片测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。