เฉลยชวนคิดคณิตศาสตร์ (2)

เป็นอย่างไรบ้างครับ? คิดนอกกรอบกันได้ไหมครับ? อย่างที่ผมได้เขียนคอมเมนต์ไว้ในโพสต์คำถาม เชื่อว่าคนส่วนใหญ่จะติดอยู่ในกรอบที่ว่า ห้ามคืนค่า 6 นั้นหมายความว่าต้องคืนค่าอื่นกลับมา เช่น 0, -1 แต่ถ้าบอกว่าคำตอบนั้น ไม่คืนค่าใดกลับไปเลยล่ะ! ให้เวลาอีก 5 นาทีครับ ถ้าคิดไม่ออกตามไปอ่านดูเฉลยได้ครับ

กุญแจสำคัญของคำตอบอยู่ที่การหารครับ อย่างที่เคยเรียนกันมาตอนเด็กๆ ว่าเราไม่สามารถหารด้วย 0 ได้ อาจารย์บางท่านอาจจะสอนว่าเมื่อหารด้วย 0 จะได้ ∞ (อินฟินิตี้) แต่ทางเทคนิคแล้วที่ถูกต้องคือ ไม่นิยามครับ (อินฟินิตี้นั้นไม่ใช่ตัวเลข จะนำมาบวกลบคูณหารแบบตัวเลขทั่วไปไม่ได้ เช่น ∞-∞ อาจเป็น 0 หรือ 10 หรือ ∞ ก็ได้) ในคอมพิวเตอร์ก็เช่นกันครับ ถ้าเจอการหารด้วย 0 คอมพิวเตอร์ก็คำนวณไม่ถูกเหมือนกัน ทำได้แค่คืน error กลับมา คำตอบจึงได้ (ในภาษา C)

int f(int x)
{ return x * ( (x-6) / (x-6) ); }

นั่นคือสำหรับ x≠6 จะคืนค่า x(x-6)/(x-6)=x แต่สำหรับ x=6 จะคืน error divide by zero กลับมา

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

1 comment:

  1. ชิ

    งอน

    (งอนตัวเอง)

    แค่นี้เอง

    เฮ่อออออ ถ้าเราคิดนอกกรอบได้ เราก็จะเริ่มฉลาดใกล้ๆคุณพ่อครัวใช่ไหมคะ?

    เอาอีก แต่ขอเป็นเดือนห้าได้มิคะ มีงานต้องส่งเมษา ฮ่ะฮ่ะ

    ReplyDelete