2 ^ n และ n * 2 ^ n มีความซับซ้อนในเวลาเดียวกันหรือไม่


178

ทรัพยากรที่ฉันพบว่ามีความซับซ้อนในเวลาไม่ชัดเจนเกี่ยวกับเวลาที่จะไม่สนใจคำศัพท์ในสมการความซับซ้อนของเวลาโดยเฉพาะกับตัวอย่างที่ไม่ใช่พหุนาม

เห็นได้ชัดสำหรับฉันที่ให้บางสิ่งในรูปแบบ n 2 + n + 1 คำสองคำสุดท้ายไม่มีนัยสำคัญ

โดยเฉพาะเมื่อได้รับสองหมวดหมู่คือ 2 nและ n * (2 n ) เป็นลำดับที่สองในลำดับเดียวกันเป็นลำดับแรกหรือไม่ การคูณ n เพิ่มเติมนั้นมีความหมายหรือไม่? ทรัพยากรมักจะบอกว่า x nอยู่ในรูปแบบเลขชี้กำลังและเติบโตเร็วกว่ามาก ... จากนั้นไปต่อ

ฉันเข้าใจได้ว่าทำไมมันไม่ตั้งแต่ 2 nจะแซงหน้า n อย่างมาก แต่เนื่องจากพวกมันไม่ได้ถูกรวมเข้าด้วยกันมันจะมีความสำคัญอย่างมากเมื่อเปรียบเทียบสมการทั้งสองในความเป็นจริงความแตกต่างระหว่างพวกเขาจะเป็นปัจจัยของ n เสมอ ซึ่งดูเหมือนว่าสำคัญที่จะพูดน้อย


8
ในความคิดของฉันเนื่องจาก NLogN นั้นถือว่าช้ากว่า N อย่างมาก แต่คนส่วนใหญ่ไม่ค่อยสนใจว่าจะปลอดภัยแค่ไหนที่จะบอกว่า N2 ^ N นั้นช้ากว่า 2 ^ N แต่ไม่ใช่ "ช้าพอ" สำหรับคน การดูแล ..
แจ็ค

@tobias_k ฉันเข้าใจประเด็นนี้ แต่พิจารณาตัวอย่างของ O (n!) เทอมพิเศษ n จะแตกต่างกันจริง ๆ หรือไม่? O (n!) คือ O (n * n!) ในขณะที่ O (n!) คือ O ((n + 1)!) อาคากราฟเดียวกันนี้เพียงแค่เลื่อน การเติบโตจะเหมือนกัน ... ในกรณีนี้แม้ว่าจะมีขนาดใหญ่มากการเติบโตนั้นแตกต่างกันหรือไม่? นี่ไม่ใช่ความซับซ้อนของเวลาหรือไม่
matty-d

3
@JackWu แต่คนส่วนใหญ่ไม่สนใจจริงๆเท่าใดจนกว่าคุณจะมีการจัดเรียงหลายร้อยล้านระเบียนที่มี nlogn แทน n :)
CB

4
ในความเป็นจริงn! = o((n+1)!)นั่นคือมันเติบโตอย่างช้าๆอย่างไม่มีอาการ
chepner

16
โปรดทราบว่าสิ่งนี้ไม่มีอะไรเกี่ยวข้องกับทฤษฎีความซับซ้อนมันเป็น "เพียงแค่" เกี่ยวกับ aymptotics นอกจากนี้ชนิดของคำถามนี้ก็คืออาจจะดีกว่าในวิทยาการคอมพิวเตอร์
Raphael

คำตอบ:


231

คุณจะต้องไปที่คำจำกัดความที่เป็นทางการของ O ( O) เพื่อตอบคำถามนี้

คำจำกัดความคือว่าf(x)เป็นของO(g(x))หากและหากวงเงินที่มีอยู่คือไม่ได้เป็นอินฟินิตี้ ในระยะสั้นนี้หมายถึงว่ามีอยู่อย่างต่อเนื่องเช่นที่มูลค่าของไม่เคยมากกว่าlimsupx → ∞ (f(x)/g(x))Mf(x)/g(x)M

ในกรณีของคำถามของคุณให้และแจ้งให้ จากนั้นเป็นสิ่งที่จะยังคงเติบโตอย่างไม่มีที่สิ้นสุด ดังนั้นจึงไม่ได้อยู่ในf(n) = n ⋅ 2ng(n) = 2nf(n)/g(n)nf(n)O(g(n))


