1. 程式人生 > >一個邏輯問題的分析:“天堂與地獄的守衛”

一個邏輯問題的分析:“天堂與地獄的守衛”

最近和朋友討論一個邏輯問題,據說也是個以前出現過的面試題了。拿出來和大家分享。 問題如下: 你來到兩道門口,一道是天堂之門, 一道是地獄之門 。
門口都有一個守衛,只知道守衛一個只說假話,一個只說真話。
現在你只有一次提問機會,只向一個守衛問一個問題,這個守衛對你的問題,只給出“是”或者”不是“的答案。(對於無法給出是非的問題,守衛會直接把你砍死。。。)
請問怎麼問才能準確進入天堂之門?
我們將守衛守門的所有情況列成如下的一個矩陣:
守衛分兩種情況,第一行代表天堂守衛是誠實的情況,第二行分為天堂守衛為說謊話的情況。 而每種情況你都有2個可能,要麼問到真話守衛,要麼問到假話守衛。因此問題的解空間是一個2*2的矩陣。 這個問題難在,不管你問“你是說真話的嗎?”還是問“你守衛的門是天堂的嗎?
”,都無法得到滿意資訊。 如下圖,如果你問“你守衛的門是天堂的嗎?”,所有的情況如下圖所示:
紅色的勾表示如果你問這個守衛(勾連線的那個畫圈的守衛)問題,他會說“是”。”叉“表示說”否“。 看到這個圖你就明白為什麼問不出答案了。因為無論是上下哪種情況,天堂的守衛既有可能說”是“,也有可能說”不是“。

解法1:通過解空間反求問題x

我們的目的是找出天堂之門。也就是說,需要設計一個問題,將解空間按照天堂和地獄來進行分離。 也就是說,我們需要設計一個問題,將解空間分解為如下情況: 這樣解空間按照天堂和地獄分開了。只要回答是”是“,該守衛就是天堂守衛。反之就是地獄守衛。 如何尋找這樣的問題呢? 容易知道,為得到天堂地獄相關的資訊,我們問的問題一定是描述當前守衛守門狀況的一個描述
。(例如你問1+1=2嗎,真話守衛說是,假話守衛說否,這樣只能區分出守衛真假,但是無法區分天堂和地獄) 如果我們把這個狀態當做函式的輸入x,守衛對該問題的回答的解空間當做y,那麼這個函式可以寫作: Y = f(X) 由於y和x是2*2的矩陣。那麼可把上式寫成:
那麼f函式執行的是什麼操作呢? 我們知道,x表示的是一個描述在四種守衛情況中的真值表,真值表是客觀存在的,所以一定是為真的。真話守衛不會修改這個真值,而謊話守衛一定會給出相反結果。那麼,這個f可以表示為:
由於f只做了反轉操作,顯然f操作是可逆的。 要讓天堂守衛都說”是“,地獄守衛都說”否“,就是說y應該是:y1=y3=1, y2=y4=0。 既然我們已經知道我們需要什麼樣的y了。因此,已知y
反求x,如下:
這個x就是我們可以拿出來問守衛的問題。 還記得我們對矩陣的定義嗎? 因此,把上面的x代入該矩陣定義,得到如下的守衛狀態守天堂的真話守衛;    守地獄的假話守衛; 守天堂的不是假話守衛;守地獄的不是真話守衛; 這實際上是一個狀態的四個等價描述的。因此,這個狀態就是滿足輸出y的問題x。 因此,只要向任意一個守衛問上面的任意一個問題即可。只要回答是”是“,該守衛就是天堂守衛。反之就是地獄守衛。

解法2:構造高階邏輯表示式

假設說真話的守衛對問題的回答為f=T(x),假話的為f=F(x),那麼有: T(0) = 0, T(1) = 1; F(0) = 1, F(1) = 0;
注意到: T(F(0)) = 1; T(F(1))=0; F(T(0)) = 1; F(T(1))=0;
這說明通過一個問題x經過F和T的兩次加工,最後的答案是一樣的也即 T(F(x)) = F(T(x)) = !x 因此,我們可以構造如下問題: ”另外那個守衛會告訴我你是天堂守衛嗎?
得到的回答一定和”你是天堂守衛“相反。也就是說,他說”是“,那他就是地獄守衛;他說不是,那他就是天堂守衛。

相關推薦

一個邏輯問題的分析天堂地獄守衛

最近和朋友討論一個邏輯問題,據說也是個以前出現過的面試題了。拿出來和大家分享。 問題如下: 你來到兩道門口,一道是天堂之門, 一道是地獄之門 。 門口都有一個守衛,只知道守衛一個只說假話,一個只說真話。 現在你只有一次提問機會,只向一個守衛問一個問題,這個守衛對你的問題,

天堂地獄

enter ctu ont AR 如果 ali bsp 回來 AD 2018-06-17 20:34:13 天堂與地獄 黃永武 從前,呂蒙正剛被任命為副宰相的時候,大小官員都不服。有人竟當場指著他說:“像你這種家夥也能參政議政?”呂蒙正的同僚想要追查此人的姓名,卻立

編程語言對比分析PythonJava和JavaScript(圖)

最大 python 服務 dev 破壞 fff 對比分析 可能 分析 編程語言對比分析:Python與Java和JavaScript(圖):憑什麽說“Python 太慢,Java 太笨拙,我討厭 JavaScript”?[圖]編程語言生而為何?我們人類從原始社會就是用語言表

H264編碼器5( x264原始碼簡單分析x264_slice_write() H264 編碼簡介)

  x264原始碼簡單分析:x264_slice_write() 來自:https://blog.csdn.net/leixiaohua1020/article/details/45536607     H264 編碼簡介 https://blo

