• 16 min

โจทย์ระบายสีบนกระดาษพับ Origami ของ Genwit (Graph Coloring)

Genwit ลงโจทย์คอมอีกแล้วว่าด้วยเรื่องของการระบายสีบนกระดาษที่โดนพับ เลยอยากจะเอามาเขียนหน่อยเพราะอันนี้มัน Graph Theory ของวิชาวิทยาการคอมพิวเตอร์ดีๆนี่เอง

เป็ดไอคอนของเรื่องเล่าชาวอัลกอ Practical Algorithms
Practical Algorithms: เรื่องเล่าชาวอัลกอ
เพจที่อยากให้คนไทยมีเนื้อหาอัลกอริทึมดีๆ ให้ได้อ่านกัน
Alt

ถ้าใครไม่เห็นโจทย์ใน GenWit หรือยังไม่ได้ดู แวบไปดูก่อนได้ฮะ รอบนี้สนุกดี

Genwit อัจฉริยะพันธุ์ใหม่ EP. 13

หรือจะดูจากรูปโจทย์ด้านล่างก็ได้

กระดาษที่ถูกพับเป็นนักกาเรียนของญี่ปุ่นแล้วคลายออกมาเป็นแผ่นกระดาษเหมือนเดิม ที่ยังเห็นรอยประตามเส้นที่ถูกพับ โจทย์ Genwit EP.13

ถามว่าถ้าเราพับกระดาษ Origami แบบนี้แล้วจะใช้สีในการระบายหน้ากระดาษอย่างน้อยสุดกี่สีถึงจะพอ เพื่อให้แต่ละหน้าที่ติดกันไม่ใช่สีเดียวกัน

Graph Coloring คืออะไร?

ขอเท้าความสักเล็กน้อยว่านี่เป็นโจทย์แบบนึงในวิชาวิทยาการคอมพิวเตอร์อยู่แล้วที่ชื่อว่า Graph Coloring โดยเราจะได้กราฟ(แบบคอมพิวเตอร์) มาอันนึงแล้วถามว่าต้องระบายสีโหนด (วงกลม) ยังไงเพื่อให้วงกลมที่มีเส้นเชื่อมติดกันเป็นคนละสี และใช้จำนวนสีที่ต่างกันให้น้อยที่สุดเท่าที่จะเป็นไปได้

ให้กราฟที่มี 5 โหนดมาโดยที่มีเส้นเชื่อมระหว่างโหนดหมายเลข 1 2 และ 3 แล้วก็มี 5 เชื่อมกับ 3 และ 4 | พอมีการระบายสี 1 2 และ 3 จะได้คนละสีกันหมดเลยเพราะสามตัวนี้เชื่อมติดกัน ส่วน 4 กับ 5 ก็เป็นคนละสีกับ 3 การทำ Graph Coloring

ซึ่งโจทย์ข้อนี้ของ Genwit ก็คือการทำ Coloring เลยนั่นแหละ เพราะถ้าเราเทียบให้ หน้า(Face) ของตัวกระดาษเป็นโหนด แล้วให้หน้าที่ติดกันที่โดนคั่นด้วยรอบพับ เชื่อมกัน เราก็จะได้เป็นกราฟออกมาเลย

จากกระดาษที่โดนพับแล้วคลายออก เราสามารถวางโหนดลงบนแต่ละหน้ากระดาษได้แล้วลากเส้นเชื่อมกันในหน้าที่อยู่ติดกัน แปลงโจทย์กลายเป็นกราฟ

ซึ่งก็จะเห็นว่าถ้าเราพับกระดาษแบบในโจทย์ เราจะได้กราฟที่มีหน้าตาแบบนี้ที่เราระบายสีได้ด้วย 2 สีเลย แต่เดี๋ยวจะอธิบายเพิ่มว่าทำไม 2 สีได้ตลอด

Planar Graph กับ 4-color Theorem

ทีนี้พอเรามองเป็น Graph Theory เนี่ย กราฟบางตัวมันจะมีคุณสมบัติพิเศษเรียกว่า Planar Graph โดยคุณสมบัตินี้มันหมายความว่าเราสามารถวาดกราฟให้เส้นเชื่อมทุกเส้นไม่ตัดกันเองเลยได้

