• 11 min

Graph Theory มาจากไหน

Graph เป็นเนื้อหาส่วนนึงในเรื่อง Algorithms ที่เจอได้บ่อยมากทั้งในการเขียนโปรแกรมและการแก้ปัญหาในชีวิตประจำวัน โพสต์นี้เลยมาอธิบายที่มาคร่าวๆของทฤษฎีกราฟกัน

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

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

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

ตัวอย่างแผนภูมิเส้นที่ใช้ในการแสดงผลข้อมูลต่อเนื่อง รูปแผนภูมิเส้น

ตัวนี้เรียกว่าแผนภูมิเส้น ไม่เกี่ยวกัน (พูดเรื่องนี้ทีไรโดนโยงไปหาแผนภูมิตลอด 😅)

ที่มาที่ไปของกราฟ

จริงๆแล้วด้วยความว่ากราฟ เป็นแค่คำย่อสั้นๆจากคำว่าทฤษฎีกราฟ ซึ่งมันเป็นแขนงนึงของวิชาเลข ที่มีความคาบเกี่ยวกันกับวิชาวิทยาการคอมพิวเตอร์

คือตอนแรกเลย วิชาเลขจะแทนหลายๆอย่างด้วยสมการ และสัญลักษณ์ (ซึ่งถ้าเราสังเกตดีๆ หลายๆแขนงของวิชาเลขมันก็ยังเป็นแบบนั้นอยู่อ่ะนะ) แต่พอเจอเรื่องความสัมพันธ์ระหว่างของหลายๆอย่าง จะเขียนเป็นสัญลักษณ์มันก็ยากละ

ที่มาของกราฟมันเกิดจากปัญหาเรื่อง Seven Bridges of Königsberg หรือ สะพานทั้งเจ็ดแห่งเมืองเคอนิชส์แบร์ค หลักๆของตัวปัญหานี้คือมีแผนที่ของเมือง Königsberg มาให้ที่ตัวเมืองนี้แบ่งได้เป็นพื้นดินอยู่ 4 ส่วน และพื้นดินเหล่านี้มีสะพานเชื่อมถึงกันอยู่ ตามรูป

เมือง Königsberg เป็นเกาะที่มีดินแดน 3 ฝั่งโดยที่มีสะพานอยู่ทั้งหมด 7 สะพานเชื่อมเมืองและเกาะเหล่านี้เข้าด้วยกัน เกาะที่อยู่ตรงกลางมีสะพาน 5 สะพาน 2 ใน 5 เชื่อมดินแดนด้านบน อีก 2 เชื่อมดินแดนข้างล่าง อีก 1 เชื่อมดินแทนที่อยู่ฝั่งขวา หลังจากนั้นดินแดนที่ฝั่งขวามีสะพานเชื่อมเข้ากับดินแดนด้านบนและด้านล่างอย่างละสะพาน เมือง Königsberg ที่วาดใหม่

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

ซึ่งคนที่พยายามแก้ปัญหานี้ก็รู้แหละว่ามันทำไม่ได้ แต่ประเด็นคือก็พิสูจน์ไม่ได้เหมือนกันว่าทำไมมันทำไม่ได้ (ด้วยสมการ และสัญลักษณ์ที่มีอยู่ตอนนั้น)

นักคณิตศาสตร์ Leonhard Euler ที่พยายามพิสูจน์เรื่องนี้ออก เลือกที่จะวาดสัญลักษณ์นามธรรมตัวใหม่ขึ้นมาเรียกว่า โหนด (Node/Vertex) และ เส้นเชื่อม (Edge) เพื่อมาแทนเมือง และสะพาน ซึ่งกลายมาเป็นรากฐานของทฤษฎีกราฟอ่ะนะ

เมือง Königsberg เป็นเกาะที่มีดินแดน 3 ฝั่งโดยที่มีสะพานอยู่ทั้งหมด 7 สะพานเชื่อมเมืองและเกาะเหล่านี้เข้าด้วยกัน เกาะที่อยู่ตรงกลางมีสะพาน 5 สะพาน 2 ใน 5 เชื่อมดินแดนด้านบน อีก 2 เชื่อมดินแดนข้างล่าง อีก 1 เชื่อมดินแทนที่อยู่ฝั่งขวา หลังจากนั้นดินแดนที่ฝั่งขวามีสะพานเชื่อมเข้ากับดินแดนด้านบนและด้านล่างอย่างละสะพาน ในรูปนี้เมืองถูกวาดใหม่เป็นวงกลมเล็กๆที่มีเลขกำกับแทน และสะพานถูกวาดใหม่เป็นเส้นเชื่อมระหว่างวงกลม แปลงเมือง Königsberg เป็นกราฟ

