หนังสือ คณิตป่วน ผู้เขียน "ศล" © สงวนลิขสิทธิ์โดยส�ำนักพิมพ์สารคดี ในนามบริษัทวิริยะธุรกิจ จ�ำกัด ห้ามการลอกเลียนไม่ว่าส่วนหนึ่งส่วนใดของหนังสือ นอกจากจะได้รับอนุญาต พิมพ์ครั้งที่ 1 สิงหาคม 2554 จ�ำนวนพิมพ์ 3,000 เล่ม ราคา 160 บาท ข้อมูลบรรณานุกรม "ศล". คณิตป่วน.--กรุงเทพฯ : สารคดี, 2554. 152 หน้า. 1. คณิตศาสตร์. I. ชื่อเรื่อง. 513.9 ISBN 978-974-484-338-8
คณะผู้จัดท�ำ บรรณาธิการเล่ม: ปณต ไกรโรจนานันท์ ผู้ช่วยบรรณาธิการ: นฤมล สุวรรณอ่อน ออกแบบปก/กราฟิกปก: ชาญศักดิ์ สุขประชา พิสูจน์อักษร: นวลจันทร์ ทองมาก ควบคุมการผลิต: ธนา วาสิกศิริ จัดพิมพ์ ส�ำนักพิมพ์สารคดี (ในนามบริษัทวิริยะธุรกิจ จ�ำกัด) จัดจ�ำหน่าย บริษัทวิริยะธุรกิจ จ�ำกัด 28, 30 ถนนปรินายก แขวงบ้านพานถม เขตพระนคร กรุงเทพฯ 10200 โทร. 0-2281-6110 (อัติโนมัติ) โทรสาร 0-2282-7003 เพลต เอ็นอาร์ฟิล์ม โทร. 0-2215-7559 พิมพ์ โรงพิมพ์ฟิสิกส์เซ็นเตอร์ โทร. 0-2433-7704 ส�ำนักพิมพ์สารคดี ผู้อ�ำนวยการ: สุวพร ทองธิว ผู้จัดการทั่วไป: จ�ำนงค์ ศรีนวล ที่ปรึกษากฎหมาย: สมพจน์ เจียมพานทอง ผู้อ�ำนวยการฝ่ายการตลาด/โฆษณา: ปฏิมา หนูไชยะ ผู้อ�ำนวยการฝ่ายศิลป์/ฝ่ายผลิต: จ�ำนงค์ ศรีนวล ผู้จัดการฝ่ายตลาด: พิเชษฐ ยิ้มถิน ที่ปรึกษาส�ำนักพิมพ์: สุดารา สุจฉายา บรรณาธิการส�ำนักพิมพ์: สุวัฒน์ อัศวไชยชาญ 2
จากส�ำนักพิมพ์ ส�ำหรับหลายคนแล้ว คณิตศาสตร์เป็นเหมือนยาขมที่เมื่อใดพบเจอ ก็ ต้องเบือนหน้าหนีไปทุกครั้ง แต่ถึงอย่างไรเราก็ต้องมีคณิตศาสตร์เข้ามา ข้องเกี่ยวในชีวิตบ้าง ไม่มากก็น้อย เช่นเรื่องความรัก เชื่อไหมว่าความรักก็เกี่ยวข้องกับคณิตศาสตร์ คุณแน่ใจแล้วหรือว่าคนที่คุณก�ำลังคบอยู่เป็นคนที่ใช่ หากเลือกคนนี้ จะเป็นการตัดโอกาสการพบเจอว่าที่คู่ชีวิตซึ่งดีกว่า ถูกใจกว่าคนนี้หรือไม่ ค�ำถามเช่นนี้ละสามารถตอบได้ด้วยคณิตศาสตร์ เรือ่ งราวสนุกๆ ทีม่ คี ณิตศาสตร์เข้ามาเกีย่ วข้องยังมีอกี มาก คุณ "ศล" ซึง่ แม้มไิ ด้เป็นนักคณิตศาสตร์โดยตรง แต่รสู้ กึ สนุกกับโจทย์คณิตศาสตร์ เช่นนี้ จึงขันอาสาสรรหามาแบ่งปันให้คุณผู้อ่านได้ร่วมสนุกไปด้วยกัน เช่น ผู้ชอบไขตรรกะน่าจะชอบปริศนาตรรกะที่ยากที่สุดตลอดกาล เซียนหมาก รุกอาจพิศวงกับการเดินหมากรุกบนกระดาน 4 มิติ แฟนซีรีส์เกาหลีอาจ สนใจเรื่องคู่มั่นคง ฯลฯ ไม่แน่นัก คณิตป่วนเล่มนี้อาจเป็นแรงบันดาลใจให้คุณผู้อ่าน นึกสนุก คิดโจทย์ขึ้นมาเล่นเองบ้างก็เป็นได้ ส�ำนักพิมพ์สารคดี
3
จากผู้เขียน มีสองสามเรื่องที่ผมอยากสารภาพก่อนคุณจะพลิกอ่านหน้าที่เหลือใน หนังสือเล่มนี ้ หนึง่ ผมไม่ใช่นกั คณิตศาสตร์ สอง โจทย์ปญ ั หาทุกข้อ ไม่มี ข้อใดเป็นปัญหาที่ผมคิดขึ้นมาเอง บางข้อผมเป็นคนเฉลย บางข้อผมเล่า วิธีเฉลยตามแบบมาตรฐานที่พบเห็นทั่วไปส�ำหรับปัญหาข้อนั้นๆ สาม ผม เขียนเรื่องเกี่ยวกับคณิตศาสตร์ เพราะนึกสนุก (และหวังว่าคุณจะอ่าน เพราะนึกสนุกเช่นกัน) เนือ้ หาส่วนหนึง่ เป็นบทความทีเ่ คยตีพมิ พ์ในนิตยสาร My Maths ช่วง พ.ศ. 2550-2552 อีกส่วนหนึ่งเป็นการขยายความหรือ ตัดต่อจากสิ่งที่ผมเขียนลง blog ส�ำหรับที่มาของปัญหาเหล่านี้ ทั้งหมด มาจากหนังสือหลายเล่มและอินเทอร์เน็ต บางเล่ม บางเว็บไซต์ ได้รบั การ กล่าวถึงไว้เรียบร้อยแล้วภายในบท แต่บางบทก็ไม่ได้อา้ งแหล่งทีม่ าใดไว้เลย จุดนี้ผมต้องขออภัยครับ เนื่องด้วยตอนเขียน ผมไม่ได้ตั้งใจเขียนให้เป็น งานวิชาการ ผมแค่อยากหาอะไรมาชวนคุณคิด และอยากเอาคณิตศาสตร์ มาเล่นเท่านั้นเอง ขอขอบคุณ ดร. บัญชา ธนบุญสมบัติ ผู้ช่วยเสนอและผลักดัน หนังสือเล่มนี้ ขอบคุณกองบรรณาธิการส�ำนักพิมพ์สารคดีที่จัดแต่งหนังสือ จนออกมาดูสวยงามเรียบร้อยน่าอ่าน "ศล"
4
สารบัญ
7 The Hardest Logic Puzzle Ever ปริศนาตรรกะที่ยากที่สุดตลอดกาล 19 คณิตศาสตร์กับการเลือกคู่ครอง 26 เกล็ดหิมะค็อค (Koch Snowflake) 36 หมากรุกกลบนกระดาน 4 มิติ 56 Knights Exchange: กราฟกับการแก้ปัญหาหมากรุก 65 ปริศนาเกมทายใจ 73 การพิสูจน์ด้วยการลงสี (Coloring Proofs) 80 ลูกแก้วในกล่อง 90 เลขมหัศจรรย์ 6174 103 คู่มั่นคง 110 ปริศนามายากลทายไพ่ 118 ทฤษฎีบทของเบส์กับปัญหาและพาราด็อกซ์ที่น่าสนใจ 133 นิม (เกมหยิบเหรียญ) 137 State Machine 144 ปัญหา Josephus กรณี m = 2
6
The Hardest 1 Logic Puzzle Ever
ปริศนาตรรกะที่ยากที่สุดตลอดกาล หลายปีก่อน Raymond Smullyan นักตรรกศาสตร์-นักแก้ปริศนา ได้ ประดิษฐ์โจทย์ปัญหาด้านตรรกะที่ยอดเยี่ยมที่สุดไว้ข้อหนึ่งในนาม The Hardest Logic Puzzle Ever เรามาดูและวิเคราะห์แง่มุมที่น่าสนใจกัน
Raymond Smullyan
George Boolos
1เรียบเรียงจากบทความเผยแพร่ปี พ.ศ. 2539 ในนิตยสาร The Harvard Review of
Philosophy โดย George Boolos ซึ่งด�ำรงต�ำแหน่งศาสตราจารย์ด้านปรัชญาแห่ง MIT เขาเป็นหนึ่งในผู้บุกเบิกศาสตร์แขนง Provability Logic เป็นเจ้าของผลงานต�ำรา The Logic of Provability (Cambridge, 2536) และ Computability and Logic (Cambridge, 2517) ร่วมกับ Richard Jeffrey
7
ปริศนามีอยู่ว่า: มีพระเจ้าสามองค์คือ A, B และ C มีหนึ่งองค์ พูดจริงเสมอ มีหนึ่งองค์พูดเท็จเสมอ ส่วนอีกองค์ที่เหลือพูดจริงบ้างเท็จ บ้างอย่างสุ่ม (random) คุณมีสิทธิ์ถามค�ำถามประเภทใช่หรือไม่ จ�ำนวน สามค�ำถาม ถามองค์ใดก็ได้ เพื่อน�ำค�ำตอบมาใช้ระบุว่าพระเจ้าองค์ใด คือองค์ที่พูดจริง พูดเท็จ และพูดสุ่ม พระเจ้าทั้งสามองค์เข้าใจภาษาไทย (หรือภาษาอื่นใดที่มนุษย์ใช้กัน) ดังนั้นพระเจ้าเข้าใจค�ำถามที่คุณถาม แต่เ วลาตอบ พระเจ้าจะตอบด้วยภาษาเทพ ซึ่ง ภาษาเทพสองค� ำ คื อ “ดา” กับ “หยา” ค�ำหนึง่ แปลว่า “ใช่” ส่วนอีกค�ำหนึง่ แปลว่า “ไม่ใช่” คุณ ไม่รู้ว่าค�ำไหนแปลว่าอะไร คุณจะตั้งค�ำถามสามข้อนี้ว่าอะไรบ้าง ก่อนอื่นเรามาท�ำความกระจ่างเกี่ยวกับโจทย์ข้อนี้กันอีกสักนิด 1. มีพระเจ้าบางองค์อาจถูกถามได้มากกว่าหนึ่งค�ำถาม นั่นคือ มีพระเจ้าบางองค์ที่อาจไม่ถูกถามเลยก็ได้ 2. ค�ำถามที่ 2 ที่เราถาม (ถามว่าอะไรและถามพระเจ้าองค์ใด) อาจขึน้ อยูก่ บั ค�ำตอบจากค�ำถามแรก และในกรณีคำ� ถามที ่ 3 ก็เช่นเดียวกัน อาจขึ้นอยู่กับค�ำตอบจากค�ำถามที่ 2 3. ค�ำตอบของพระเจ้าองค์สมุ่ ไม่วา่ จะจริงหรือเท็จ ให้เรานึกภาพ ว่าพระเจ้าโยนเหรียญหัว-ก้อยในสมองก่อนตอบค�ำถาม เช่น ถ้าเหรียญ ออกหัว พูดจริง ถ้าเหรียญออกก้อย พูดเท็จ 4. โอกาสทีพ่ ระเจ้าองค์สมุ่ จะตอบว่า “ดา” หรือ “หยา” มีเท่ากัน ไม่ว่าค�ำถามนั้นจะเป็นค�ำถามใด 8
เพื่อเป็นแนวทางในการแก้โจทย์ปัญหาข้อนี้ เราลองมาพิจารณา โจทย์ยอ่ ยสามข้อทีง่ า่ ยกว่ากันก่อน แล้วน�ำแนวคิดของโจทย์ยอ่ ยทัง้ สามมา ประมวลเพือ่ ตอบค�ำถามปริศนาหลัก ส�ำหรับโจทย์ยอ่ ยทัง้ สามข้อนี ้ ผูอ้ า่ น อาจเคยพบเห็นสองข้อหลังมาก่อน แต่โจทย์ข้อแรกคงไม่คุ้นเคยนัก (อันที่ จริงผมคิดขึ้นมาเองระหว่างแก้ปริศนาข้อนี้) โจทย์ยอ่ ยข้อที ่ 1: มีไพ่ A สองใบ และ J หนึง่ ใบ ผมคว�ำ่ หน้าไพ่ ทุกใบแล้วเรียงเป็นแถวบนโต๊ะ คุณไม่รู้ว่าไพ่อะไรอยู่ต�ำแหน่งไหน คุณ มีสิทธิ์ตั้งค�ำถามใช่หรือไม่หนึ่งค�ำถาม เพื่อหาว่าไพ่ใบไหนคือ A โดย ก่อนถามให้คุณชี้ท่ีไพ่ใบหนึ่ง ถ้าไพ่ใบนั้นเป็น A ผมจะพูดจริง แต่ถ้าไพ่ ใบนั้นเป็น J ผมจะพูดจริงหรือเท็จอย่างสุ่ม โจทย์ย่อยข้อที่ 2: สมมติว่าคุณก�ำลังคุยอยู่กับพระเจ้าที่พูดจริง เสมอหรือพระเจ้าที่พูดเท็จเสมอ ซึ่งคุณไม่รู้ว่าเป็นองค์ไหน และพระเจ้า ทีค่ ณ ุ คุยด้วยก็ยนิ ดีตอบค�ำถามของคุณเป็นภาษาไทย ถ้าคุณอยากรูว้ า่ เมือง Dushanbe อยูใ่ นประเทศ Kirghizia ใช่หรือไม่ คุณต้องตัง้ ค�ำถามว่าอะไร โจทย์ยอ่ ยข้อที ่ 3: ถ้าคุณก�ำลังพูดอยูก่ บั พระเจ้าทีพ่ ดู จริงเสมอ แต่ พระเจ้าไม่ยอมตอบค�ำถามของคุณด้วยภาษาที่คุณเข้าใจ ท่านจะใช้ภาษา เทพของท่านคือ “ดา” กับ “หยา” คุณจะตัง้ ค�ำถามใช่หรือไม่เพียงค�ำถาม เดียวว่าอะไร เพื่อให้รู้ว่าเมือง Dushanbe อยู่ในประเทศ Kirghizia หรือเปล่า
9
เฉลยโจทย์ย่อยข้อที่ 1: ให้ชี้ที่ไพ่ใบกลางแล้วถามว่า “ไพ่ใบทางซ้ายคือ A ใช่ไหม” ถ้าผมตอบว่า “ใช่” ก็ให้คุณเลือกไพ่ใบซ้าย แต่ถ้าผมตอบว่า “ไม่” คุณก็เลือกไพ่ใบขวา ไม่ว่าไพ่ใบที่คุณชี้เป็นอะไรก็ตามถ้าได้ยิน ค�ำว่า “ใช่” เลือกไพ่ด้านซ้าย ได้ยินค�ำว่า “ไม่” เลือกไพ่ด้านขวา เหตุผล คือ ถ้าไพ่ใบกลางที่คุณชี้เป็น A ผมพูดจริง คุณก็เลือกตามที่ผมพูด ถ้า ไพ่ใบกลางทีค่ ณ ุ ชีค้ อื J ไม่วา่ ผมจะตอบอย่างไรไพ่ทงั้ ซ้ายและขวาย่อมเป็น A ทั้งคู่เสมอ
A
A
J
“ใช่”
J
A
A
“ไม่”
A
J
A
“ใช่” “ไม่”
ไพ่ใบทางซ้าย คือ A ใช่ไหม ?
ั หาโจทย์ยอ่ ยข้อที ่ 2 และ 3 เราจ�ำเป็นต้องใช้ตวั เชือ่ ม การแก้ปญ 2 ประพจน์ “ก็ตอ่ เมือ่ ” (iff)3 เข้ามาช่วย คุณสมบัตทิ นี่ า่ สนใจของตัวเชือ่ ม 2ประพจน์คอื ข้อความทีม ่ คี า่ ความจริงเป็นจริงหรือเท็จอย่างใดอย่างหนึง่ เท่านัน้ เช่น 1+1 = 3
เป็นประพจน์ที่มีคา่ ความจริงเป็นเท็จ 3 iff เป็นตัวย่อของวลี “if, and only if” ต�ำราคณิตศาสตร์ชน ั้ มัธยมของประเทศไทยเราเทียบ กับศัพท์คำ� ว่า “ก็ตอ่ เมือ่ ” เมือ่ ใช้เชือ่ มประพจน์สองประพจน์ ค่าความจริงของประพจน์ใหม่ ที่เกิดจากการเชื่อม ขึ้นอยู่กับค่าความจริงของแต่ละประพจน์ที่น�ำมาเชื่อม
10
ประพจน์ “ก็ต่อเมื่อ” คือ เมื่อเราน�ำมันไปแทรกระหว่างสองประพจน์ที่มี ค่าความจริงเหมือนกัน มันจะให้ผลลัพธ์ออกมาเป็นจริง แต่ถ้าเราน�ำไป แทรกระหว่างสองประพจน์ทมี่ คี า่ ความจริงต่างกัน จะให้ผลลัพธ์ออกมาเป็น เท็จ เช่น “พระจันทร์สร้างจากชีส Gorgonzola4 ก็ตอ่ เมือ่ โรมอยูใ่ นรัสเซีย” ประโยคนีม้ คี า่ ความจริงเป็นจริง เพราะพระจันทร์ไม่ได้สร้างจากชีสและโรม ไม่ได้อยู่ในรัสเซีย แต่ประโยค “พระจันทร์สร้างจากชีสก็ต่อเมื่อโรมอยู่ใน อิตาลี” และ “บนพระจันทร์ไม่มอี ากาศหายใจก็ตอ่ เมือ่ โรมอยูใ่ นรัสเซีย” มี ค่าความจริงเป็นเท็จ เพราะโรมอยู่ในอิตาลีและบนพระจันทร์ไม่มีอากาศ หายใจ ดังนั้นประโยค “บนพระจันทร์ไม่มีอากาศหายใจก็ต่อเมื่อโรมอยู่ ในอิตาลี” มีคา่ ความจริงเป็นจริง เฉลยโจทย์ย่อยข้อที่ 2: เราไม่สามารถถามพระเจ้าตรง ๆ ว่า “Dushanbe อยู่ใน Kirghizia ใช่หรือไม่” ได้ แต่เราต้องตั้งค�ำถามให้ซับซ้อนขึ้นว่า “ท่านคือพระเจ้าที่พูดจริงเสมอก็ต่อเมื่อเมือง Dushanbe (D.) อยู่ใน ประเทศ Kirghizia (K.) ใช่หรือไม่” ค�ำถามนี้มีกรณีค�ำตอบที่เป็นไปได้ สี่แบบ 1. พระเจ้าพูดจริงเสมอ และ D. อยูใ่ น K. พระเจ้าจะตอบคุณว่า “ใช่” 2. พระเจ้าพูดจริงเสมอ แต่ D. ไม่อยูใ่ น K. พระเจ้าจะตอบคุณว่า “ไม่ใช่” 3. พระเจ้าพูดเท็จเสมอ แต่ D. อยู่ใน K. พระเจ้าจะตอบคุณว่า “ใช่” เพราะสองประพจน์มีค่าความจริงต่างกัน ดังนั้นผลลัพธ์เป็นเท็จ แต่พระเจ้าพูดเท็จ จึงตอบคุณว่า “ใช่” 4. พระเจ้าพูดเท็จเสมอ และ D. ไม่อยูใ่ น K. พระเจ้าจะตอบคุณ ว่า “ไม่ใช่” เพราะสองประพจน์มีค่าความจริงเหมือนกัน ดังนั้นผลลัพธ์ เป็นจริง แต่พระเจ้าพูดเท็จ จึงตอบคุณว่า “ไม่” 4ชีสอิตาลีท�ำจากนมวัว ชื่อ Gorgonzola เรียกตามชื่อเมืองเล็กๆ ใกล้มิลาน ซึ่งเป็นสถานที่
แห่งแรกที่ผลิตชีสชนิดนี้
11
เส้นสีแดงคือทางเดินของม้าสีขาวจุด 3 เริ่มจากจุด 3 ไปยังจุด 6 เป็นเส้นทางตรงเดินทั้งหมดสี่ที เส้นสีเทาคือทางเดินของม้าสีขาวจุด 1 เริ่มจากจุด 1 ไปยังจุด 9 เดินสี่ทีเท่ากัน แต่มีการเดินย้อนทางเดิมคือ จากจุด 5 ไปจุด 7 แล้วจากจุด 7 กลับมาจุด 5 เนือ่ งจากม้าทัง้ สองตัวเป็น ม้าสีขาวเหมือนกัน ดังนั้นเราสามารถสลับให้ม้าสีขาวจุด 1 เดินไปยังจุด 6 แทน และให้มา้ สีขาวจุด 3 เดินไปจุด 9 ก็จะลดจ�ำนวนทีทเี่ ดินลงสองที คือ 1-5-7-10-6 เดินสี่ที และ 3-5-9 เดินสองที สรุปผลการปรับปรุงเส้น ทางดังตารางต่อไปนี้ 1
2
3
4
5
6
7
8
9
10
11
7-10-6 1 1-5-7 2-3-5 5-7-10 2 3-5-9 3 4-1-5 5-9-8 4 6-2-3 6 8-9-4 8 9-4-1 9 10-6-2 10
x-y-z แทน เดินจากจุด x ไปยังจุด y แล้วเดินม้าตัวเดิมจากจุด y ต่อไปยังจุด z นับเป็นการจับหนึง่ ครัง้ ซึง่ เราท�ำรวมได้ จับ 11 ครัง้ เดิน 22 ที ตรงตามวัตถุประสงค์โจทย์ ส�ำหรับข้อนี้ถ้าใครสามารถใช้วิธี trial & error แล้วประสบผลส�ำเร็จ 22 ที ตัง้ แต่ trial แรก เราก็คงต้องยอมรับ ว่าเขาหรือเธอคนนั้นเป็นนักสลับรางชั้นเซียน
64
ปริศนา เกมทายใจ
นกเพนกวินอ้วนนึกตัวเลขทีม่ คี า่ ตัง้ แต่ 1 ถึง 16 ตัวหนึง่ ไว้ในใจ แล้วให้นก เพนกวินผอมตั้งค�ำถามใช่หรือไม่ (yes-no question) เพนกวินผอมจะใช้ ค�ำถามน้อยทีส่ ดุ กีค่ ำ� ถาม คุณผูอ้ า่ นอาจตอบได้ทนั ทีวา่ 4 ถ้าเคยรูห้ ลักการ มาก่อนคือ 24 = 16 หรืออาจใช้วิธีแบ่งครึ่ง เช่น “มากกว่า 8 ใช่มั้ย” ถ้า ไม่ใช่ ถามต่อว่า “มากกว่า 4 ใช่มยั้ ” ถ้าใช่ ถามต่อว่า “มากกว่า 6 ใช่มยั้ ” แล้วนกเพนกวินผอมจะรู้ค�ำตอบเมื่อจบค�ำถามที่ 4 ยังมีวิธีอื่นอีกคือ นก เพนกวินผอมอาจขอให้นกเพนกวินอ้วนแปลงเลขทีน่ กึ ไว้เป็นเลขฐานสอง1สี่ หลัก เช่น ถ้านกเพนกวินอ้วนนึกเลข 7 ก็แปลงเป็น 0111 จากนัน้ นกเพนกวิน ผอมถามหลักที่อยู่ขวาสุดคือ 0 ใช่หรือไม่ ถัดมาทางซ้ายคือ 1 ใช่หรือไม่ เมื่อถามครบทั้งสี่หลักเพนกวินผอมก็แปลงกลับเป็นเลขฐานสิบ Bravo ! นิ ต ยสาร K öMaL ของฮั ง การี พิ ม พ์ โ จทย์ ที่ ค ล้ า ยกั น โดยเติ ม ความยากลงไปอีกนิดคือ ถ้าอนุญาตให้เพนกวินอ้วนมีสทิ ธิโ์ กหกได้หนึง่ ครัง้ ซึง่ อาจโกหกหรือไม่โกหกก็ได้ นกเพนกวินผอมใช้คำ� ถามน้อยทีส่ ดุ กีค่ ำ� ถาม โจทย์ข้อนี้ง่ายมากส�ำหรับใครก็ตามที่เคยเรียนวิชา Information Theory หรือ Code Theory แต่ KöMaL เป็นนิตยสารเสริมการเรียนรูค้ ณิตศาสตร์ 1เลขฐานสองคือเลขทีเ่ ขียนโดยใช้เลขโดด 0 กับ 1 ตัวอย่างการแปลงเลข 214 ฐานสิบ เป็น ฐานสอง; 214 = (2x10 2)+(1x101)+(4x100) สังเกตว่าฐานของเลขยกก�ำลัง คือ 10 เราจึงเรียกว่าเลขฐาน 10 เมื่อเปลี่ยนฐานเป็นสอง ค่าของ 214 = (1x27)+(1x26)+(0x25) +(1x2 4)+(0x2 3)+(1x2 2)+(1x2 1)+(0x2 0) = (11010110) 2 ค� ำ ว่ า บิ ต เป็ น หน่ ว ยของ
เลขฐานสองหนึง่ ต�ำแหน่ง จากตัวอย่าง ตัวเลข 214 สามารถแปลงเป็นเลขฐานสองแปดบิต (หรือแปดต�ำแหน่งหรือแปดหลัก)
65
ในระดับมัธยม ดังนั้นน้อง ๆ มัธยมที่ต้องการแก้โจทย์ปัญหาข้อนี้ถ้าไม่มี ความรู้เรื่องการเข้ารหัสข้อมูลก็ต้องออกแรงใช้ความคิดใหม่กันพอสมควร ในบท "ปริศนาเกมทายใจ" นีผ้ มขอแนะน�ำวิธกี ารเข้ารหัสตรวจจับและแก้ไข ข้อผิดพลาด (error-correcting code) เพื่อหาผลเฉลยของโจทย์ข้อนี้กัน สมมติว่านกเพนกวินอ้วนต้องการส่งข้อมูลเลขฐานสอง 1010 ให้ กับนกเพนกวินผอม ถ้าช่องทางสื่อสารมีข้อผิดพลาดท�ำให้เลข 1 ตัวหนึ่ง เปลี่ยนเป็นเลข 0 ตามรูปที่ 1 เลข 0 สีแดงคือข้อมูลที่ผิดพลาด ถ้านก เพนกวินผอมไม่ตรวจสอบข้อมูลก่อนน�ำไปใช้ ก็จะได้ขอ้ มูลทีผ่ ดิ ไป ค�ำถาม จึงเกิดขึ้นกับนกเพนกวินผอมว่าจะต้องตรวจสอบข้อมูลเมื่อใด และตรวจ สอบข้อมูลกี่ครั้ง ถ้าต้องถามข้อมูลนกอ้วนใหม่ 10 ครั้ง แล้วได้รับค�ำตอบ ไม่ตรงกันทัง้ 10 ครัง้ นกผอมจะท�ำอย่างไร แต่ถา้ ช่องทางสือ่ สารค่อนข้าง น่าเชื่อถือ นกผอมก็คิดว่าตัวเองไม่จ�ำเป็นต้องถามใหม่ทุกครั้ง หรือหลาย ครั้ง จะมีเครื่องมือใดที่ช่วยยืนยันความมั่นใจได้อีกบ้าง นอกจากความไว้ วางใจในความน่าเชื่อถือของช่องทางสื่อสาร
รูปที่ 1 ข้อมูลมีความผิดพลาดหนึ่งบิต
รูปที่ 2 เพิ่มบิตตรวจสอบความผิดพลาด
66
วิธีเรียบง่ายวิธีหนึ่งในการแก้ปัญหาสื่อสารแบบนี้คือ การเพิ่มบิต ตรวจสอบ รูปที่ 2 เลข 0 สีเทาคือบิตตรวจสอบที่นกเพนกวินอ้วนสร้าง ขึ้นมา โดยมีข้อตกลงร่วมกับนกเพนกวินผอมว่า ข้อมูลที่แท้จริงคือข้อมูล ซ้ายมือสีบ่ ติ แรกเท่านัน้ และข้อมูลทัง้ ห้าบิตมีเลข 1 อยูจ่ ำ� นวนคูต่ วั (พาริตี้ คู่)2 เมื่อข้อมูลดังกล่าวเดินทางมาถึงเพนกวินผอม ปรากฏว่ามีความ ผิดพลาดเกิดขึ้นต�ำแหน่งเดิม (เลข 0 สีแดง) แต่คราวนี้นกเพนกวินผอม สามารถรูไ้ ด้วา่ มีขอ้ มูลผิดพลาดหนึง่ บิต เพราะจ�ำนวนเลข 1 ไม่เป็นจ�ำนวนคู่ จึงถามกลับว่า ?#$?! เพื่อขอให้นกอ้วนส่งข้อมูลมาใหม่อีกครั้ง เมื่อนก เพนกวินอ้วนตอบกลับมาและเพนกวินผอมนับ 1 ได้จำ� นวนคูต่ วั ตามทีต่ กลง กันไว้ จึงค่อนข้างมั่นใจได้วา่ ไม่มีข้อมูลผิดพลาด แล้วจะเกิดอะไรขึ้นถ้าเหตุการณ์เป็นดังรูปที่ 3 ซึ่งเป็นกรณีที่มี ข้อมูลผิดพลาดสองตัว
รูปที่ 3 ข้อมูลมีความผิดพลาดสองบิต
คุณผู้อ่านคงเห็นด้วยว่าการเพิ่มบิตตรวจสอบเพียงบิตเดียวไม่ สามารถตรวจสอบความผิดพลาดกรณีนี้ได้ นกเพนกวินทั้งสองต้องหาวิธี การใหม่ และควรรือ้ ช่องทางการสือ่ สารนัน้ ทิง้ ไปด้วย เพราะกรณีนดี้ เู หมือน มันไม่นา่ เชือ่ ถือเอาเสียเลย อย่างไรก็ตามจากวิธกี ารเพิม่ บิตตรวจสอบหนึง่ บิต เราจะรูเ้ พียงว่าข้อมูลเกิดข้อผิดพลาด แต่ไม่รวู้ า่ เกิดขึน้ ณ ต�ำแหน่งใด 2การตรวจสอบแบบนี้เรียกว่าการเพิ่มบิตพาริตี้คู่ (even parity bit) คือการเติมบิตสุดท้าย
ลงไปเพือ่ ให้จำ� นวนบิตทีม่ คี า่ เป็น 1 เป็นจ�ำนวนคู ่ ในท�ำนองเดียวกันเราอาจท�ำเป็นบิตพาริตี้ คี ่ (odd parity bit) ก็ได้ เช่น 11010110 ถ้าเพิม่ บิตพาริตคี้ ู่ จะกลายเป็น 110101101 แต่ ถ้าเพิ่มบิตพาริตี้คี่ จะเป็น 110101100
67
บุคคลแรกที่คิดใช้ล�ำดับของบิตตรวจสอบความผิดพลาดระบุ ต�ำแหน่งบิตที่ผิดพลาดคือ Richard Hamming เพื่อนร่วมงานที่ห้องปฏิบัติ การ Bell ของ Claude Shannon ผู้ได้รับขนานนามว่าบิดาแห่งทฤษฎี สารสนเทศ (Information Theory) พูดได้วา่ ตัง้ แต่ตอนที ่ Shannon เริม่ พัฒนาทฤษฎีสารสนเทศเป็นแบบจ�ำลองทางคณิตศาสตร์สำ� หรับการสือ่ สาร Hamming ก็ตระหนักถึงความส�ำคัญของการหาและแก้ไขข้อผิดพลาดของ ข้อมูลในการสื่อสาร แนวคิดนี้ปัจจุบันก็ยังคงความส�ำคัญและรู้จักกันดีใน นามการเข้ารหัสฮัมมิ่ง หรือ Hamming code ถ้าเรามีขอ้ มูลจริง r บิต และใส่เพิม่ เข้าไปอีก m บิต รวมเป็น n = m+r บิต เขียนแทนด้วย (n,r) และถ้า m บิตนัน้ สามารถบอกต�ำแหน่งทีผ่ ดิ พลาดได้ ดังนัน้ 2m ≥ n+1 ในกรณีท ี่ r = 4 เราพบว่า m = 3 สอดคล้อง กับเงื่อนไขของอสมการ (27-4 ≥ 7+1) หมายความว่าเราสามารถสร้าง ข้อมูล (7,4) ทีส่ ามารถแก้ไขข้อผิดพลาดหนึง่ บิตได้ โดยมีวธิ กี ารดังนี ้ จาก ตาราง D7, D6, D5, D3 คือข้อมูลจริง ส่วน P4, P2, P1 คือข้อมูลที่ใส่เพิ่ม เข้าไปเป็นบิตพาริตี้คู่ D7 D7 D7 D7
D6 D6 D6
D5 D5 D5
P4 D3 P2 P1 - D3 - P1 - D3 P2 P4 - - -
รูปที่ 4
68
ข้อมูล (7,4) พาริตี้คู่ P1 พาริตี้คู่ P2 พาริตี้คู่ P4
P1 สร้างจาก D7, D5 และ D3, P2 สร้างจาก D7, D6 และ D3, P4 สร้างจาก D7, D6 และ D5 สาเหตุที่ต้องแยกสร้างพาริตี้คู่สามชุด อาจพิจารณาจากแผนภาพรูปที ่ 4 ถ้ามีขอ้ มูลตัวใดตัวหนึง่ เปลีย่ นแปลงจะ ท�ำให้บิตพาริตี้อย่างน้อยหนึ่งตัวเปลี่ยนแปลง เช่น ถ้า D3 เปลี่ยนจะท�ำให้ P1 และ P2 เปลี่ยน ถ้า D7 เปลี่ยน จะท�ำให้ P4, P2 และ P1 เปลี่ยน ถ้า บิตพาริตี้เปลี่ยนตัวเดียว หมายความว่ามีเฉพาะตัวมันเองเท่านั้นที่เปลี่ยน ตัวอย่างจากรูปที่ 1 นกเพนกวินอ้วนต้องการส่ง 1010 ให้นก เพนกวินผอม สามารถสร้างรหัสฮัมมิ่งดังตาราง 1 0 1 - 0 1 - 1 - 0 1 0 - - 0 1 1 0 1 0 - 1 0 1 0 0 1 D7 D6 D5 P4 D3 P2
- ข้อมูลจริง 0 พาริตี้คู่ P1 - พาริตี้คู่ P2 - พาริตี้คู่ P4 0 ข้อมูล (7,4) P1 ข้อมูล (7,4)
ถ้าข้อมูลที่นกเพนกวินอ้วนส่งไปมีความผิดพลาดเกิดขึ้นหนึ่งบิต นกเพนกวินผอมจะหาข้อผิดพลาดนั้นและแก้ไขได้เสมอโดยการตรวจสอบ บิตพาริตี้ทั้งสามบิต ดังรูปที่ 5
รูปที่ 5 ตัวอย่างรหัสฮัมมิ่ง
69
เมือ่ นกเพนกวินผอมได้รบั 1000010 มันจะน�ำข้อมูล D7, D6, D5, D3 มาตรวจสอบบิตพาริตใี้ หม่อกี ครัง้ แล้วเปรียบเทียบกับบิตพาริต ี้ P4, P2, P1 ทีน่ กเพนกวินอ้วนส่งมาให้ โดยอาจเปรียบเทียบว่า ถ้าตรงกันมีคา่ เป็น 0 ถ้าต่างกันมีคา่ เป็น 1 (ในทาง logic คือตัวด�ำเนินการ XOR) จากตัวอย่าง รูปที่ 5 นกเพนกวินผอมพบว่า P4 กับ P1 ไม่ตรงกัน เมื่อดูตามรูปที่ 4 จึง สรุปได้ทนั ทีวา่ D5 คือบิตทีผ่ ดิ พลาด หรือนกเพนกวินผอมอาจน�ำผลจากการ XOR บิตพาริตี้ของตัวเองกับของนกเพนกวินอ้วนมาเรียง (P4, อ้วน XOR P4, ผอม), (P2, อ้วน XOR P2, ผอม), (P1, อ้วน XOR P1, ผอม) = 101
ซึง่ เท่ากับ 5 มันก็จะรูว้ า่ บิตล�ำดับที ่ 5 จากทางขวามือคือบิตทีผ่ ดิ พลาด และนีค่ อื เหตุผลว่าเหตุใดตารางสร้างรหัสฮัมมิง่ จึงต้องสลับ D3 กับ P4 ก็เพื่อให้ได้ค�ำตอบจากการเปรียบเทียบเมื่อแปลงเป็นเลขฐานสองแล้ว สามารถชี้ต�ำแหน่งที่ผิดพลาดได้เลย
รูปที่ 6
น่าทึ่งใช่ไหมครับ เราลองมาดูกลไกที่ซ่อนอยู่เบื้องหลังของหลัก การนี้กัน ท�ำไมการเข้ารหัสฮัมมิ่งจึงแก้ไขข้อผิดพลาดหนึ่งบิตได้ สมมติ ว่าเรามีข้อมูลหนึ่งบิต (0 หรือ 1) ถ้าเราท�ำซ�้ำข้อมูลนั้นให้กลายเป็นสาม บิต คือ 000 กับ 111 แล้วส่งไปบนช่องทางทีอ่ าจเกิดข้อผิดพลาดได้หนึง่ บิต ผูร้ บั รูเ้ สมอว่าข้อมูลทีเ่ ราต้องการส่งคืออะไร เหตุผลง่าย ๆ คือ ถ้าเปลีย่ น มันจะเปลี่ยนแค่หนึ่งตัว อีกสองตัวไม่เปลี่ยน เช่น ถ้าเราได้รับ 011 เราก็ รูท้ นั ทีวา่ ผูร้ บั ต้องการส่ง 1 บางคนอาจเกิดค�ำถามว่าท�ำซ�ำ้ แค่สองบิตไม่ได้ 70
หรือ ค�ำตอบคือไม่ได้ครับ เพราะเราไม่รู้ว่า 10 นั้นกลายพันธุ์มาจาก 00 หรือ 11 ดังนัน้ สามารถสรุปได้วา่ ถ้ายอมให้มคี วามผิดพลาดเกิดขึน้ ได้หนึง่ บิต ข้อมูลทีเ่ ป็นไปได้ตอ้ งห่างกันอย่างน้อยสามช่วงของการกลายพันธุ ์ เช่น การเปลีย่ นจาก 000 เป็น 111 ต้องผ่านขัน้ ตอนการเปลีย่ นทีละบิต (กลาย พันธุ)์ ตามรูปที ่ 6 เราอาจลองพิสจู น์ขอ้ มูล (7,4) โดยการสร้างความเป็น ไปได้ทั้งหมดของข้อมูลขึ้นมา แล้วตรวจสอบว่าแต่ละข้อมูลนั้นห่างกันสาม ช่วงของการกลายพันธุ์จริงหรือไม่ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
D7 D6 D5 P4 D3 P2 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 1 0 1 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1
P1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1
จากตาราง ถ้าเราได้รบั ข้อมูล 1110110 เราสามารถตอบได้ทนั ที ว่าข้อมูลที่ถูกต้องคือ 1100110 เพราะข้อมูลสองตัวนี้ห่างกันหนึ่งช่วงของ การกลายพันธุ์ ย้อนกลับไปทีโ่ จทย์ตงั้ ต้นของเรา แปลงเลขทีน่ กึ ในใจเป็นเลขฐาน 71