• 17 min

วางจุดบนตารางหมากรุก (Points on Grid)

ถ้าเราอยากจะวางจุดสักสามจุดลงบนตารางให้ห่างเท่าๆกันเป็นระยะ 5 หน่วยจะทำได้ไหมนะ

เป็ดไอคอนของเรื่องเล่าชาวอัลกอ Practical Algorithms
Practical Algorithms: เรื่องเล่าชาวอัลกอ
เพจที่อยากให้คนไทยมีเนื้อหาอัลกอริทึมดีๆ ให้ได้อ่านกัน
เป็ดชาวอัลกอริทึม กำลังยิ้มให้กับกราฟคณิตศาสตร์ที่มีจุดสีเขียวอยู่ 3 จุด

โจทย์

มีจุดทั้งหมด 3 จุด แต่ละจุดจะอยู่บนพิกัดที่ทั้ง x และ y เป็นจำนวนเต็ม

เราให้ระยะห่างคือผลต่างของพิกัด x รวมกับผลต่างของพิกัด y (Manhattan Distance)

เราต้องการเลือกพิกัดให้จุดเหล่านี้ โดยที่ระยะห่างระยะทางคู่จุดทุกคู่ต้องเท่ากับ 5 ถามว่ามีวิธีที่สามารถทำได้มั้ย หากทำได้ให้ระบุวิธี หากทำไม่ได้ให้ระบุเหตุผล


วิเคราะห์โจทย์

จริงๆ แล้ว ไม่ว่ายังไงมันก็ไม่มีทางทำได้แหละ แต่เพราะอะไรล่ะ?

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

บอกก่อนว่า: เราจะพยายามเขียนให้เข้าใจกันได้ง่ายที่สุดโดยที่จะไม่ลง proof ที่ formal มากนักอ่ะนะ แต่ถ้าอยากได้ formal proof ทักมาได้เหมือนกัน ถ้ามีเยอะๆเดี๋ยวจะมาอัพเดทหน้านี้อีกที

1. Proof จากสมการ

ก่อนอื่นเลย เรามากำหนดสัญลักษณ์เพื่อให้เรียกง่ายๆก่อน

โดยเราจะให้

  • di,jd_{i,j} แทนระยะห่างของจุดที่ ii กับจุดที่ jj และ
  • (xi,yix_i,y_i) คือพิกัดของจุดที่ ii

ทีนี้ตัวโจทย์เราใช้ Manhattan Distance คือคิดระยะทางจากผลรวมของผลต่างของพิกัด x กับผลต่างของพิกัด y ซึ่งเขียนเป็นสมการระยะทางของจุด ii ไปจุด jj ได้ว่า

di,j=xixj+yiyjd_{i,j} = |x_i-x_j| + |y_i-y_j|

ซึ่งจากตัวเนื้อหาโจทย์ที่บอกว่าจุดทั้งสามต้องมีระยะห่างเท่ากันที่ 5 หน่วย เราจะเขียนสมการได้ว่า

5=d1,2=x1x2+y1y25=d2,3=x2x3+y2y35=d1,3=x3x1+y3y15 = d_{1,2} = |x_1-x_2| + |y_1-y_2| \\ 5 = d_{2,3} = |x_2-x_3| + |y_2-y_3|\\ 5 = d_{1,3} = |x_3-x_1| + |y_3-y_1|

ทีนี้ถ้าเราลองเอาสมการ d1,2,d2,3,d1,3d_{1,2}, d_{2,3}, d_{1,3} ทั้ง 3 สมการมาบวกกันจะได้ว่า

15=d1,2+d2,3+d1,3=x1x2+y1y2+x2x3+y2y3+x3x1+y3y115 = d_{1,2}+d_{2,3}+d_{1,3} = |x_1-x_2| + |y_1-y_2| + |x_2-x_3| + |y_2-y_3| + \\ |x_3-x_1| + |y_3-y_1|

เราสามารถจัดกลุ่มพจน์ที่มี x ให้อยู่ในกลุ่มเดียวกันและพจน์ที่มี y อยู่อีกกลุ่มนึงได้เป็น

