ฉันกำลังแก้ไขคำถามอัลกอริทึมและการวิเคราะห์ของฉันคือมันจะทำงานบน O (2 ^ sqrt (n)) มันใหญ่แค่ไหน? มันเท่ากับ O (2 ^ n) หรือไม่? มันยังเป็นเวลาที่ไม่ใช่พหุนามหรือไม่?
ฉันกำลังแก้ไขคำถามอัลกอริทึมและการวิเคราะห์ของฉันคือมันจะทำงานบน O (2 ^ sqrt (n)) มันใหญ่แค่ไหน? มันเท่ากับ O (2 ^ n) หรือไม่? มันยังเป็นเวลาที่ไม่ใช่พหุนามหรือไม่?
คำตอบ:
นี่เป็นคำถามที่น่าสนใจ โชคดีที่เมื่อคุณรู้วิธีแก้ปัญหามันก็ไม่ยากโดยเฉพาะ
สำหรับฟังก์ชั่นF : N → R +และกรัม : N → R +เรามีฉ ∈ O ( กรัม ) และถ้าหากจีบลิมn →∞ ฉ ( n ) / กรัม ( n ) ∈ R
ฟังก์ชั่นf : N → R +มีการเติบโตของพหุนามมากที่สุดหากว่ามีค่าคงที่k ∈ Nเช่นนั้นที่f ∈ O ( n ↦ n 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 ดังนั้นความซับซ้อนของฟังก์ชันจึงอยู่ที่ตำแหน่งใด ๆ ระหว่างพหุนามและเลขชี้กำลัง
มันใหญ่แค่ไหน? เอาล่ะ 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 หลัก