ทำไมฟังก์ชั่นนี้จึงคำนวณได้


10

ตำราของฉันบอกว่า: "เรากำหนดฟังก์ชันดังนี้:และ . โปรดทราบว่าเมื่อได้รับเราสามารถหาได้ง่ายในเวลาที่หมายเลขที่ถูกคั่นระหว่างและ "f:NNf(1)=2f(i+1)=2f(i)1.2nO(n1.5)inf(i)f(i+1)

ฉันจะโน้มน้าวตัวเองว่าจริง ๆ แล้วเราสามารถหาได้อย่างง่ายดายในเวลา ? ในฐานะที่เป็นถูกกำหนดซ้ำผมคิดว่าเราต้องคำนวณจนกว่าn เพื่อที่จะหาเวลาที่การคำนวณเหล่านี้ใช้ฉันคิดว่าเราต้องหาขอบเขตบนที่เหมาะสมสำหรับขึ้นอยู่กับและเราต้องหาขอบเขตบนของเวลาดำเนินการของฟังก์ชัน1.2}} ในท้ายที่สุดเราหวังว่าจะสามารถแสดงข้อเสนอที่ยกมา น่าเสียดายที่ฉันไม่เห็นสิ่งใดเลยiO(n1.5)ff(1),f(2),f(3)f(j)f(j)ninx2x1.2

ฉันลืมที่จะพูดถึง: โปรดทราบว่าเราอยู่ในบริบท nondeterministic ดังนั้นจึงอ้างว่าสามารถคำนวณได้ในโดยเครื่องจักรทัวริง nondeterministicfO(n1.5)


เนื่องจากมีบางคนที่อ่านคำถามนี้แล้วบางคนพบว่ามันมีประโยชน์และน่าสนใจเช่นกัน แต่ไม่มีใครตอบฉันต้องการให้ข้อมูลเพิ่มเติมเกี่ยวกับบริบท: การอ้างสิทธิ์ที่อ้างถึงเป็นส่วนหนึ่งของการพิสูจน์ ทฤษฎีลำดับชั้นของเวลา nondeterministic หลักฐาน (พร้อมสิทธิ) สามารถพบได้เช่นในหนังสือโดย Arora และ Barakแต่ฉันได้พบแหล่งข้อมูลอื่น ๆ บนเว็บด้วยซึ่งนำเสนอหลักฐานเดียวกัน แต่ละคนเรียกร้องค่าสินไหมทดแทนง่ายหรือไม่สำคัญและไม่ได้อธิบายรายละเอียดเกี่ยวกับวิธีหาในเวลา ดังนั้นทั้งแหล่งข้อมูลเหล่านี้เพิ่งคัดลอกมาจาก Arora และ Barak หรือการอ้างสิทธิ์ในความเป็นจริงก็ไม่ยากiO(n1.5)


1
ดูเหมือนว่าการพิสูจน์ทฤษฎีบทของลำดับชั้นเวลาแบบไม่ จำกัด เวลาใน Arora & Barak ใช่ไหม? ถ้าเป็นเช่นนั้นฉันคิดว่าการไม่ยอมแพ้ก็มีบทบาทที่นี่
G. Bach

คุณถูก. ขออภัยที่ฉันควรจะกล่าวถึงบริบท nondeterministic คุณช่วยอธิบายรายละเอียดเพิ่มเติมได้อย่างไรว่าลัทธิ nondeterminism ช่วยเราที่นั่นเพื่อแสดงขอบเขต O (n ^ 1.5) ได้อย่างไร
user1494080

คำตอบ:


4

แสดงโดย |x| ความยาวของตัวเลข xเช่น เข้าสู่ระบบ2x+1 (สำหรับ x>0) การคำนวณ2x ต้องใช้เวลา O(x) ในรูปแบบ RAM และการคำนวณ (ผม+1) จาก (ผม) ใช้เวลา O((ผม)1.2)=O(|(ผม+1)|). ตั้งแต่(ผม) มีการเติบโตเร็วกว่าทางเรขาคณิตเวลาในการคำนวณโดยรวม (ผม+1) คือ O(|(ผม+1)|). ในขณะที่คุณชี้ให้เห็นคุณจะต้องทำเช่นนั้นจนกระทั่ง(ผม+1)nซึ่งหมายความว่า (ผม)<n. ดังนั้นเวลาทำงานทั้งหมดคือO(|(ผม+1)|)=O((ผม)1.2)=O(n1.2).

ในโมเดลเครื่องทัวริงด้วยเทปเดียวการคำนวณ 2x ใช้เวลา O(xเข้าสู่ระบบx)และเวลาการทำงานทั้งหมดคือ O(n1.2เข้าสู่ระบบn)=O(n1.5). อัลกอริทึมสำหรับการคำนวณ2x แทนที่ [x] โดย 1[[x]] (ที่นี่ [x] เป็นตัวแทนไบนารีของ xและ [[x]] เป็นตัวแทนไบนารีที่ใช้ตัวเลขต่างกัน 0',1') จากนั้นเรียกใช้การแปลงซ้ำ ๆ [[x]]0[[x-1]]ซึ่งต้องใช้เวลา O(|x|)=O(เข้าสู่ระบบx).


สมบูรณ์แบบขอบคุณ! อีกหนึ่งคำถาม: เราไม่จำเป็นต้องโต้แย้งว่า | f (i) | เติบโตเร็วกว่าทางเรขาคณิตแทนที่จะเป็น f (i) เติบโตเร็วกว่าทางเรขาคณิต?
user1494080

ตั้งแต่ |(ผม+1)|=(ผม)1.2มันเป็นสิ่งเดียวกัน แต่คุณพูดถูก สิ่งที่เราต้องการจริงๆคือΣJผม|(J)|=O(|(ผม)|).
Yuval Filmus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.