ความแตกต่างระหว่าง Big-O และ Little-O Notation


คำตอบ:


442

f ∈ O (g) พูดโดยหลักแล้ว

สำหรับอย่างน้อยหนึ่งทางเลือกของค่าคงที่k > 0 คุณสามารถค้นหาค่าคงที่เช่นว่าความไม่เท่าเทียมกัน 0 <= f (x) <= kg (x) ถือทั้งหมด x> a

โปรดทราบว่า O (g) เป็นชุดของฟังก์ชั่นทั้งหมดที่มีเงื่อนไขนี้

f ∈ o (g) พูดโดยหลักแล้ว

สำหรับทุกทางเลือกของการคงที่k > 0 คุณสามารถหาคงดังกล่าวที่ไม่เท่าเทียมกัน 0 <= f (x) <กก. (x) ถือสำหรับทุก x> a

อีกครั้งโปรดทราบว่า o (g) เป็นชุด

ใน Big-O มันเป็นสิ่งที่จำเป็นเท่านั้นที่คุณพบว่าตัวคูณโดยเฉพาะอย่างยิ่งkซึ่งความไม่เท่าเทียมกันถือหุ้นเกินกว่าขั้นต่ำบางx

ใน Little-o ต้องมีxอย่างน้อยหลังจากนั้นความไม่เสมอภาคจะถือกำเนิดไม่ว่าคุณจะสร้างkน้อยแค่ไหนตราบใดที่มันไม่ได้เป็นลบหรือเป็นศูนย์

ทั้งสองอธิบายขอบเขตบนแม้ว่าจะค่อนข้างตอบโต้สังหรณ์ใจ Little-o เป็นคำสั่งที่แข็งแกร่ง มีช่องว่างขนาดใหญ่กว่าระหว่างอัตราการเติบโตของ f และ g หาก f ∈ o (g) มากกว่าถ้า f ∈ O (g)

ตัวอย่างหนึ่งของความไม่เสมอภาคคือ: f ∈ O (f) เป็นจริง แต่ f ∈ o (f) เป็นเท็จ ดังนั้น Big-O จึงสามารถอ่านได้ว่า "f ∈ O (g) หมายความว่าการเจริญเติบโตของ asymptotic นั้นไม่เร็วกว่า g's" ในขณะที่ "f ∈ o (g) หมายความว่า f ของการเจริญเติบโตเชิงซีกขวานั้นช้ากว่าของ g อย่างแน่นอน" มันเหมือนเมื่อเทียบกับ<=<

หากค่าของ g (x) เป็นค่าคงที่หลายค่าของ f (x) ดังนั้น f ∈ O (g) จะเป็นจริง นี่คือเหตุผลที่คุณสามารถปล่อยค่าคงที่เมื่อทำงานกับสัญกรณ์ใหญ่

อย่างไรก็ตามสำหรับ f ∈ o (g) เป็นจริงแล้ว g จะต้องรวมพลังที่สูงขึ้นของ x ในสูตรของมันและดังนั้นการแยกความสัมพันธ์ระหว่าง f (x) และ g (x) จะต้องเพิ่มขึ้นตามจริงเมื่อ x ใหญ่ขึ้น

หากต้องการใช้ตัวอย่างคณิตศาสตร์อย่างหมดจด (แทนที่จะอ้างถึงอัลกอริธึม):

ต่อไปนี้เป็นจริงสำหรับ Big-O แต่จะไม่เป็นจริงถ้าคุณใช้ little-o:

  • x²∈ O (x²)
  • x²∈ O (x² + x)
  • x²∈ O (200 * x²)

ต่อไปนี้เป็นจริงสำหรับ little-o:

  • x²∈ o (x³)
  • x²∈ o (x!)
  • ln (x) ∈ o (x)