15=(x1x2+x2x3+x3x1)+(y1y2+y2y3+y3y1)15 = (|x_1-x_2|+|x_2-x_3|+|x_3-x_1|) + (|y_1-y_2|+|y_2-y_3|+|y_3-y_1|)

ซึ่งเราจะพิสูจน์ได้ว่าไม่กลุ่ม x ก็กลุ่ม y ต้องมีซักกลุ่มที่มีค่าเป็นจำนวนคี่แล้วอีกกลุ่มต้องเป็นจำนวนคู่ ไม่งั้นมันบวกกันเป็น 1515 ที่เป็นจำนวนคี่ไม่ได้

โอเค… เมื่อกี้เราเคลมว่ามันต้องมีสักกลุ่มเป็นจำนวนคี่ถึงจะทำให้บวกกันได้ 1515 ได้ งั้นลองมาดูค่าของกลุ่ม xx ก่อนละกัน

x1x2+x2x3+x3x1|x_1-x_2|+|x_2-x_3|+|x_3-x_1|

เราจะสมมติเพิ่มให้จุดที่ 1 มีค่า xx มากที่สุด ซึ่งหมายความว่า x1x2x_1 \geq x_2 และ x1x3x_1 \geq x_3

หลังจากสมมติแบบนั้นไปแล้วเราจะได้พจน์ใหม่เป็น

x1x2+x2x3+x1x3=2x1x2x3+x2x3x_1 - x_2 + |x_2 - x_3| + x_1 - x_3 = 2x_1-x_2-x_3+|x_2 - x_3|

ซึ่งสรุปต่อได้ว่า 2x12x_1 ยังไงก็เป็นจำนวนคู่อยู่แล้ว เพราะมีจำนวนคู่คูณอยู่
ทีนี้จะเหลือพจน์ x2x3+x2x3-x_2-x_3+|x_2-x_3| ที่ต้องคิดต่อว่าเป็นเลขคู่หรือเลขคี่

เราก็สามารถคิดทั้งสองกรณีเลยก็ได้

Case 1: x2x3x_2 \leq x_3Case 2: x2>x3x_2 > x_3
พจน์ที่ได้2x2-2x_22x3-2x_3

ทั้งสองเคสได้เหมือนกันว่ามีตัวคูณข้างหน้าของ x2x_2 หรือ x3x_3 เป็น 0 หรือ -2 แล้วแต่ว่าเราจะตั้งให้ x2x_2 หรือ x3x_3 มากกว่ากัน

ซึ่งไม่ว่ายังไงก็มีตัวคูณนำหน้าเป็นจำนวนคู่อยู่แล้ว ก็เลยทำให้เป็นจำนวนคู่ตามไปด้วย ทำให้สรุปได้ว่ากลุ่มของค่า xx ที่เราดูอยู่เนี่ยเป็นจำนวนคู่แน่ๆ

ทีนี้เรารู้ว่าในกลุ่ม x เป็นจำนวนคู่แน่ๆ เราก็สามารถสรุปต่อได้ว่า กลุ่ม y ก็เป็นจำนวนคู่เช่นกัน เพราะมีรูปพจน์ในแบบเดียวกันเป๊ะๆ

ทีนี้กลับมาดูสมการที่เราได้ก่อนหน้านี้

15=(x1x2+x2x3+x3x1)+(y1y2+y2y3+y3y1)15 = (|x_1-x_2|+|x_2-x_3|+|x_3-x_1|) + (|y_1-y_2|+|y_2-y_3|+|y_3-y_1|)

สุดท้ายแล้วเรารู้ว่าทั้งกลุ่ม xx และ yy มีค่าเป็นจำนวนคู่ แปลว่าผลรวมก็ต้องเป็นจำนวนคู่
ซึ่งขัดแย้งกับสมการ d1,2+d2,3+d1,3=15d_{1,2}+d_{2,3}+d_{1,3} = 15 ซึ่งเป็นจำนวนคี่ ทำให้สรุปได้ว่าไม่สามารถเลือกจุดทั้ง 3 จุดได้

2. Proof จากการวาดตาราง

