ความซับซ้อนของเวลา 2 ^ sqrt (n)


11

ฉันกำลังแก้ไขคำถามอัลกอริทึมและการวิเคราะห์ของฉันคือมันจะทำงานบน O (2 ^ sqrt (n)) มันใหญ่แค่ไหน? มันเท่ากับ O (2 ^ n) หรือไม่? มันยังเป็นเวลาที่ไม่ใช่พหุนามหรือไม่?


3
โปรดแสดงความคิดเห็นด้วยเหตุผลสำหรับการลงคะแนนคำถาม ขอบคุณ!
Gaara

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

3
เวลาย่อยอธิบายความหมายที่สองตามบทความ Wikipedia (คำเตือน: ฉันไม่ downvote และฉันไม่รู้พอในหัวข้อนี้ที่จะบอกว่าสิ่งนี้ถูกต้องหรือไม่)
rwong

1
ที่ดี! เวลาเอ็กซ์โพเนนเชียล: "เวลาการทำงานของอัลกอริทึมบางอย่างอาจโตเร็วกว่าพหุนามใด ๆ แต่ก็ยังเล็กกว่าเลขยกกำลังอย่างมาก" นี่เป็นการตอบคำถามของฉันและเพิ่มพูนความรู้เกี่ยวกับการวิเคราะห์ Big O ขอบคุณมาก
Gaara

1
มันน้อยกว่า O (2 ^ n) โดยเฉพาะกับคนจำนวนมาก ลองดูตัวอย่างของการมี 10,000 องค์ประกอบ 2 ^ 10000 เป็นตัวเลขที่มีตัวเลขประมาณ 3,000 หลักนั่นคือจำนวนรอบที่ใช้ในการดำเนินการ O (2 ^ n) ด้วย O (2 ^ sqrt (n)) คุณจะได้หมายเลขที่มี 30 หลัก ความแตกต่างมีขนาดใหญ่มากสำหรับจำนวนมากในความโปรดปรานของการแก้ปัญหา sqrt (สำหรับองค์ประกอบ 1 ล้านที่ (จำนวน 300,000 หลัก) * วงจร cpu เทียบกับ (จำนวน 300 หลัก) * วงจร cpu
Andy

คำตอบ:


16

นี่เป็นคำถามที่น่าสนใจ โชคดีที่เมื่อคุณรู้วิธีแก้ปัญหามันก็ไม่ยากโดยเฉพาะ

สำหรับฟังก์ชั่นF : NR +และกรัม : NR +เรามีO ( กรัม ) และถ้าหากจีบลิมn →∞ ( n ) / กรัม ( n ) ∈ R

ฟังก์ชั่นf : NR +มีการเติบโตของพหุนามมากที่สุดหากว่ามีค่าคงที่kNเช่นนั้นที่fO ( nn k ) งาน Let 's นี้ออกมาให้โดยพลการ แต่คงk ∈ N

จีบลิมn →∞ 2 ( n 1/2 ) / n k =
ลิมn →∞ 2 ( n 1/2 ) / n k =
ลิมn →∞อีล็อก (2) n 1/2 / E เข้าสู่ระบบ ( n ) k =
ลิมn →∞อีล็อก (2) n 1/2 - เข้าสู่ระบบ ( n ) k = ∞∉ R

ความเท่าเทียมกันครั้งแรกนั้นเป็นจริงเพราะทั้งผู้เสนอชื่อและตัวหารกำลังทำหน้าที่มั่นคงอย่างต่อเนื่อง ความเสมอภาคที่สองใช้เอกลักษณ์x Y = อีเข้าสู่ระบบ ( x ) Y ขีด จำกัด ไม่แน่นอนเนื่องจากเลขชี้กำลังในนิพจน์สุดท้ายนั้นไม่ได้ถูกล้อมรอบด้านบน โดยไม่ให้หลักฐานที่เป็นทางการสามารถสันนิษฐานได้ว่าn 1/2มีอำนาจเหนือ log ( n ) asymptotically ดังนั้นฟังก์ชั่นดังกล่าวมีปัญหามากกว่าการเติบโตของพหุนาม

อย่างไรก็ตามการเติบโตนั้นน้อยกว่าเลขชี้กำลังซึ่งมีการนิยามเลขชี้กำลัง (โดยฉันเพื่อจุดประสงค์นี้) เป็นO ( n ↦ 2 c n ) สำหรับc > 0 การแสดงสิ่งนี้ยิ่งไปข้างหน้ามากขึ้น

ลิม sup n →∞ 2 c n / 2 ( n 1/2 ) = ลิมn →∞ 2 c n - n 1/2 = ∞∉ R

สำหรับค่าคงที่c > 0 ดังนั้นความซับซ้อนของฟังก์ชันจึงอยู่ที่ตำแหน่งใด ๆ ระหว่างพหุนามและเลขชี้กำลัง


6

มันใหญ่แค่ไหน? เอาล่ะ O (2 ^ sqrt (n)) มันใหญ่แค่ไหน :-(

หากต้องการทราบว่ามันหมายถึงอะไรลองนึกว่าอัลกอริทึมของคุณไม่ใช่แค่ O (2 ^ sqrt (n)) แต่จริง ๆ แล้วมันใช้เวลาอย่างแม่นยำ 2 ^ sqrt (n) nanoseconds บนคอมพิวเตอร์ของคุณ:

n = 100: 2 ^ 10 = 1024 nanoseconds ไม่มีเวลาเลย n = 1,000: 2 ^ 31.xxx = 2 พันล้านนาโนวินาที สองวินาทีนั่นเห็นได้ชัด n = 10,000: 2 ^ 100 ≈ 10 ^ 30 nanoseconds = 10 ^ 21 วินาที = 30 ล้านล้านปี

นี้เป็นจำนวนมากได้ดีกว่า 2 ^ n นาโนวินาทีที่ n = 100 จะใช้เวลา 30000000000000 ปี แต่ยังคงขนาดของปัญหาที่คุณสามารถแก้ปัญหาที่ค่อนข้าง จำกัด หากคุณพิจารณาปัญหา "แก้ไขได้" หากคอมพิวเตอร์ของคุณสามารถแก้ไขได้ในหนึ่งสัปดาห์นั่นคือประมาณ 6 x 10 ^ 14 นาโนวินาทีนั่นคือประมาณ n = 2,400 ในทางกลับกัน n = 400 สามารถแก้ไขได้ในเสี้ยววินาที

(ในทางปฏิบัติสำหรับ n = 10,000 ทั้ง O (2 ^ sqrt (n)) และ O (2 ^ n) ใช้เวลาเดียวกัน: นานเกินไปที่จะรอ)

มันเกินพหุนามใด ๆ ใช้อัลกอริทึมอื่นโดยใช้ n ^ 1,000 วินาที ซึ่งแก้ไม่ได้ในทางปฏิบัติสำหรับ n = 2 อัลกอริทึมนี้ใช้เวลานานกว่า n คือประมาณ 885 ล้าน แต่จริงๆแล้วใครจะสน? ณ จุดนั้นจำนวนปีที่อัลกอริทึมทั้งคู่ใช้เป็นตัวเลข 9,000 หลัก

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