5
อ่านคำจำกัดความได้ง่ายขึ้นเล็กน้อยดูที่นี่
Alden

3
อย่างเป็นทางการพูดคุณไม่สามารถใช้วงเงินของO(f(x)/g(x)); การแจ้งเตือน big-O เป็นการย่อของชุดฟังก์ชั่นไม่ใช่ฟังก์ชั่นเดียวที่มีค่าที่คุณสามารถ จำกัด ได้ อย่างไรก็ตามฉันคิดว่ามันเป็นความจริงที่คุณสามารถแสดงให้เห็นว่าf(x) = O(g(x))หากlim(x->infinity) f(x)/g(x)มีอยู่
chepner

44
ไม่จำเป็นต้องมีขีด จำกัด ; อัตราส่วนจะต้องมีการล้อมรอบด้านบนโดยค่าคงที่สำหรับ x ที่มีขนาดใหญ่เพียงพอ ตัวอย่างเช่น 2 + sin (x) อยู่ใน O (1) แต่ (2 + sin (x)) / 1 ไม่เข้าใกล้ขีด จำกัด เท่ากับ x-> อนันต์
user2357112 รองรับ Monica

2
ความหมายจะถูกต้องกับแทนlim sup lim
David Eisenstat

11
@IvayloStrandjev โปรดทราบว่าคำอธิบายสั้น ๆ ของคุณไม่ถูกต้อง นี้จะต้องเป็นจริงสำหรับขนาดใหญ่พอไม่ได้สำหรับทุกค่าของx x
K.Steff

85

วิธีที่รวดเร็วในการดูว่าn⋅2ⁿใหญ่กว่าคือการเปลี่ยนแปลงของตัวแปร m = 2ⁿให้ จากนั้นn⋅2ⁿ = ( log₂m )⋅m(การฐาน-2 ลอการิทึมทั้งสองด้านของm = 2ⁿให้n = log₂m) และคุณสามารถแสดงให้เห็นว่าการเติบโตเร็วกว่าm log₂mm


3
ขอบคุณ! นี่คือคำตอบที่ดีที่สุดในความคิดของฉัน การพิสูจน์ตามคำจำกัดความที่เป็นทางการนั้นถูกต้อง แต่ถ้าคุณมีสิ่งกีดขวางบางอย่างที่จะผ่านพ้นไปการเปรียบเทียบที่สะดวกสบายและคุ้นเคยจะทำให้ดีที่สุดและเร็วที่สุด
John P

1
คำถามโง่ ๆ คือlgอะไร? ลอการิทึมในฐาน 2?
Pierre Arlaud

3
มันเป็นตัวย่อที่ขี้เกียจ ในวิทยาการคอมพิวเตอร์นั้นมีแนวโน้มที่จะหมายถึงฐาน 2 เพราะส่วนใหญ่เป็นผลมาจากกลยุทธ์การแบ่งและพิชิต ในสัญกรณ์ใหญ่ -O มันสามารถเป็นตัวแทนของอะไรก็ได้เพราะลอการิทึมฐาน -x ของจำนวนแตกต่างจากลอการิทึมฐาน -y ของมันโดยปัจจัยคงที่เท่านั้นโดยไม่คำนึงถึง x และ y
chepner

3
ฉันควรทราบในการหวนกลับนั่นlgคือสัญกรณ์ ISO สำหรับลอการิทึมฐาน 10 มากกว่าการใช้ฐานผู้ไม่เชื่อเรื่องพระเจ้าที่ใช้กันมากที่สุดเมื่อพูดถึงเวลาทำงาน asymptotic ดูen.wikipedia.org/wiki/Logarithm#Particular_bases
chepner

โอเคแน่นอน แต่ฉันไม่เข้าใจว่าทำไมมันชัดเจนมากขึ้นว่า m log m โตเร็วกว่า m มากกว่าว่า n 2 ^ n เติบโตเร็วกว่า 2 ^ n
djechlin

10

ฉันเห็นด้วยที่n⋅2ⁿไม่ได้อยู่ในO(2ⁿ)แต่ฉันคิดว่ามันควรจะชัดเจนมากขึ้นเนื่องจากขีด จำกัด การใช้ที่เหนือกว่าไม่ได้ถืออยู่เสมอ

