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


10

ตำราของฉันบอกว่า: "เรากำหนดฟังก์ชันดังนี้:และ . โปรดทราบว่าเมื่อได้รับเราสามารถหาได้ง่ายในเวลาที่หมายเลขที่ถูกคั่นระหว่างและ "f:N→Nf(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)≥ninx→2x1.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เช่น ⌊เข้าสู่ระบบ2⁡x⌋+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.