成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用卡諾圖簡(jiǎn)化你的邏輯判斷

mcterry / 1508人閱讀

摘要:在部分情況下,卡諾圖能讓你的邏輯變得一目了然,但是如果需要處理的邏輯函數(shù)的自變量較多,卡諾圖會(huì)使圖形更加復(fù)雜。如果只有兩個(gè)參與運(yùn)算的變量,卡諾圖的機(jī)構(gòu)就是一個(gè)的方格。

什么是卡諾圖

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

一個(gè)簡(jiǎn)單的例子

現(xiàn)有綠、黃、紅三顆燈,當(dāng)滿足下面四個(gè)條件中任何一個(gè)時(shí),需要按下按鈕:

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

黃燈熄滅、紅燈亮

綠燈熄滅、黃燈亮

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

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

/**
 * @param bool $a 綠燈的狀態(tài),true為亮,false為熄滅
 * @param bool $a 黃燈的狀態(tài),true為亮,false為熄滅
 * @param bool $a 紅燈的狀態(tài),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;
}

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

定義命題:

從上面的四個(gè)條件中,我們可以明顯看出,參與邏輯計(jì)算的變量只有三個(gè),所以我們?yōu)樗鼈兎謩e定義一個(gè)命題:

命題A: 綠燈亮起

命題B: 黃燈亮起

命題C: 紅燈亮起

畫出卡諾圖的結(jié)構(gòu)
我們這里使用的卡諾圖是變量卡諾圖的變種

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

將四個(gè)條件在卡諾圖中標(biāo)出

接下我們?cè)跐M足上面4個(gè)條件的方格中打上勾

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

這個(gè)時(shí)候,我們可以看出圖中有兩個(gè)組合框,分別為:

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

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

實(shí)際代碼

將一步得出的兩個(gè)組合框用代碼實(shí)現(xiàn),就是:

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

    return false;
}
總結(jié)

當(dāng)然,并不是什么情況都能夠使用卡諾圖來簡(jiǎn)化邏輯的,當(dāng)參與運(yùn)算的變量過多,會(huì)導(dǎo)致卡諾圖變得非常的復(fù)雜。所以你需要區(qū)分什么情況下能夠使用這種方式。

好了,到這里就結(jié)束了。對(duì)比兩種實(shí)現(xiàn)方式,是不是要簡(jiǎn)潔很多。由此可見數(shù)學(xué)對(duì)于程序員來說是多么重要的東西。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30770.html

相關(guān)文章

  • 【譯】怎樣避免開發(fā)時(shí)的深坑

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

    KitorinZero 評(píng)論0 收藏0
  • 我眼中的 Nginx(五):Nginx — 子請(qǐng)求設(shè)計(jì)之道

    摘要:上圖中,每個(gè)紅圈表示一個(gè)請(qǐng)求,每一層的請(qǐng)求分別是上一層請(qǐng)求的子請(qǐng)求。換而言之,父請(qǐng)求是依賴于子請(qǐng)求的。特別地,的子請(qǐng)求運(yùn)行時(shí),會(huì)阻塞父請(qǐng)求掛起其對(duì)應(yīng)的協(xié)程。 張超:又拍云系統(tǒng)開發(fā)高級(jí)工程師,負(fù)責(zé)又拍云 CDN 平臺(tái)相關(guān)組件的更新及維護(hù)。Github ID: tokers,活躍于 OpenResty 社區(qū)和 Nginx 郵件列表等開源社區(qū),專注于服務(wù)端技術(shù)的研究;曾為 ngx_lua 貢...

    Jioby 評(píng)論0 收藏0
  • 如何用ACM簡(jiǎn)化你的Spring Cloud微服務(wù)環(huán)境配置管理

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

    ?xiaoxiao, 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<