โปรดทราบว่าถ้า f ∈ o (g) นี่หมายถึง f ∈ O (g) เช่นx²∈ o (x³) ดังนั้นมันจึงเป็นความจริงที่x²∈ O (x³), (อีกครั้งให้คิดถึง O as <=และ o as <)


146
ใช่ - ความแตกต่างอยู่ที่ว่าทั้งสองฟังก์ชั่นนั้นอาจจะไม่เหมือนกันหรือไม่ ฉันชอบคิดถึงความหมายของโอใหญ่ "เติบโตไม่เร็วกว่า" (เช่นเติบโตในอัตราเดียวกันหรือช้ากว่า) และความหมายเล็กน้อย "เติบโตช้ากว่าอย่างเคร่งครัด"
Phil

12
คัดลอกไปยังวิกิพีเดียหรือไม่ นี่เป็นสิ่งที่ดีกว่ามาก
cloudsurfin

1
@SA ใช่ นั่นเป็นกรณีที่มีเล่ห์เหลี่ยมซึ่งกฎที่ง่ายกว่าที่ฉันให้ไว้เกี่ยวกับ แต่ถ้าคุณดูคำจำกัดความที่เข้มงวดมากขึ้นที่กำหนดไว้ในคำตอบของ Strilanc ด้านล่างสิ่งที่คุณต้องการรู้คือถ้าลิม n-> inf (2 ^ n / 3 ^ n) = 0 ตั้งแต่ (2 ^ n / 3 ^ n) = (2/3) ^ n และตั้งแต่ 0 <= x <1, Lim n-> inf (x ^ n) = 0 มันเป็นความจริงที่ 2 ^ n = o (3 ^ n)
ไทเลอร์ McHenry

1
ระวังด้วย "ใน Little-o ต้องมีอย่างน้อย x หลังจากนั้นความไม่เท่าเทียมถือไม่ว่าคุณจะทำ k น้อยแค่ไหนตราบใดที่มันไม่ได้เป็นลบหรือเป็นศูนย์" ไม่ใช่ "สำหรับทุกaสิ่งkนั่น: ... " มันคือ "สำหรับทุก ๆkสิ่งaนั่น: ... "
GA1

1
"ใน Little-o ต้องมีอย่างน้อย x หลังจากนั้นความไม่เท่าเทียมกันไม่ว่าคุณจะทำ k น้อยแค่ไหนตราบใดที่มันไม่ได้เป็นลบหรือเป็นศูนย์" ไม่ถูกต้อง
Filippo Costa

196

Big-O คือการน้อย o เป็นคือการ <Big-O เป็นขอบเขตบนที่รวมในขณะที่ Little-ขอบเขตบนนั้นเข้มงวด

ตัวอย่างเช่นฟังก์ชั่นf(n) = 3nคือ:

  • ในO(n²), o(n²)และO(n)
  • ไม่ได้อยู่ในO(lg n), o(lg n)หรือo(n)

อะนาล็อกตัวเลข1คือ:

  • ≤ 2, < 2และ≤ 1
  • ไม่≤ 0, < 0หรือ< 1

นี่คือตารางที่แสดงแนวคิดทั่วไป:

โต๊ะใหญ่

(หมายเหตุ: ตารางเป็นแนวทางที่ดี แต่นิยามขีด จำกัด ควรอยู่ในรูปของขีด จำกัด ที่เหนือกว่าแทนที่จะเป็นขีด จำกัด ปกติตัวอย่างเช่น3 + (n mod 2) แกว่งระหว่าง 3 ถึง 4 ตลอดไปมันอยู่ในO(1)แม้จะไม่มีขีด จำกัด ปกติ เป็นlim sup: 4. )

ฉันขอแนะนำให้จำว่าสัญลักษณ์ Big-O แปลงเป็นการเปรียบเทียบเชิงสัญลักษณ์อย่างไร การเปรียบเทียบนั้นง่ายต่อการจดจำ แต่มีความยืดหยุ่นน้อยกว่าเพราะคุณไม่สามารถพูดสิ่งต่าง ๆ เช่น n O (1) = P


