ผ่ากฎ (Admission) อลเวง
posted on 12 Apr 2008 02:15 by ch-a-m-pวันนี้น้องผมไปปรึกษาเรื่องการเลือกคณะที่สถาบันแห่งหนึ่งมา แล้วเอามาปรึกษาผมอีกที ว่าจะเลือกคณะยังไงดี ผมก็ยุไปว่า อันดับ 1 นี่อยากเอาอะไรที่พอเป็นไปได้ก็เอาเลย เสี่ยงซักหน่อยก็ไม่เป็นไร
แต่น้องผมบอกว่า ที่สถาบันบอกว่า (quote กันหลายชั้นจัง) สมมติถ้าเลือกคณะนึงเป็นอันดับ 1 มีโอกาสติด 80% แต่ถ้าเปลี่ยนไปเลือกคณะเดิมเป็นอันดับ 2 โอกาสติดคณะนั้นจะลดลงจาก 80% ไป
.
.
เฮ้ย มันมียังงี้ด้วยเรอะ!
ถ้าเป็นวิธีคิดตามที่เคยเข้าใจ ก็เอาคะแนนแต่ละคนมาเรียงจากสูงไปต่ำ แล้วเริ่มจัดคนเข้าคณะเริ่มจากคนที่ได้คะแนนที่ 1 ก่อน ถ้าคณะที่เลือกอันดับ 1 ไม่เต็ม ก็ได้ไปเลย แต่ถ้าเต็มก็ดูอันดับ 2,3,4 ต่อไป ถ้าเต็มหมดทุกคณะที่เลือกแล้วก็เป็นอันจบกัน
algorithm นี้ดูดีมีเหตุผลสุดๆ แถมยังเขียนโปรแกรมได้ง่ายๆ อีกตะหาก
แต่เดี๋ยว คะแนนมันมีหลายสูตรตามใจคณะ ตามใจมหาลัยนี่หว่า แล้วมันจะเอาคะแนนตัวไหนมาเรียงล่ะ ไม่ว่าจะเลือกคะแนนสูตรไหนมาเรียง คะแนนสูตรอื่นก็จะเสียเปรียบ หรือวิธีนี้ไม่ใช่?
.
.
วิธีที่น้องบอกมา เท่าที่จับความได้ คือ เริ่มจากการจับกลุ่มคนสมัครตามคณะที่เลือกอันดับ 1 คณะเดียวกันไว้รวมกันซะก่อน แล้วแต่ละกลุ่มก็ดูอีกทีว่าจำนวนคนเกินที่กำหนดหรือเปล่า ถ้าไม่เกินก็รับหมด ถ้าเกินก็ดูคะแนนซะแล้วรับตามที่มีที่ว่างอยู่ จากนั้นก็เอาคนที่เหลือมาจับกลุ่มใหม่ตามคณะที่เลือกอันดับ 2 แล้วทำแบบเดิม และแบบเดียวกับอันดับ 3,4 ส่วนพวกที่เหลือตอนสุดท้ายก็เกมโอเวอร์ไป
อืม ก็เป็น algorithm ที่ฟังดูเป็นไปได้อีกวิธีนึง ตัดปัญหาเรื่องสูตรคิดคะแนนหลายสูตรได้เด็ดขาดเลย และประโยคที่บอกว่า เลือกคณะเดิมแต่เปลี่ยนอันดับโอกาสติดจะต่างกันก็จริงไปด้วย
แต่ว่าวิธี ก็จะมีกรณีที่คนที่ได้คะแนนต่ำกว่าสอบติด แต่คนที่ได้คะแนนสูงกว่าสอบไม่ติดในคณะเดียวกันด้วย ถ้าคนที่ได้คะแนนต่ำกว่าเลือกอันดับหนึ่ง แต่คนที่ได้คะแนนสููงกว่าเลือกอันดับสอง
เผื่อใครงง ตัวอย่างเช่น นาย ก ได้คะแนน 3000 คะแนน เลือกคณะ A มหาลัย B เป็นอันดับ 1 แต่นาย ข ได้คะแนน 7000 เลือกคณะอื่นเป็นอันดับ 1 และเลือกคณะ A มหาลัย B เป็นอันดับ 2 แบบนี้ก็มีโอกาสที่นาย A (ซึ่งคะแนนต่างกับ B มากๆ) จะสอบติด แต่ B กลับสอบไม่ติด เพียงเพราะลำดับต่างกัน?
แล้วแบบนี้มันจะใช้ได้จริงๆ เหรอ?
.
.
ถ้าไม่ใช่ แล้วตกลงใช้วิธีไหนกันแน่ ในเว็บรับสมัคร ส่วนของระเบียบการก็ไม่มีบอกเรื่องนี้ (ระเบียบการบนเว็บทำได้ค่อนข้างแย่ bookmark ไม่ถูกต้องเลย)
จะโทรไปถาม call center ก็คู่สายไม่เคยว่างเลย (มีแค่ 15 คู่สาย) แถมถึงโทรติด โอเปอร์เรเตอร์จะรู้เรื่องนี้เหรอ?
หรือว่ากันจริงๆ ผอ.สกอ. จะรู้เรื่องนี้เหรอ? พนักงานใน สกอ. จะรู้เรื่องนี้เหรอ? อาจมีแค่คนที่เขียนโปรแกรมตัดสินผล admission เท่านั้นที่รู้
จะว่าไปแล้วก็อยากเห็น code โปรแกรมตัดสินการเลือกคณะนี่จริงๆ จะได้กระจ่างกันไปเลย
แล้วนี่แสดงว่าทุกคนกำลังเลือกคณะโดยไม่รู้กฎที่แท้จริงเลย นี่ไม่ใช่เกมวัดดวงนะที่เล่นไปก่อนแล้วค่อยมารู้ว่าเฮ้ยตูเข้ารอบแล้ว (เอ๊ะ หรือว่าใช่หว่า?)
แล้วที่ผ่านมา (ถ้านับเฉพาะ admission ก็ 3 ปี) นี่ก็ไม่รู้กฎที่แท้จริงกันมาตลอด เอ๊ะ ตอนผมเลือก ก็ผ่านกฎนี้มานี่หว่า... ทำไมไม่แปลกใจตั้งแต่ตอนนั้น สงสัยเพราะเลื่อนหลายรอบ :D
.
.
edit เพิ่มเติม
คุยกับ lancaster แล้วคิดว่า มีวิธีนึงที่เป็นไปได้ และยุติธรรมพอ แต่เนื้อหาส่วนต่อจากนี้จะเป็นเชิง programming นิดหน่อย (อาจงง)
- จับกลุ่มคนที่เลือกรหัสเดียวกัน (คณะ + มหาวิทยาลัยเดียวกัน) ไว้ด้วยกัน โดยไม่สนใจว่าเลือกลำดับใด
- เลือก x คนแรกในกลุ่มมาพิจารณา (x คือจำนวนที่คณะนั้นรับได้)
- ไล่พิจารณาในแต่ละคนที่ถูกเลือกว่า มีใครไม่ได้เลือกอันดับแรก
- หากพบ ให้กระโดดไปคิดที่คณะข้างบนของคนนั้นก่อน
- ถ้าคณะข้างบนของคนนี้ติด ก็ให้ติดคณะข้างบนนั้นแทน
- ถ้าคณะข้างบนของคนนี้ติด ก็ให้ติดคณะนี้
- หากพบ ให้กระโดดไปคิดที่คณะข้างบนของคนนั้นก่อน
งงมั๊ยครับ ถ้างงก็ช่างมันเถอะ แต่วิธีนี้เป็นวิธีที่ค่อนข้างยุติธรรมอย่างสมบูรณ์ ใช้เวลารันโปรแกรมนานมากๆๆ (recursive บานตะไท) แต่ก็สมเหตุสมผลกับเวลาที่ประกาศคะแนนทุกๆ ปีอยู่แล้ว และก็ทำแค่ปีละครั้งเดียวเท่านั้นด้วย
คำถามเก็บไปคิด (ไม่คิดตอนนี้ ง่วงนอน)
- วิธีนี้จะได้ผลแตกต่างกันหรือเปล่าถ้าโปรแกรมเริ่มคำนวนจากคนละคณะกัน (ไม่น่าต่าง เพราะมีการย้อนกลับขึ้นไปคิดคณะบนตลอด)
- โปรแกรมนี้มี Big-O เท่าไหร่ ถ้าข้อนี้ออกเป็นข้อสอบวิชา Discrete Mathematics คงทำไม่ได้เกือบทั้งภาค :P
- ว่างๆ น่าลองเขียนโปรแกรมนี้เล่นๆ
- และคำถามสำคัญที่สุด ถ้าใช้วิธีนี้จริง ปัญหาที่ถามตั้งแต่ต้น entry (เลือกคณะเดิมเปลี่ยนอันดับโอกาสจะลดลง) จะไม่เกิดขึ้นจริงมั๊ย?
.
.
edit อีกที
หรือจะเป็นวิธีนี้ ง่ายกว่าเยอะเลย เส้นผมบังภูเขาจริงๆ
- จัดกลุ่มและจัดอันดับของทุกคณะไว้ก่อนเลย
- ไล่ดูทีละคน ว่าใครติดเกิน 1 คณะ ให้เหลือชื่อไว้เฉพาะอันดับที่สูงที่สุด คณะอื่นดึงชื่อทิ้ง
- ทำจนครบทุกคนก็จะได้รายชื่อแล้ว ไม่ต้อง recursive ให้วุ่นวาย ค่า Big-O ก็ไม่สูงด้วย
เอ้อ รู้สึกว่าตัวเองโง่ขึ้นมากระทันหัน...
.
ปล. edit ไปๆ มาๆ entry นี้เปลี่ยนจากเรื่อง admission เป็นเรื่อง programming ไปซะแล้ว 55*

)
ตรูผ่านมาได้ไงเนี่ย
#1 By Lancaster on 2008-04-12 02:23