สรุป : อัลกอริทึมเป็นส่วนที่สร้างสรรค์ของการพิสูจน์เชิงสร้างสรรค์ว่าปัญหาที่กำหนดมีวิธีแก้ปัญหา แรงจูงใจสำหรับคำจำกัดความนี้คือมอร์ฟิซึ่มส์ Curry-Howard ระหว่างโปรแกรมและการพิสูจน์โดยพิจารณาว่าโปรแกรมมีความสนใจเฉพาะเมื่อมันแก้ปัญหาได้ แต่พิสูจน์ได้เช่นนั้น คำจำกัดความนี้อนุญาตให้มีความเป็นนามธรรมมากขึ้นและเปิดประตูบางส่วนเกี่ยวกับประเภทของโดเมนที่อาจเกี่ยวข้องตัวอย่างเช่นเกี่ยวกับคุณสมบัติความประณีต
การเตือน ฉันกำลังพยายามหาวิธีที่เป็นทางการที่เหมาะสมในการตอบคำถาม ฉันคิดว่ามันจำเป็น แต่ดูเหมือนว่าไม่มีผู้ใช้คนใดที่ตอบกลับมาแล้ว (รวมอยู่ด้วยตัวเองและบางคนไม่ชัดเจนเกี่ยวกับเรื่องนี้ในโพสต์อื่น ๆ ) มีพื้นหลังที่เหมาะสมในการพัฒนาประเด็นที่เกี่ยวข้อง คณิตศาสตร์เชิงสร้างสรรค์ทฤษฎีการพิสูจน์ทฤษฎีการพิมพ์และผลลัพธ์เช่นCurry-Howard isomorphismระหว่างการพิสูจน์และโปรแกรม ฉันกำลังทำอย่างดีที่สุดที่นี่พร้อมด้วยเกร็ดความรู้ทุกอย่างที่ฉันทำ (เชื่อ) และฉันก็แค่ตระหนักถึงข้อ จำกัด ของคำตอบนี้เท่านั้น ฉันแค่หวังที่จะให้คำแนะนำในสิ่งที่ฉันคิดว่าคำตอบควรมีลักษณะ หากคุณเห็นจุดใด ๆ ที่ผิดอย่างเป็นทางการชัดเจน (โปรดระบุ) โปรดแจ้งให้เราทราบในตอนนี้หรือส่งอีเมล
การระบุปัญหาบางอย่าง
วิธีมาตรฐานในการพิจารณาอัลกอริทึมคือการระบุว่าอัลกอริทึมเป็นโปรแกรมที่ระบุอย่างไม่มีขอบเขตสำหรับอุปกรณ์คำนวณบางตัวรวมถึงที่ไม่มีข้อ จำกัด ในหน่วยความจำ ค่า langage อาจเป็นภาษาคอมพิวเตอร์ของเครื่อง ที่จริงแล้วก็เพียงพอที่จะพิจารณาโปรแกรมทั้งหมดสำหรับอุปกรณ์คอมพิวเตอร์ทัวริงที่สมบูรณ์ (ซึ่งบ่งบอกว่าไม่มีข้อ จำกัด ด้านหน่วยความจำ) มันอาจจะไม่ให้คุณนำเสนออัลกอริทึมทั้งหมดในแง่ที่ว่าอัลกอริทึมจะต้องแสดงในรูปแบบที่ขึ้นอยู่กับรายละเอียดในบริบทการตีความแม้ในทางทฤษฎีในขณะที่ทุกอย่างถูกกำหนดขึ้นอยู่กับการเข้ารหัส แต่เนื่องจากมันจะคำนวณทั้งหมดที่ต้องคำนวณมันจึงรวม algoritms ทั้งหมดจนถึงการเข้ารหัส
π
πอาจเป็นไปได้ในแง่คณิตศาสตร์เกือบทั้งหมด แต่นั่นจะต้องมีความแม่นยำมากขึ้นในคำจำกัดความ
ดังนั้นคำถามที่แท้จริงคือการรู้ว่าอัลกอริทึมที่มีความหมายคืออะไร คำตอบก็คืออัลกอริธึมที่มีความหมายคือสิ่งที่แก้ปัญหาคำนวณขั้นตอนการแก้ปัญหาทีละขั้นตอนกับปัญหานั้น อัลกอริทึมน่าสนใจถ้ามันเกี่ยวข้องกับปัญหาที่แก้
เมื่อได้รับปัญหาอย่างเป็นทางการเราจะหาอัลกอริทึมที่แก้ปัญหาได้อย่างไร ไม่ว่าจะโดยชัดแจ้งหรือโดยปริยายอัลกอริทึมเกี่ยวข้องกับความคิดที่ว่ามีวิธีแก้ไขปัญหาซึ่งสามารถพิสูจน์ได้ว่าถูกต้อง ไม่ว่าเทคนิคการพิสูจน์ของเรานั้นแม่นยำหรือไม่ก็เป็นอีกเรื่องหนึ่ง แต่อย่างน้อยเราก็พยายามโน้มน้าวตัวเราเอง หากคุณ จำกัด ตัวเองกับคณิตศาสตร์เชิงสร้างสรรค์ซึ่งจริงๆแล้วคือสิ่งที่เราต้องทำ (และเป็นข้อ จำกัด เชิงประจักษ์ที่ยอมรับได้สำหรับคณิตศาสตร์ส่วนใหญ่) วิธีการพิสูจน์การมีอยู่ของสารละลายคือการทำตามขั้นตอนการพิสูจน์ที่จริงแล้วแสดงโครงสร้าง ที่แสดงถึงวิธีแก้ปัญหารวมถึงขั้นตอนอื่น ๆ ที่อาจทำให้เกิดความถูกต้อง
โปรแกรมเมอร์ทุกคนคิดว่าสิ่งที่ชอบ: ถ้าฉันคุ้นเคยกับข้อมูลในดังกล่าวและวิธีการดังกล่าวแล้วฉันจะได้รับเครื่องมือนี้ซึ่งมีเพียงคุณสมบัติที่ถูกต้องเพราะทฤษฎีบทงาและทำงานนี้เปลี่ยนแปลง foo รักษาผมได้คำตอบที่ต้องการ แต่ข้อพิสูจน์มักจะไม่เป็นทางการและเราไม่ได้ทำรายละเอียดทั้งหมดซึ่งอธิบายว่าทำไมดาวเทียมพยายามที่จะโคจรรอบดาวอังคารใต้ดิน (เหนือสิ่งอื่นใด) เราให้เหตุผลมากมาย แต่จริง ๆ แล้วเราเก็บเฉพาะส่วนที่สร้างสรรค์ที่สร้างวิธีแก้ปัญหาและเราอธิบายในภาษาคอมพิวเตอร์เพื่อเป็นอัลกอริทึมที่แก้ปัญหา
อัลกอริทึมที่น่าสนใจ (หรือโปรแกรม)
ทั้งหมดนี้คือการแนะนำแนวคิดต่อไปนี้ซึ่งเป็นเป้าหมายของการวิจัยในปัจจุบัน (ซึ่งฉันไม่ใช่ผู้เชี่ยวชาญ) แนวคิดของ " อัลกอริธึมที่น่าสนใจ " ที่ใช้ที่นี่คือของฉันซึ่งได้รับการแนะนำในฐานะผู้ถือตำแหน่งที่ไม่เป็นทางการสำหรับคำจำกัดความที่แม่นยำยิ่งขึ้น
อัลกอริทึมที่น่าสนใจคือส่วนหนึ่งของการสร้างสรรค์หลักฐานที่สร้างสรรค์ที่ได้รับปัญหามีทางออก นั่นหมายความว่าการพิสูจน์จะต้องแสดงวิธีการแก้ปัญหามากกว่าเพียงแค่พิสูจน์การมีอยู่ของมันตัวอย่างเช่นโดยความขัดแย้ง สำหรับรายละเอียดเพิ่มเติมโปรดดูที่Intuitionistic LogicและConstructivismในวิชาคณิตศาสตร์
แน่นอนว่านี่เป็นคำจำกัดความที่เข้มงวดมากซึ่งพิจารณาเฉพาะสิ่งที่ฉันเรียกว่าอัลกอริทึมที่น่าสนใจ ดังนั้นมันจึงไม่สนใจพวกเขาเกือบทั้งหมด แต่ทำตามตำราของอัลกอริทึมทั้งหมด พวกเขาพยายามสอนสิ่งที่น่าสนใจเพียงบางส่วนเท่านั้น
เมื่อระบุพารามิเตอร์ทั้งหมดของปัญหา (ข้อมูลอินพุต) จะแจ้งให้คุณทราบถึงวิธีรับผลลัพธ์ทีละขั้นตอนที่ระบุ ตัวอย่างทั่วไปคือความละเอียดของสมการ ( อัลกอริธึมชื่อนั้นได้มาจากชื่อของนักคณิตศาสตร์ชาวเปอร์เซียMuḥammad ibn M alsā al-Khwārizm who ซึ่งศึกษาความละเอียดของสมการบางส่วน) ส่วนต่าง ๆ ของการพิสูจน์ถูกใช้เพื่อพิสูจน์ว่าค่าบางอย่างที่คำนวณในอัลกอริทึมมีคุณสมบัติบางอย่าง แต่ส่วนเหล่านี้ไม่จำเป็นต้องถูกเก็บไว้ในอัลกอริทึมเอง
แน่นอนว่าสิ่งนี้จะต้องเกิดขึ้นภายในกรอบทางตรรกะที่เป็นทางการซึ่งกำหนดว่าอะไรคือข้อมูลที่คำนวณด้วยขั้นตอนการคำนวณเบื้องต้นที่ได้รับอนุญาตคืออะไรและอะไรคือสัจพจน์ที่ใช้
กลับไปที่ตัวอย่างปัจจัยของคุณมันอาจถูกตีความว่าเป็นอัลกอริทึมแม้ว่าจะเป็นเรื่องเล็กน้อย ฟังก์ชั่นแฟกทอเรียลปกติสอดคล้องกับข้อพิสูจน์ที่ได้รับกรอบคณิตศาสตร์และได้รับจำนวนเต็ม n มีจำนวนที่เป็นผลคูณของจำนวนเต็ม n ตัวแรก นี่ตรงไปตรงมาเหมือนการคำนวณแบบแฟคทอเรียล มันอาจซับซ้อนกว่าสำหรับฟังก์ชั่นอื่น ๆ
ทีนี้ถ้าคุณตัดสินใจที่จะจัดตารางแฟกทอเรียลสมมติว่าคุณสามารถทำได้ซึ่งไม่เป็นความจริงสำหรับจำนวนเต็มทั้งหมด (แต่อาจเป็นจริงสำหรับโดเมนที่มีค่า จำกัด บางอย่าง) สิ่งที่คุณกำลังทำคือรวมอยู่ในหลักการของการดำรงอยู่ของแฟคทอเรียล สัจพจน์ใหม่นั้นมีค่าสำหรับจำนวนเต็มแต่ละค่าดังนั้นคุณไม่จำเป็นต้องพิสูจน์อีกต่อไป
แต่ระบบสัจพจน์ควรจะ จำกัด (หรือกำหนดไว้อย่างน้อยที่สุด) และมันมีค่าอนันต์ของแฟคทอเรียลเท่ากับหนึ่งต่อจำนวนเต็ม ดังนั้นคุณจึงมีปัญหากับระบบ จำกัด ของสัจพจน์หากคุณนิยามฟังก์ชั่นอนันต์ขึ้นมาเช่นนิยามไว้ในโดเมนอนันต์ นั่นแปลว่าคุณไม่สามารถนำไปใช้กับการค้นหาตารางสำหรับจำนวนเต็มทั้งหมดได้ นั่นจะทำให้ความต้องการทางการเงินของอัลกอรึทึมปกติ (แต่มันเข้มงวดพอ ๆ กับที่นำเสนอบ่อยไหม?)
คุณสามารถตัดสินใจที่จะมีเครื่องกำเนิดสัจพจน์ที่กำหนดไว้อย่างละเอียดเพื่อจัดการกับทุกกรณี จำนวนนี้จะมากหรือน้อยลงเพื่อรวมโปรแกรมแฟกทอเรียลมาตรฐานในอัลกอริทึมของคุณเพื่อเริ่มต้นอาร์เรย์ตามต้องการ ที่เรียกว่าmemoizationโดยโปรแกรมเมอร์ นี่คือที่ใกล้เคียงที่สุดที่คุณจะได้รับเทียบเท่าตารางที่คำนวณล่วงหน้า สามารถเข้าใจได้ว่ามีตารางที่คำนวณล่วงหน้าแล้วยกเว้นความจริงที่ว่าตารางนั้นถูกสร้างขึ้นจริงในโหมดการประเมินผลที่ขี้เกียจเมื่อใดก็ตามที่จำเป็น การสนทนานี้อาจต้องการการดูแลอย่างเป็นทางการมากกว่านี้เล็กน้อย
คุณสามารถกำหนดการปฏิบัติการดั้งเดิมตามที่คุณต้องการ (ภายในความสอดคล้องกับระบบที่เป็นทางการของคุณ) และกำหนดให้กับสิ่งที่คุณต้องเสียค่าใช้จ่ายเมื่อใช้ในอัลกอริทึมเพื่อทำการวิเคราะห์ความซับซ้อนหรือประสิทธิภาพ แต่ถ้าระบบคอนกรีตที่ใช้อัลกอริทึมของคุณ (คอมพิวเตอร์หรือสมอง) ไม่สามารถปฏิบัติตามข้อกำหนดต้นทุนเหล่านี้ได้การวิเคราะห์ของคุณอาจน่าสนใจ แต่ไม่คุ้มค่าสำหรับการใช้งานจริงในโลกแห่งความเป็นจริง
21000
โปรแกรมอะไรที่น่าสนใจ
การสนทนานี้ควรเชื่อมโยงอย่างเหมาะสมกับผลลัพธ์เช่น
Curry-Howard isomorphismระหว่างโปรแกรมและการพิสูจน์ หากโปรแกรมใด ๆ เป็นหลักฐานของบางสิ่งบางอย่างโปรแกรมใด ๆ อาจถูกตีความว่าเป็นโปรแกรมที่น่าสนใจในแง่ของคำนิยามข้างต้น
อย่างไรก็ตามเพื่อความเข้าใจของฉัน (จำกัด ), มอร์ฟิซึ่มส์นี้ จำกัด เฉพาะโปรแกรมที่สามารถพิมพ์ได้ดีในระบบการพิมพ์ที่เหมาะสมซึ่งประเภทนั้นสอดคล้องกับข้อเสนอของทฤษฎีสัจพจน์ ดังนั้นโปรแกรมทั้งหมดจึงไม่สามารถถือว่าเป็นโปรแกรมที่น่าสนใจ ฉันเดาว่ามันเป็นในแง่ที่ว่าอัลกอริทึมควรจะแก้ปัญหา
สิ่งนี้อาจยกเว้นโปรแกรม "ที่สร้างแบบสุ่ม" ส่วนใหญ่
นอกจากนี้ยังเป็นคำนิยามที่ค่อนข้างเปิดกว้างว่าอะไรคือ "อัลกอริธึมที่น่าสนใจ" โปรแกรมใด ๆ ก็ตามที่สามารถมองเห็นได้ว่าน่าสนใจนั้นเป็นสิ่งที่แน่นอนเนื่องจากมีระบบการระบุที่ทำให้มันน่าสนใจ แต่โปรแกรมที่ไม่สามารถพิมพ์ได้จนถึงตอนนี้สามารถพิมพ์ได้ด้วยระบบพิมพ์ที่ทันสมัยกว่าและกลายเป็นที่น่าสนใจ แม่นยำยิ่งขึ้นมันน่าสนใจอยู่เสมอ แต่หากขาดความรู้เกี่ยวกับระบบพิมพ์ที่เหมาะสมเราไม่สามารถรู้ได้
แต่ก็เป็นที่รู้จักกันว่าโปรแกรมไม่ทั้งหมดจะ typeable เพราะมันเป็นที่รู้จักกันว่าบางแสดงออกแลมบ์ดาเช่นการดำเนินการCombinator Y , ไม่สามารถพิมพ์ลงในระบบประเภทเสียง
มุมมองนี้ใช้กับพิธีการการเขียนโปรแกรมที่สามารถเชื่อมโยงโดยตรงกับระบบพิสูจน์เชิงประจักษ์ ฉันไม่รู้ว่ามันจะสามารถขยายไปยังการคำนวณในระดับต่ำเช่นเครื่องทัวริงได้อย่างไร อย่างไรก็ตามเนื่องจากอัลกอริทึมและการคำนวณมักจะเป็นเกมของการเข้ารหัสของปัญหาและการแก้ปัญหา (คิดว่าเลขคณิตเข้ารหัสในแลมบ์ดาแคลคูลัส ) เราสามารถพิจารณาว่าการคำนวณที่กำหนดอย่างเป็นทางการใด ๆ ที่สามารถแสดงเป็นการเข้ารหัสของอัลกอริทึม การเข้ารหัสดังกล่าวอาจใช้เพียงส่วนเล็ก ๆ ของสิ่งที่สามารถแสดงออกในรูปแบบระดับต่ำเช่นเครื่องทัวริง
สิ่งหนึ่งที่น่าสนใจของวิธีการนี้คือมันให้ความคิดเกี่ยวกับอัลกอริทึมที่เป็นนามธรรมและเป็นอิสระจากปัญหาการเข้ารหัสที่เกิดขึ้นจริงของ "ความเป็นตัวแทนทางกายภาพ" ของโดเมนการคำนวณ ยกตัวอย่างเช่นเราสามารถพิจารณาโดเมนที่มีออบเจ็กต์ไม่สิ้นสุดตราบเท่าที่มีวิธีการใช้เสียงที่คำนวณได้