การย่อขนาดโปรแกรม


10

การลดขนาดวงจรเป็นปัญหาเพื่อลดขนาดของวงจรที่กำหนด มีอะไรที่คล้ายกันสำหรับโปรแกรมทั่วไปหรือไม่

โดยเฉพาะคำถามของฉันคือ -

มีอัลกอริทึมที่มีอยู่เพื่อย่อ # คำสั่งสำหรับโปรแกรมที่กำหนดหรือไม่ ฉันรู้ว่ามันเป็นปัญหาที่แก้ไม่ตก แต่ฉันไม่ได้มองหาวิธีแก้ปัญหาที่คืนสิ่งที่ดีที่สุด

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

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


2
คำตอบสำหรับคำถามอื่นของคุณขึ้นอยู่กับคำจำกัดความของคุณ "แคลคูลัส" ความจริงที่ว่า HALT ไม่ได้อยู่ในcoREทำให้คำตอบ "ไม่" สำหรับคำจำกัดความดังกล่าวส่วนใหญ่

ทั้งสองฟิลด์มีความสัมพันธ์กันในอีกแนวทางหนึ่งคือการแปลงโปรแกรมไปเป็นตระกูลของวงจรสำหรับขนาดอินพุตที่แตกต่างกันfn
vzn

คำตอบ:


10

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

อัลกอริทึมนี้เป็นเสียง เพื่อให้เสร็จสมบูรณ์คุณจะต้องพิสูจน์โปรแกรมที่ถูกปฏิเสธทั้งหมดไม่เท่ากับโปรแกรมต้นฉบับ สิ่งนี้มีความเป็นไปได้ในเครื่องจักรรุ่น finitary ตราบใดที่คุณมีขนาดที่ถูกผูกไว้

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

ทศวรรษที่ผ่านมา“ Denali: Superoptimizer ตามเป้าหมาย” โดย Rajeev Joshi, Greg Nelson และ Keith Randallสามารถค้นหาโปรแกรมที่เหมาะสมที่สุดได้ประมาณ 5 คำสั่งเครื่อง ฉันไม่ได้ดูผลลัพธ์ล่าสุด


5
นักเรียนคนหนึ่งของเราที่นี่ที่มหาวิทยาลัย Sussex ใช้ superoptimisation เพื่อย่นความยาวของรูทีน Java core บางตัว (เช่นการเพิ่ม) เขาเผาการคำนวณ Amazon EC2 จำนวนมหาศาลเพื่อทำสิ่งนี้ วิทยานิพนธ์ของเขาเป็นที่นี่ เห็นได้ชัดว่าไม่ใช่แนวทางที่เป็นไปได้สำหรับทุกสิ่ง แต่เป็นโปรแกรมสั้น ๆ
Martin Berger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.