ตามคำนิยามอย่างเป็นทางการของ Big-O: f(n)อยู่ในO(g(n))ถ้ามีอยู่คงที่c > 0และn₀ ≥ 0ดังที่ทุกเรามีn ≥ n₀ f(n) ≤ c⋅g(n)มันสามารถแสดงให้เห็นได้อย่างง่ายดายว่าไม่มีค่าคงที่ดังกล่าวอยู่สำหรับและf(n) = n⋅2ⁿ g(n) = 2ⁿอย่างไรก็ตามมันสามารถแสดงให้เห็นว่าg(n)อยู่ในO(f(n))อยู่ใน

ในคำอื่น ๆเป็นที่สิ้นสุดจะลดลงด้วยn⋅2ⁿ 2ⁿนี่คือสัญชาตญาณ แม้ว่าพวกเขาจะมีทั้งชี้แจงและทำให้ได้อย่างเท่าเทียมกันไม่น่าจะนำมาใช้ในสถานการณ์จริงมากที่สุดเราไม่สามารถพูดได้ว่าพวกเขามีคำสั่งเดียวกันเพราะจำเป็นต้องเติบโตช้ากว่า2ⁿn⋅2ⁿ


f(n) = 2*2^nฉันคิดว่าคุณหมายถึงn*2^nอะไร
tobias_k

4

ผมไม่เถียงกับคำตอบอื่น ๆ ที่บอกว่าจะเติบโตได้เร็วกว่าn⋅2ⁿ 2ⁿแต่การn⋅2ⁿเติบโตยังคงเป็นเพียงแค่การอธิบาย

เมื่อเราพูดถึงอัลกอริธึมเรามักจะบอกว่าความซับซ้อนของเวลาเพิ่มขึ้นเป็นทวีคูณ ดังนั้นเราคิดว่าจะเป็น2ⁿ, 3ⁿ, eⁿ, 2.000001ⁿหรือเราn⋅2ⁿจะเป็นกลุ่มเดียวกันกับความซับซ้อนชี้แจงเติบโต

ที่จะให้มันมีความรู้สึกทางคณิตศาสตร์บิตเราพิจารณาฟังก์ชั่นf(x)ที่จะเติบโต (ไม่ได้เร็วกว่า) ชี้แจงถ้ามีอยู่อย่างต่อเนื่องดังกล่าวว่าc > 1f(x) = O(cx)

สำหรับn⋅2ⁿค่าคงที่cอาจเป็นจำนวนใด ๆ ที่มากกว่า2ลองทำ3ดู แล้ว:

n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿและนี่คือน้อยกว่า1สำหรับใด ๆnสำหรับการใด ๆ

ดังนั้น2ⁿเติบโตช้ากว่าที่ผ่านมาในการเปิดเติบโตช้ากว่าn⋅2ⁿ 2.000001ⁿแต่พวกเขาทั้งสามเติบโตขึ้นอย่างทวีคูณ


ในตัวอย่างสุดท้าย n * 2 ^ n มากกว่า 2.000001 ^ n มากถึง n = 34,726,000 ณ จุดนั้น 2 ^ n เป็นตัวเลขที่มีมากกว่า 10 ล้านหลักดังนั้นมันจึงไม่สำคัญ ...
gnasher729

1
@ gnasher729 เป็นเพียงค่าคงที่ซึ่งเราอาจละเว้นเป็น f (n) และ c * f (n) มีความซับซ้อนเหมือนกันในแง่ของ big-O เช่น 40'000'000 * 2.000001 ^ n มากกว่า n * 2 ^ n ทันที แต่คุณพูดถูกมันไม่สำคัญเลยฉันจะบอกว่ามันไม่สำคัญเลยเมื่อเรามีการเติบโตแบบทวีคูณ (ยกเว้นว่าเราได้ค่า n เพียงเล็กน้อย)
Andrey

2

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

n 2 ^ n เติบโตเร็วกว่า asymptotically มากกว่า 2 ^ n นั่นคือคำถามที่ตอบ

แต่คุณอาจถามว่า "ถ้าอัลกอริทึม A ใช้เวลา 2 ^ n นาโนวินาทีและอัลกอริทึม B ใช้ n 2 ^ n นาโนวินาทีเป็น n ที่ใหญ่ที่สุดที่ฉันสามารถหาวิธีแก้ปัญหาในวินาที / นาที / ชั่วโมง / วัน / เดือน / ปีคืออะไร? คำตอบคือ n = 29/35/41/46/51/54 เทียบกับ 25/30/36/40/45/49 ไม่แตกต่างกันมากในทางปฏิบัติ

ขนาดของปัญหาที่ใหญ่ที่สุดที่สามารถแก้ไขได้ในเวลา T คือ O (ln T) ในทั้งสองกรณี

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