อีกวิธีนึงที่ดูเหมือนจะไม่ต้องทำอะไรยุ่งยากเหมือนวิธีที่แล้ว แต่อาจจะนึก(ฝัน) ยากกว่าคือ เราจะวาดตารางและระบายสี 2 สีบนตารางสลับๆกัน นึกถึงตารางหมากรุกก็ได้

เราจะเปลี่ยนให้แต่ละจุดที่อยู่บนพิกัดจำนวนเต็มมาเป็นช่องในตารางแทน

ตารางหมากรุกสีเขียวสลับกับสีขาวขนาด 7 คูณ 7

ตารางหมากรุกสีเขียวสลับกับสีดำขนาด 7 คูณ 7

โดยจุดตรงกลางเรียกว่าตำแหน่ง (0,0)(0, 0) มีสีเขียวและจุดมุมซ้ายบนเรียกว่าตำแหน่ง (3,3)(-3, -3) เป็นสีเขียวเหมือนกัน
ทีนี้ลองมองรอบๆจุดตรงกลางนิดนึง

3
3
3
3
3
3
0
3
3
3
3
3
3

ตารางหมากรุกเมื่อขยับไป 3 ช่องจากจุดตรงกลาง

ถ้าเราเลือกจุดที่อยู่ตรงกลางของตารางเป็นจุดที่ 1 (สีเขียว)
จะได้ว่าไม่ว่าจะหันไปทิศไหนในระยะทาง 3 ก็จะหยุดที่ช่องสีขาว
ซึ่งถ้าคิดดีๆ ไม่ว่าจะเริ่มคิดจากสีเขียวหรือสีขาว ถ้าขยับไปเป็นระยะคี่ เราจะไปหยุดที่สีตรงข้ามกับสีที่เราเริ่ม

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

1
2

ถ้าเราสมมติให้จุดแรกอยู่ที่ตรงกลาง และอีกจุดอยู่ที่ (3,0)

ทีนี้เราจะต้องเลือกจุดที่ 2 และ 3 ที่ห่างจากจุดแรกไป 3 หน่วย และแน่นอนว่ามันต้องอยู่บนช่องสีขาว แต่ทีนี้ถ้าเราจะวางจุดที่ 2 ไปก่อนบนช่องสีขาวสักช่องนึง เราจะได้ว่าจุดที่ 3 ที่ต้องห่างจากจุดที่ 2 ไป 3 หน่วยก็ต้องอยู่บนช่องสีเขียว

ปัญหาคือจากที่สรุปได้ตอนแรกจากจุดที่ 1 คือ จุดที่ 3 ต้องอยู่บนช่องสีขาว ในขณะที่จุดที่ 2 สรุปได้คือ มันต้องอยู่บนช่องสีเขียว ซึ่งแต่ละช่องในตารางที่วาดไว้เป็นได้สีเดียวคือ แค่สีเขียวไม่ก็สีขาวเท่านั้น สุดท้ายแล้วจึงสรุปได้ว่าวางจุดทั้งหมด 3 จุดไม่ได้นั่นเอง

ทีนี้เราจะต้องเลือกจุดที่ 2 และ 3 ที่ห่างจากจุดแรกไป 3 หน่วย และแน่นอนว่ามันต้องอยู่บนช่องสีดำ แต่ทีนี้ถ้าเราจะวางจุดที่ 2 ไปก่อนบนช่องสีดำสักช่องนึง เราจะได้ว่าจุดที่ 3 ที่ต้องห่างจากจุดที่ 2 ไป 3 หน่วยก็ต้องอยู่บนช่องสีเขียว

ปัญหาคือจากที่สรุปได้ตอนแรกจากจุดที่ 1 คือ จุดที่ 3 ต้องอยู่บนช่องสีดำ ในขณะที่จุดที่ 2 สรุปได้คือ มันต้องอยู่บนช่องสีเขียว ซึ่งแต่ละช่องในตารางที่วาดไว้เป็นได้สีเดียวคือ แค่สีเขียวไม่ก็สีดำเท่านั้น สุดท้ายแล้วจึงสรุปได้ว่าวางจุดทั้งหมด 3 จุดไม่ได้นั่นเอง

สรุป

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

ตัวอย่างโจทย์เพิ่มเติมเรื่อง Parity
0

บทความอื่นๆ