ตัวอย่างกราฟที่ไม่เป็น Planar:

กราฟที่มี 5 โหนดที่ทุกโหนดมีเส้นเชื่อมไปหากัน เราไม่สามารถวาดใหม่ให้เส้นไม่ตัดกันได้เลย Complete Graph ขนาด 5 หรือเรียกว่า K5 ก็ได้

เพราะกราฟแบบนี้มันไม่สามารถวาดให้เส้นเชื่อมมันให้ไม่ตัดกันได้ ก็เลยไม่เป็น Planar Graph

ซึ่งจากรูปข้างบนของโจทย์ Genwit เส้นเชื่อมมันไม่ได้ตัดกัน โจทย์นี้ก็เลยเหมือนว่าถามว่า Planar Graph นี้ใช้กี่สีระบายนั่นแหละ

ทีนี้มันเป็น Planar Graph แล้วยังไง คือมันจะมีทฤษฎีอยู่ตัวนึงชื่อว่า 4-color Theorem ที่ถ้าเอาอย่างย่อๆ จะบอกว่ากราฟไหนก็ตามที่สามารถวาดให้เป็น Planar Graph ได้ จะสามารถระบายได้โดยใช้สีไม่เกิน 4 สี

ดูตัวอย่างแผนที่เมกาก็ได้เหมือนกัน:

Map_of_United_States_accessible_colors_shown.svg

ถามว่ามีพิสูจน์ไหม ก็มีแหละ แต่เขียนไม่ไหวเยอะเกิน ดูตัวที่สำคัญกับโจทย์ตอนนี้ดีกว่า 555

เพราะมันมีทฤษฎีอีกตัวชื่อว่า Grötzsch’s theorem (แอดอ่านไม่ออก 🤣) ที่บอกไว้ว่า ถ้าใน Planar Graph ที่ว่าเนี่ยไม่มีสามเหลี่ยมในนั้นเลย กราฟนั้นสามารถระบายได้ด้วย 3 สีแทนที่จะเป็น 4 สี

สามเหลี่ยมที่ว่าคือ

กราฟ 3 โหนดที่เชื่อมกันเองเป็นรูป 3 เหลี่ยม กราฟสามเหลี่ยม K3

ซึ่งถ้าสังเกตดีๆตัวโจทย์การพับกระดาษก็เข้าเงื่อนไขนี้เหมือนกัน แต่ถ้าดู Genwit จบแล้วจะเห็นว่าคำตอบมันไม่ใช่ 3 หนะสิ

สาเหตุคือการพับกระดาษ Origami เนี่ยมันมีคุณสมบัติเฉพาะตัวอีกเหมือนกัน นอกจากว่ามันจะเป็น Planar Graph ที่ไม่มีสามเหลี่ยมแล้ว ตรงรอยตัดของเส้นพับบนกระดาษเนี่ยจะเชื่อมอยู่กับหน้ากระดาษเป็นเลขคู่เท่านั้น (จากทฤษฎีการพับกระดาษของ Maekawa)

กระดาษที่โดนพับแล้ว ที่จุดกึ่งกลางระหว่างรอบพับเราสามารถนับจำนวนหน้ากระดาษที่อยู่รอบๆจุดนั้นได้ และจะได้เป็นเลขคู่ นับจำนวนหน้ารอบๆจุดตัด

แล้วการที่มันเป็นแบบนี้ทำให้ตอนที่เราแปลงเป็นตัวกราฟจะไม่มี cycle ที่มีความยาวเป็นเลขคี่

ซึ่งการที่ไม่มี Cycle ที่มีความยาวคี่เลย ก็จะเหมือนกับว่ากราฟรบอรอยตัดอันนั้นที่ได้จะหน้าตาแบบนี้:

รอยตัดตรงกลางของกระดาษพับมี 6 หน้า ดังนั้นเราจะได้เป็นกราฟ cycle ที่มีขนาด 6

