作者andan (Everything)
看板puzzle
標題Re: [問題] 猜牌的遊戲
時間Thu Oct 21 01:24:37 2010
七次的確也是最佳解了
給個簡易版的證明概念
假設六次可以
表示我們要創作出6位元的0-1字串兩兩距離不能是0 or 2
算一下就會發現
0個1的共1組
1個1的最多只能放1組
2個1的最多只能有3組
3個1的最多也3組
4個1的最多也3組
5個1的最多1組
6個1的總共就1組
全部加起來才13組~
其中還有很多互斥的組, 比如選了0個1的就不能選2個1....etc
所以13組是不可能的!
因此七次的確是最佳解~
※ 引述《LPH66 (-858993460)》之銘言:
: 原題目恕刪
: 這裡提供一個問七次可以保證猜中的問法
: (同樣限定恰說謊一次)
: 這七個問題是: 分別詢問是否出現在下列集合當中
: {A,3,4,6,8,T,K}
: {A,2,5,6,8,J,Q}
: {8,9,T,J,Q,K}
: {A,2,4,7,9,T,Q}
: {4,5,6,7,Q,K}
: {2,3,6,7,T,J}
: {A,3,5,7,9,J,K}
: 這些問題有個特性:
: 對任何兩個數字至少有三個問題兩者恰出現其中之一
: 因此對任何一個數字恰錯一題的答案對其他數字至少錯兩題
: 所以只要一個一個對答案對過去 恰錯一題的數字就是它了
: ---
: 這題目和所謂的容錯/糾正碼有關
: 如果把在七個問題裡回答是或否標記成 1 或 0 的話
: 這便是要我們尋找一個編碼 使得它能夠發現且修正單一 bit 的錯誤
: 上面給的答案使用的是 Hamming(7,4) 編碼
: http://en.wikipedia.org/wiki/Hamming(7,4)
: 它使用 7 bits 來編碼 4 bits 的資訊
: 使得當這 7 bits 中有不多於 1 bit 的錯誤時能夠發現並修正它
: 這個題目範圍是 1 ~ 13 正好是 4 bits 的資訊
: 所以套用這個編碼就成了這個答案了
: (仔細看的話, 第 3,5,6,7 四個問題組合起來正好是各數字的二進位
: 也就是正好是 Hamming(7,4) 當中的資料位)
: 使用 Hamming 編碼能夠以 2^m-1 bits 來編碼 2^m - m - 1 bits 的訊息
: 以發現且修正單一 bit 的錯誤
: 這類型的編碼通常是在通訊理論上使用 減少通道雜訊影響傳輸正確性
: 其中一種很常用的編碼 Reed-Solomon 編碼 (比 Hamming 更強 它能修正更多 bit)
: 廣泛使用在諸如 RAID 6, QR code, DVD/藍光光碟, WiMAX 等地方
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.20.2
推 ACGfans:我總覺得七次最少怪怪的... 沒辦法用問問題的技巧來改善嗎 10/21 01:51
→ ACGfans:目前的七個問題感覺都是相同性質的 能不能用不同性質切開 10/21 01:52
→ ACGfans:搞不好會有更少的解 舉個例子好了 10/21 01:54
→ ACGfans:重複兩次問他一個他不想被人知道的隱私問題 10/21 01:54
→ ACGfans:他為了不想讓人知道 就會選擇在這裡用掉說謊 10/21 01:55
→ ACGfans:剩下就只能說實話 13張牌用二元搜尋法只要四次 10/21 01:56
→ ACGfans:這樣就只要2+4=6 次就可以了 有沒有類似這樣更好的方法阿? 10/21 01:56
推 longlonglong:可以問說 你今天午餐已經吃了而且牌是xxx 10/31 12:42
→ longlonglong:每題都這樣問 就看他哪一題會說他沒午餐(還沒)吃 10/31 12:43
→ longlonglong:就知道他哪個問題說謊了 這樣會很賊嗎 10/31 12:43
推 kohttp:樓上不行,你用了[而且],這樣跟只問數字是一樣的 11/02 09:36
→ kohttp:他回答no,你還是不知道是真的數字錯還是說謊 11/02 09:37