หลังจากวาดเป็นกราฟ ปัญหานี้ก็ได้ชื่อว่า Eulerian trail แทน และพิสูจน์ออกมาแล้วว่า “ต้องมี 0 หรือ 2 โหนดที่มี degree เป็นเลขคี่”

เมือง Königsberg เป็นเกาะที่มีดินแดน 3 ฝั่งโดยที่มีสะพานอยู่ทั้งหมด 7 สะพานเชื่อมเมืองและเกาะเหล่านี้เข้าด้วยกัน เกาะที่อยู่ตรงกลางมีสะพาน 5 สะพาน 2 ใน 5 เชื่อมดินแดนด้านบน อีก 2 เชื่อมดินแดนข้างล่าง อีก 1 เชื่อมดินแทนที่อยู่ฝั่งขวา หลังจากนั้นดินแดนที่ฝั่งขวามีสะพานเชื่อมเข้ากับดินแดนด้านบนและด้านล่างอย่างละสะพาน เมืองด้านบนถูกระบายมีเทาไว้เพื่อบอกให้เห็นว่ากำลังคุยถึงเมืองนี้อยู่ และเมืองนี้มีสะพาน 3 อัน เมือง Königsberg ในรูปกราฟ ที่ highlight เมืองบนว่ามี deg 3

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

แล้วรู้ไปทำไม

ถ้าเรามองดีๆแล้ว เกือบทุกอย่างที่อยู่รอบตัวเรามันโมเดลเป็นกราฟได้หมดเลย แล้วมันก็เอาไปใช้ได้เยอะมากเหมือนกัน

ถ้าเอาตัวอย่างที่ชัดเจนหน่อยก็พวกแผนที่ หรือแผนที่รถไฟฟ้า

แผนที่รถไฟฟ้าในกรุงเทพโดยขยายออกจากสถานีสยาม ไปทางเส้น BTS สายสีเขียวและเขียวเข้ม รวมถึง ARL ตรงสถานีพญาไท แผนที่รถไฟฟ้าในกรุงเทพ (แบบย่อ)

ที่เราสามารถแทนสถานีด้วย โหนด และสายรถไฟระหว่างสถานีด้วยเส้นเชื่อมก็ได้

หรือจะดูพวกการแข่งขัน tournament แบบแพ้คัดออกเหมือนอย่างของ Genwit ก็สามารถเอามมามองเป็นกราฟได้เหมือนกัน

แม้กระทั่งการเล่นเกมง่ายๆอย่าง XO ก็เอามาเขียนเป็นทฤษฎีกราฟได้นะ

กระดาน XO เปล่าๆที่ มีเส้นเชื่อมไปหา กระดานแบบอื่นๆที่มีการวาง X ลงไปในช่องต่างๆ State Space Graph ของการเล่น XO

ซึ่งแบบนี้ก็จะใกล้เคียงกับที่เคยคุยเรื่อง เกม 24 ก่อนหน้านี้เหมือนกัน

กราฟลักษณะนี้จะเรียกว่า State-Space Graph ซึ่งเป็นกราฟที่เชื่อมความสัมพันธ์ระหว่างสถานะแต่ละสถานะที่สามารถเกิดขึ้นได้ในบริบทนั้นๆ

อ่านเกี่ยวกับเกม 24 และ State Space Graph ต่อได้ที่

เกม 24 กับ วิทยาการคอมพิวเตอร์

พูดถึงบล๊อกก่อนหน้านี้ อันอื่นก็มีเหมือนกัน เช่น

เรื่องการระบายสีแผนที่ ที่สามารถเอามาเทียบกับการระบายสีบนกราฟได้:

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

หรือการทำ Syntax Highlight ที่สามารถใช้ Graph มาอธิบายความเชื่อมโยงระหว่างข้อมูลแต่ละส่วน

Code Editor ทำ Syntax highlight ยังไง

เอาจริงๆแม้แต่การเขียน Dynamic Programming ก็ยังเป็นกราฟเลย

Dynamic Programming คืออะไร? (Part 1)

แต่อันนั้นไว้เป็น Topic หลังจากนี้แล้วกัน ไว้คราวหน้าจะมาอธิบายเพิ่มว่ากราฟมันมีลักษณะไหนได้บ้างนะฮะ

ลิงก์ที่มา

หนังสือ Discrete Math ที่ค่อนข้างแนะนำ (ไม่ได้ Affiliate) Origins and Development of Graph Theory prior to 20th Century
0

บทความอื่นๆ