รอยตัดตรงกลางของกระดาษพับมี 4 หน้า ดังนั้นเราจะได้เป็นกราฟ cycle ที่มีขนาด 4 การแปลงรอบจุดตัดให้เป็นกราฟ

ที่เราสามารถแบ่งระบายสีออกเป็นสองฝั่งได้แบบนี้ ที่ในทางคอมพิวเตอร์จะเรียกว่า Bipartite Graph ทีนี้คืออันนั้นมันรอบจุดตัดจุดเดียวไง แต่ในการพับกระดาษมันมีหลายจุดตัดระหว่างรอบพับใช่มะ เราเลยต้องมาดูว่าแต่ละจุดตัดมันสัมพันธ์กันยังไงด้วย

ถ้าเรามองสองจุดตัดที่อยู่ติดๆกัน เราจะสามารถลากเส้นตามรอยพับได้แบบนี้

รูปการพับกระดาษเหมือนเดิมแต่ highlight เส้นรอยพับกระดาษ ที่อยู่ระหว่าง 2 จุด เส้นรอยพับกระดาษที่เชื่อมจุดตัดสองจุดเข้าด้วยกัน

ซึ่งทุกรอยพับที่ว่าเนี่ย ยังไงมันก็ต้องคั่นระหว่างหน้า 2 หน้าใช่ไหมล่ะ (ไม่งั้นมันก็ไม่ใช่รอยพับ) ดังนั้นพอเราจะเอากราฟที่ได้จากทั้งสองจุดมาเชื่อมกัน เราก็เชื่อมเข้ากับแค่ 2 จุดที่มันโดนคั่นด้วยรอยพับนั้นก็พอ

แล้วมันก็จะได้หน้าตาแบบนี้

เอา Cycle สองอันที่มีหน้าเหมือนกันมาเชื่อมกันจะได้เป็นกราฟใหม่ cycle 2 อันมาเชื่อมกัน

ซึ่งสังเกตว่าถึงตอนเชื่อมสีจะไม่เหมือนกัน เราก็สามารถสลับสีเพื่อให้มันกลับมาเหมือนกันก่อนแล้วค่อยเชื่อมก็ได้ มันไม่ได้ผิดอะไร แล้วก็ด้วยความที่มันจะไม่มี Cycle ขนาดคี่ยังไงกราฟพวกนี้ก็ต่อกันได้

จุดตัดที่เกิดจากรอบพับที่เหลือในกระดาษ origami จุดตัดที่เหลือที่ต้องไปเชื่อมอีก

และหลังจากนั้นเราก็แค่เชื่อมแบบนี้ไปเรื่อยๆมันก็จะครบทั้งกราฟเอง และก็ยังใช้แค่ 2 สีเหมือนเดิมเพราะยังไงเราก็ยังสลับสีตัวที่ต้องเข้ามาต่อให้มันตรงกับตัวที่มีอยู่ก่อนหน้าได้อยู่ดี

ซึ่งแปลว่าต่อให้พับกระดาษยังไง(ไม่จำเป็นว่าเป็นแค่รูปนก) ขอแค่กระดาษไม่โดนตัดหรือฉีก มันก็ระบายด้วย 2 สีได้ตลอดอยู่ดี

วิธีอื่นๆ

มองภาพกระดาษเป็นเหมือนการพับทบก็ได้ เพราะถ้ามองว่ากระดาษสามารถถูกพับให้มันแบนได้ เราก็มองว่าด้านที่หันขึ้นข้างบนเป็นสีนึง และด้านที่หันลงด้านล่างเป็นอีกสีนึงก็ได้เหมือนกัน เพราะการที่จะเปลี่ยนจากด้านบนไปด้านล่างมันก็ต้องผ่านรอยพับ ซึ่งก็เหมือนกับการทำ Coloring อยู่ดี เพราะมันเชื่อมกันด้วยเส้นเชื่อม(รอบพับ)

มองว่าการพับกระดาษทำให้มีสองด้าน บน กับล่าง และระบายสีคนละสีกัน

อ้างอิง

The Math for Folding Origami Grötzsch's theorem Maekawa Theorem Maekawa-Justin and Kawasaki-Justin theorems Mathematics of Paper folding
0

บทความอื่นๆ