ฉันมีหนึ่งคำถาม: ความแตกต่างระหว่างบรรทัด 3 และ 4 (คอลัมน์จำกัดความหมาย) คืออะไร คุณช่วยยกตัวอย่างหนึ่งตัวให้ฉันดูได้เมื่อ 4 ถือ (ลิม> 0) แต่ไม่ใช่ 3
ชายสวมหน้ากาก

3
โอ้ฉันคิดออก Big Omega สำหรับ lim> 0, Big Oh สำหรับ lim <infinity, Big Theta คือเมื่อทั้งสองเงื่อนไขมีความหมาย, 0 <lim <infinity
ชายสวมหน้ากาก

สำหรับ f ∈Ω (g) ขีด จำกัด ที่ไม่สิ้นสุดจะประเมินเป็น> = 1 หรือไม่ ในทำนองเดียวกันสำหรับ f ∈ O (g) 1 = <c <∞?
2963623

1
@ user2963623 ไม่เนื่องจากค่าที่แน่นอนมีค่าสูงกว่า 0 อย่างเคร่งครัดรวมถึงค่าระหว่าง 0 และ 1 จะสอดคล้องกับ "ความซับซ้อนเชิงเส้นประสาทเดียวกัน แต่มีปัจจัยคงที่แตกต่างกัน" หากคุณละเว้นค่าที่ต่ำกว่า 1 คุณจะมีการตัดในพื้นที่คงที่แทนการเว้นวรรคแบบเชิงซ้อน
Craig Gidney

1
@ubadub คุณออกอากาศการดำเนินการยกกำลังมากกว่าชุด สัญกรณ์หลวม
Craig Gidney

45

ฉันพบว่าเมื่อฉันไม่สามารถเข้าใจแนวคิดอะไรบางอย่างการคิดว่าทำไมใครจะใช้ Xมีประโยชน์ในการเข้าใจ X (ไม่ได้บอกว่าคุณไม่ได้ลองสิ่งนั้นฉันแค่ตั้งเวที)

[สิ่งที่คุณรู้] วิธีการทั่วไปในการจำแนกอัลกอริธึมคือโดยการใช้งานจริงและโดยการอ้างถึงความซับซ้อนที่ยิ่งใหญ่ของอัลกอริทึมคุณจะได้การประมาณที่ดีพอสมควรว่าอันไหนที่ "ดีกว่า" - ใน O! แม้ในโลกแห่งความเป็นจริง O (N) ก็คือ "ดีกว่า" กว่า O (N²) ยกเว้นสิ่งที่โง่เช่นค่าคงที่ที่สูงมากและไม่ชอบ [/ สิ่งที่คุณรู้]

สมมติว่ามีอัลกอริทึมที่ทำงานใน O (N) ค่อนข้างดีใช่มั้ย แต่สมมติว่าคุณ (คุณเป็นคนที่ยอดเยี่ยมคุณ) มาพร้อมกับอัลกอริทึมที่ทำงานใน O ( NloglogloglogN ) เย้! มันเร็วขึ้น! แต่คุณจะรู้สึกงี่เง่าที่เขียนซ้ำแล้วซ้ำอีกเมื่อคุณเขียนวิทยานิพนธ์ของคุณ คุณเขียนหนึ่งครั้งและคุณสามารถพูดว่า "ในบทความนี้ฉันได้พิสูจน์แล้วว่าอัลกอริธึม X ซึ่งคำนวณได้ก่อนหน้านี้ในเวลา O (N) ในความเป็นจริงก็คำนวณได้ใน o (n)"

ดังนั้นทุกคนรู้ว่าอัลกอริทึมของคุณเร็วขึ้น --- โดยไม่ชัดเจนเท่าไหร่ แต่พวกเขารู้เร็วกว่า ตามหลักวิชา :)

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