国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用卡諾圖簡化你的邏輯判斷

mcterry / 1495人閱讀

摘要:在部分情況下,卡諾圖能讓你的邏輯變得一目了然,但是如果需要處理的邏輯函數的自變量較多,卡諾圖會使圖形更加復雜。如果只有兩個參與運算的變量,卡諾圖的機構就是一個的方格。

什么是卡諾圖

卡諾圖是真值表的變形,它可以將有n個變量的邏輯函數的2^n個最小項組織在給定的長方形表格中,同時為相鄰最小項(相鄰與項)運用鄰接律化簡提供了直觀的圖形工具。在部分情況下,卡諾圖能讓你的邏輯變得一目了然,但是如果需要處理的邏輯函數的自變量較多,卡諾圖會使圖形更加復雜。更多

一個簡單的例子

現有綠、黃、紅三顆燈,當滿足下面四個條件中任何一個時,需要按下按鈕:

綠燈、黃燈、紅燈全部都熄滅

黃燈熄滅、紅燈亮

綠燈熄滅、黃燈亮

綠燈、黃燈、紅燈全部亮起

如果讓你寫一段代碼來判斷是需要按下按鈕,很多人會這么寫:

/**
 * @param bool $a 綠燈的狀態,true為亮,false為熄滅
 * @param bool $a 黃燈的狀態,true為亮,false為熄滅
 * @param bool $a 紅燈的狀態,true為亮,false為熄滅
 * @return bool
 */
function checkEnterBtn(bool $a, bool $b, bool $c): bool 
{
    if ( (!$a && !$b && !$c) || (!$b && $c) || (!$a && $b) || ($a && $b && $c) ) {
        return true;
    }
    
    return;
}

上面的代碼是不是覺得特別的繁瑣。繁瑣就對了,下面我們來開啟高能模式,將卡諾圖應用到我們實際的編碼中。

定義命題:

從上面的四個條件中,我們可以明顯看出,參與邏輯計算的變量只有三個,所以我們為它們分別定義一個命題:

命題A: 綠燈亮起

命題B: 黃燈亮起

命題C: 紅燈亮起

畫出卡諾圖的結構
我們這里使用的卡諾圖是變量卡諾圖的變種

我們這里之所以讓命題B和命題C交叉的目的是為了覆蓋所有的變量。如果只有兩個參與運算的變量,卡諾圖的機構就是一個4x4的方格。更復雜的卡諾圖參見維基百科。

將四個條件在卡諾圖中標出

接下我們在滿足上面4個條件的方格中打上勾

在上面圖中,我們可以一目了然的看出在什么條件下需要按下按鈕。接下來,我們將相鄰的打勾格所形成的最大網格用虛線圍起來組成組合框(組合框之間可以相互重疊)。

這個時候,我們可以看出圖中有兩個組合框,分別為:

橫向組合框,就是A為false的區域,因此用?A來表示。

縱向組合框,就是C為true的區域,因此用C來表示。

實際代碼

將一步得出的兩個組合框用代碼實現,就是:

/**
 * 判斷是否能按下按鈕
 * @param bool $a 綠燈的狀態
 * @param bool $b 黃燈的狀態
 * @param bool $c 紅燈的狀態
 * @return bool 
 */
function checkEnterButton($a, $b, $c) {
    if (!$a || $c) {        // 這里的兩個條件就是上一步中兩個組合框的內容
        return true;
    }

    return false;
}
總結

當然,并不是什么情況都能夠使用卡諾圖來簡化邏輯的,當參與運算的變量過多,會導致卡諾圖變得非常的復雜。所以你需要區分什么情況下能夠使用這種方式。

好了,到這里就結束了。對比兩種實現方式,是不是要簡潔很多。由此可見數學對于程序員來說是多么重要的東西。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30770.html

相關文章

  • 【譯】怎樣避免開發時的深坑

    摘要:但是,在實際開發時仍然障礙重重。我就曾經接受了一個開發任務,就是做一個像劊子手一樣的游戲,但是當我看完需求中所有的規則時,才意識到要做的應該是邪惡的劊子手這是一個深坑。邊界問題僅在極端最大或最小值參數的情況下發生的問題或狀況。 翻譯:瘋狂的技術宅 作者:Valinda Chan英文標題:10 Steps to Solving a Programming Problem英文鏈接:http...

    KitorinZero 評論0 收藏0
  • 我眼中的 Nginx(五):Nginx — 子請求設計之道

    摘要:上圖中,每個紅圈表示一個請求,每一層的請求分別是上一層請求的子請求。換而言之,父請求是依賴于子請求的。特別地,的子請求運行時,會阻塞父請求掛起其對應的協程。 張超:又拍云系統開發高級工程師,負責又拍云 CDN 平臺相關組件的更新及維護。Github ID: tokers,活躍于 OpenResty 社區和 Nginx 郵件列表等開源社區,專注于服務端技術的研究;曾為 ngx_lua 貢...

    Jioby 評論0 收藏0
  • 如何用ACM簡化你的Spring Cloud微服務環境配置管理

    摘要:摘要本文我們就如何使用阿里云這樣的配置管理產品在中替代幫助簡化環境配置管理做一個簡單的示例,幫助你理解基于來簡化微服務環境配置管理的方案,并會簡單比較一下與方案的優劣。 摘要: 本文我們就如何使用阿里云ACM這樣的配置管理產品在Spring Cloud中替代Spring Cloud Config幫助簡化環境配置管理做一個簡單的示例,幫助你理解基于ACM來簡化微服務環境配置管理的方案,并...

    ?xiaoxiao, 評論0 收藏0

發表評論

0條評論

mcterry

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<