มีแนวคิดสำหรับอัลกอริทึมที่คำนวณฟังก์ชันโดยค้นหาอัลกอริทึมอื่นก่อนหรือไม่?


14

ถ้าฉันเข้าใจอย่างถูกต้องอัลกอริทึมที่คำนวณค่าของฟังก์ชันมีความซับซ้อนในการคำนวณO ( g ( n ) )ถ้ามีค่าต่อไปนี้: เมื่อเราคำนวณfถึงความแม่นยำδต้องใช้ลำดับของg ( n )ขั้นตอนfO(g(n))fδg(n)

อย่างไรก็ตามถ้าเรามีอัลกอริทึมที่แรก "พบอัลกอริทึมที่มีประสิทธิภาพมากขึ้นในการคำนวณ " แล้วคำนวณf ?ff

กล่าวอีกนัยหนึ่งถ้าเรามีอัลกอริทึมที่ทำสิ่งต่อไปนี้:A

  1. ค้นหาอัลกอริทึมที่มีประสิทธิภาพสำหรับการคำนวณฉBf

  2. ใช้เพื่อคำนวณฉBf

ในกรณีนี้เราไม่สามารถพูดถึงเวลาในการคำนวณได้อีกต่อไปตัวอย่างเช่นเพราะมันขึ้นอยู่กับว่าอัลกอริทึมAได้ค้นพบอัลกอริทึมBแล้วหรือไม่ กล่าวอีกนัยหนึ่งเวลาคำนวณที่ต้องใช้ในการคำนวณf ( 5 )ถ้า5คือจำนวนที่คำนวณครั้งแรกมีค่ามากกว่าเวลาคำนวณที่ต้องใช้ในการคำนวณf ( 5 )หลังจากคำนวณf ( 3 )แล้วf(5)ABf(5)5f(5)f(3)

คำถามของฉันคือมีแนวคิด / ทฤษฎีเกี่ยวกับอัลกอริธึมชนิดนี้ก่อนที่จะค้นหาอัลกอริธึมอื่นก่อนคำนวณฟังก์ชันหรือไม่? โดยเฉพาะฉันสงสัยเกี่ยวกับการวิเคราะห์ความซับซ้อนของการคำนวณของอัลกอริทึมดังกล่าว


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

ลองดูitu.dk/people/sestoft/pebookมันเกี่ยวข้องกัน
นาธานริงโก้

คำตอบ:


18

f(n)O(f(n))

ในขณะที่อัลกอริทึมของเลวินนั้นไม่สามารถใช้งานได้ (เนื่องจากค่าคงที่จำนวนมากที่เกี่ยวข้อง) มันน่าสนใจมากในทางทฤษฎี ดูบทความ Scholarpediaสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาทั่วไป


10

สมมติว่าเรามีฟังก์ชั่นfซึ่งจะมีการโต้แย้งxของประเภทAและเอาท์พุทฟังก์ชั่นอื่นซึ่งจะมีข้อโต้แย้งyจากประเภทนี้และส่งกลับผลมาจากประเภทB Cในคำพูดของคุณfจะเกิดการโต้แย้งxและส่งกลับเป็น "ขั้นตอนวิธีการ" ซึ่งจะนำปัจจัยการผลิตชนิดและผลผลประเภทBC

ฟังก์ชั่นfมีประเภท

A → (B → C)

อันที่จริงก็จะใช้เวลาและผลตอบแทนการทำงานของประเภทx : A B → Cแต่ดังกล่าวfเทียบเท่ากับฟังก์ชั่นg : A × B → Cซึ่งจะใช้เวลาทั้งสอง xและyในครั้งเดียวและช่วยให้คุณมีผลสุดท้าย อันที่จริงมีมอร์ฟิซึ่มส์ระหว่างประเภท

A → (B → C)

และ

A × B → C

เพราะเราสามารถกำหนดgในแง่ของการfเป็น

g(x, y) := f(x)(y)

และเราสามารถกำหนดfในแง่ของการgเป็น

f(x) := (y ↦ g(x,y))

การทำงานของการส่งผ่านจากgไปยังfเรียกว่าโปรแกรมการทำงานแบบcurryingและโปรแกรมเมอร์ใช้งานได้ตลอดเวลา ในทางทฤษฎีการคำนวณความคิดของการป้อนข้อมูลและหนึ่ง outputing ฟังก์ชั่น (อัลกอริทึม) จะ emboddied ในทฤษฎีบท SMN

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


1
+1 สำหรับประโยคสุดท้าย พูดได้ดี.
John Coleman

f(5)c+ccf(5)f(5)c1+c2c1c2c1>c2

@ Programmer2134 การเพิ่มประสิทธิภาพคอมไพเลอร์จะเป็นแนวคิดที่คุณสนใจหรือไม่? ฉันไม่แน่ใจเกี่ยวกับทฤษฎีที่อยู่เบื้องหลังสิ่งนี้ (โดยเฉพาะอย่างยิ่งการโต้ตอบกับทฤษฎีความซับซ้อน) แต่นี่อาจเป็นตัวอย่างที่เป็นไปได้
Mark

buzzword ที่จะค้นหาคือ "การประเมินบางส่วน"
Andrej Bauer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.