lighttpd1.4.20原始碼分析安裝配置

1、有兩種渠道下載原始碼,分別是: http://www.lighttpd.net/download/ -- 官網https://github.com/lighttpd -- GitHub 官網下載的原始碼和GitHub的略有不同,我們以前者,也就是官網的為準。   2

Mybatis 原始碼分析資料來源連線池

1. mybatis 資料來源原理分析 mybatis 資料來源 DataSource 的建立是在解析配置檔案 <environment /> 元素下子元素 <dataSource /> 時建立的。配置如下: <dataSource

用Python學分析集中分散

正整數 face 學分 ESS bsp boxplot 集中 src 準備 散點圖進階,結合箱體圖與直方圖對數據形成全面的認識 描述數據集中趨勢的分析量: 均值 - 全部數據的算術平均值 眾數 - 一組數據中出現次數最多的變量值 中位數 - 一組數據經過順序排列後處於中間位

//輸出9*9口訣 //程式分析分列行考慮,共9行9列,i控制行,j控制列;

//輸出9*9口訣//程式分析:分列與行考慮,共9行9列,i控制行,j控制列;#include <stdio.h>main(){ int i,j,result; printf("\n"); 

深入分析FragmentActivity交互的幾種方式(三,使用接口)

shee 地址 ted -a content text log eas itl 版權聲明:本文為博主原創文章,未經博主同

一個成功的分析團隊角色職責

多年以來我和數百家企業打過交道,在這個過程中,我領悟了讓資料分析專案成功的一些因素,也親眼看著很多專案失敗。 最常見的失敗原因說出來可能會讓你驚訝。並非是缺乏資料專業知識或者整合失誤,而僅僅是因為企業沒有讓“利用資料”成為任何人員的職責。太多公司花費好幾個月收集有趣的資料,然後讓它們靜靜地躺在角落裡積攢

軟體需求分析師的基本功邏輯思維、邏輯分析邏輯表達

我太難了,自認為對需求已經非常清楚了,但交付軟體時使用者卻說:這不是他想要的! 軟體行業從事需求分析師的人經常會提到下面的一些有代表性的現象 ■現象1.認真聽取了使用者需求、並且用介面原型向用戶進行了需求確認,費盡了千辛萬苦把軟體開發出來後,使用者一試卻說“這不是我想要的東西!”,這樣的結果讓我感到崩潰,不是

Openfire分析之一OpenfireXMPP協議

插件 問題 帳號 body 通訊 binding mil star mina框架   引言   上帝說,要有光,於是就有了光。   有點玄。   如果將時光回溯無數歲月,到幾百萬年的蠻荒時代,人類史上第一次發生信息交換,會是什麽樣子?是轉一下腦袋,還是眨一下眼?   但不管

通過一個案例分析貝葉斯公式機器識別

機器學習 描述 事件 滿足 image pos div 是個 頻率 貝葉斯公式定義如下, 公式大家都知道,如何理解呢?下面給一個機器識別相關的例子,直觀地說明。 在機器識別中,假設機器要識別“一”所在的這個小圖像塊表示什麽字符(可以想象為拿手機對著一頁書拍了張照片,機器要

Netty中LineBasedFrameDecoder解碼器使用分析解決TCP粘包問題

ring public xpl cep ctx new 綁定端口 註意 相關 [toc] Netty中LineBasedFrameDecoder解碼器使用與分析:解決TCP粘包問題 上一篇文章《Netty中TCP粘包問題代碼示例與分析》演示了使用了時間服務器的例子演示了T

手動實現一個單詞統計MapReduce程序過程原理分析

Hadoop MapReduce Java [toc] 手動實現一個單詞統計MapReduce程序與過程原理分析 前言 我們知道,在搭建好hadoop環境後,可以運行wordcount程序來體驗一下hadoop的功能,該程序在hadoop目錄下的share/hadoop/mapreduce目錄中

MySQL優化(5)索引失效分析、inexists使用場合

有一個 來替 null 決定 index idt class 分布 family 一、索引失效的情況   前文提及過可以通過explain的possible_keys、key屬性判斷索引是否失效,key如果為null,可能是索引沒建,也可能是索引失效,下面列舉一些會使索引失

跟廠長學PHP內核(二)源碼分析的環境工具

compiler one upload info org print fin 圖形界面 waiting 本文主要介紹分析源碼的方式,其中包含環境的搭建、分析工具的安裝以及源碼調試的基本操作。 一、工具清單 PHP7.0.12 GDB CLion 二、源碼下載及安裝

數據特征分析4.正態分布正態性體驗

體驗 去掉 matplot 比較 正態分布 strong sca 附近 line 1.正態分布 期望值u(均值)決定位置,標準差決定它的分布幅度,可以驗證分布曲線的高矮胖瘦,越胖代表它的離中趨勢越明顯,越高代表它集中的值越高。 2. 正

【algorithm】有趣的邏輯運算邏輯邏輯異或

Date: 2018.10.31 之前學了很久的數電,今天終於發現了其魅力所在,有點後知後覺了,哈哈… 最近發現一個有趣的演算法: 奇數與1異或相當於減1,偶數與1異或相當於加1。 虛擬碼如下: if( a & 1 !=0 ) b = a - 1; // od

深入理解overlayfs(二)使用原理分析

在初步瞭解overlayfs用途之後,本文將介紹如何使用overlayfs以及理解該檔案系統所特有的一些功能特性。由於目前主線核心對overlayfs正在不斷的開發和完善中,因此不同的核心版本改動可能較大,本文儘量與最新的核心版本保持一致,但可能仍會存在細微的出入。 核心版本:Linux-4.1