ขอบเขตล่างและขอบเขตแน่นแตกต่างกันอย่างไร?


104

จากการอ้างอิงของคำตอบนี้ Theta คืออะไร (มัดแน่น)?

โอเมก้าเป็นขอบเขตล่างค่อนข้างเข้าใจเวลาขั้นต่ำที่อัลกอริทึมอาจใช้ และเรารู้ว่า Big-O มีไว้สำหรับขอบเขตบนหมายถึงเวลาสูงสุดที่อัลกอริทึมอาจใช้ แต่ฉันไม่รู้เกี่ยวกับ Theta

คำตอบ:


160

Big Oเป็นขอบเขตบนในขณะที่Omegaเป็นขอบเขตล่าง Thetaต้องการทั้ง Big O และ Omega ดังนั้นจึงเรียกว่าขอบเขตที่แน่นหนา (ต้องเป็นทั้งขอบเขตบนและล่าง)

ตัวอย่างเช่นอัลกอริทึมที่ใช้Omega(n log n)เวลาอย่างน้อยn log nแต่ไม่มีขีด จำกัด สูงสุด การใช้อัลกอริทึมTheta(n log n)เป็นสิ่งที่ดีกว่าเนื่องจากต้องใช้เวลาอย่างน้อย n log n (Omega n log n) และไม่เกิน n log n (Big O n log n)


7
อ้อ .. ตอนนี้คำว่า "มัดแน่น" ปรากฏว่าอธิบายตัวเองได้ดีทีเดียว ขอบคุณคริส ฉันโง่บางทีฉันอาจคาดหวังความคิดที่ซับซ้อน :)
Adeel Ansari

6
แท้จริงแล้วมีสัญกรณ์แฟนซีมากมายที่โยนไปมา แต่ก็ไม่ซับซ้อนเกินไปเมื่อคุณได้รับมันภายใต้เข็มขัดของคุณ
Chris Bunch

4
เอกสารที่พร้อมใช้งานฟรีนี้จากเวอร์จิเนียเทคอธิบายพร้อมตัวอย่างความแตกต่างของประสิทธิภาพระหว่างอัลกอริทึมของความซับซ้อนที่แตกต่างกันและอธิบายสั้น ๆ ว่า Asymptotic Analysis: people.cs.vt.edu/shaffer/Book/C++3e20120102.pdf
Alan

คุณหมายถึงอะไรโดย "อัลกอริทึมที่ใช้ Theta (n log n) มีสิทธิพิเศษมากเนื่องจากต้องใช้เวลาอย่างน้อย n log n (Omega n log n) และไม่เกิน n log n (Big O n log n)" เช่น มันเป็นความซับซ้อนที่แน่นอนของอัลกอริทึมตามที่คุณเขียนไว้อย่างน้อย Omega (nlogn) และที่ BigO (nlogn) สูงสุดหรือไม่?
Nikhil Verma

1
พูดง่ายๆเราสามารถเรียก: ขอบเขตบน (ใหญ่ (O)) เป็นกรณีที่เลวร้ายที่สุด? ผูกพันแน่นเป็นกรณีเฉลี่ย? ขอบเขตล่าง (Omega) เป็นกรณีที่ดีที่สุด?
Revanth

114

สัญกรณ์Θ ( สัญกรณ์ theta) เรียกว่าขอบเขตแน่นเนื่องจากมีความแม่นยำมากกว่าสัญลักษณ์ Oและสัญกรณ์Ω (สัญกรณ์โอเมก้า)

ถ้าฉันขี้เกียจฉันสามารถพูดได้ว่าการค้นหาไบนารีในอาร์เรย์ที่เรียงลำดับคือ O (n 2 ), O (n 3 ) และ O (2 n ) และฉันจะแก้ไขทางเทคนิคในทุกกรณี นั่นเป็นเพราะ O-notation ระบุขอบเขตบนเท่านั้นและการค้นหาแบบไบนารีจะถูกล้อมรอบไว้ที่ด้านสูงโดยฟังก์ชันเหล่านั้นทั้งหมดไม่ใกล้เคียงกันมากนัก ประมาณการขี้เกียจเหล่านี้จะไร้ประโยชน์

สัญกรณ์Θแก้ปัญหานี้ได้โดยการรวม O-notation และΩ-notation ถ้าฉันบอกว่าการค้นหาไบนารีคือΘ (log n) นั่นจะทำให้คุณได้ข้อมูลที่แม่นยำยิ่งขึ้น มันบอกให้คุณทราบว่าอัลกอริทึมถูกล้อมรอบทั้งสองด้านด้วยฟังก์ชันที่กำหนดดังนั้นจึงไม่เร็วหรือช้ากว่าที่ระบุ


11
If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every case- ดูเหมือนคนส่วนใหญ่ในโลกคอมพิวเตอร์จะขี้เกียจเพราะทุกคนส่วนใหญ่พูดถึงความซับซ้อนของ Big O เท่านั้น
RBT

If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every caseในกรณีที่มีคนสับสนกับสิ่งนี้: สำหรับฟังก์ชั่นประเภทนั้นที่ไม่ใช้สัญกรณ์ small-o ที่แน่นอย่างไม่มีอาการจะถูกใช้ ตัวอย่าง: - 2n ^ 2 = O (n ^ 2) ที่ถูกผูกไว้นั้นแน่นอย่างไม่มีอาการ แต่ขอบเขต 2n = O (n ^ 2) ไม่ได้ อ่านเพิ่มเติม: stackoverflow.com/questions/1364444/…
Dragos Strugar

18

ถ้าคุณมีบางสิ่งบางอย่างที่ O (f (n))ซึ่งหมายความว่ามีเป็นk , กรัม (n)เช่นว่าf (n)กิโลกรัม (n)

ถ้าคุณมีบางสิ่งบางอย่างที่ Ω (f (n))ซึ่งหมายความว่ามีเป็นk , กรัม (n)เช่นว่าf (n)กิโลกรัม (n)

และถ้าคุณมีบางสิ่งบางอย่างกับO (f (n)) และ Ω (f (n))แล้วมันΘ (f (n)

บทความวิกิพีเดียจะดีถ้ามีความหนาแน่นน้อย


ตอนนี้กำลังอ่านสัญกรณ์ตระกูล Bachmann-Landau ขอบคุณชาร์ลีฉันไปที่นั่นก่อนหน้านี้ แต่กลับมาโดยไม่ดำเนินการต่อ
Adeel Ansari

เฮ้เป็นเรื่องดีที่จะได้รับการฟื้นฟูการคำนวณระดับปริญญาเอกบ่อยๆ
Charlie Martin

สังเกตว่าสัญกรณ์ big-O ของ Landau ไม่ จำกัด เฉพาะความซับซ้อนของอัลกอริทึม
Charlie Martin

สิ่งนี้ดูผิด ในบรรทัดแรกควรอ่าน "ถ้าคุณมีบางอย่างที่เป็น O (g (n))" นั่นคือgแทนที่จะเป็นfและส่วนที่เหลือสามารถปล่อยให้เป็นไปตามนั้นได้ เช่นเดียวกันกับบรรทัดที่สองควรเป็น "ถ้าคุณมีบางอย่างที่เป็นΩ (g (n))" โปรดตรวจสอบอีกครั้งได้ไหม
Fabio กล่าว Reinstate Monica

หัวข้อทั้งหมดยุ่งเหยิงจนคนที่มีเครดิตนั้นอาจเข้าใจผิด: D ล้อเล่นกันมีใครบางคนต้องแก้ไขคำตอบนี้ สิ่งนี้ทำให้ผู้คนสับสน (ทำให้ฉันรู้สึกมาก)
ราด

5

ขอบเขตด้านบนของ Asymptoticหมายความว่าอัลกอริทึมที่กำหนดจะทำงานในช่วงเวลาสูงสุดขึ้นอยู่กับจำนวนอินพุต

ลองใช้อัลกอริทึมการเรียงลำดับเป็นตัวอย่าง หากองค์ประกอบทั้งหมดของอาร์เรย์อยู่ในลำดับจากมากไปหาน้อยในการเรียงลำดับจะต้องใช้เวลาดำเนินการO(n)ซึ่งแสดงความซับซ้อนของขอบเขตบน O(1)ถ้าแถวเรียงแล้วค่าที่จะได้รับ

โดยทั่วไปO-notationจะใช้สำหรับความซับซ้อนของขอบเขตบน


ขอบเขตที่ไม่ปรากฏชัด (c 1 g (n) ≤ f (n) ≤ c 2 g (n)) แสดงความซับซ้อนของขอบเขตเฉลี่ยสำหรับฟังก์ชันโดยมีค่าระหว่างขีด จำกัด (ขอบเขตบนและขอบเขตล่าง) โดยที่ c 1และ c 2คือค่าคงที่


1
หากเรียงลำดับอาร์เรย์ขอบเขตจะยังคงเป็น O (n)
Arun Aravind

2
@ArunAravind คุณอธิบายได้ไหมว่าทำไม?
nbro

3

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

ใช้การค้นหาอาร์เรย์ในคำตอบที่ยอมรับสำหรับคำถามอื่นเป็นตัวอย่าง เวลาที่ใช้ในการค้นหาจำนวนเฉพาะในรายการขนาด n คือ n / 2 * some_constant โดยเฉลี่ย หากคุณถือว่ามันเป็นฟังก์ชั่นf(n) = n/2*some_constantมันจะเพิ่มขึ้นไม่เร็วไปกว่าที่g(n) = nชาลีกำหนด นอกจากนี้ยังเพิ่มขึ้นไม่ช้ากว่าg(n)อย่างใดอย่างหนึ่ง ดังนั้นจึงg(n)เป็นทั้งขอบเขตบนและขอบเขตล่างของf(n)สัญกรณ์ Big-O ดังนั้นความซับซ้อนของการค้นหาเชิงเส้นจึงเท่ากับ nซึ่งหมายความว่ามันคือ Theta (n)

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


ดังนั้นเราสามารถพูดได้ว่าΩเป็นกรณีที่ดีที่สุดและ O แย่ที่สุด? . .. แล้วเราควรเปลี่ยนคำว่า best case และแย่ที่สุดตามลำดับหรือไม่?
Adeel Ansari

กรณีที่ดีที่สุดคือ O (1) สำหรับปัญหาใด ๆ ?
Zach Langley

1
@Adeel ไม่ Theta และ O สามารถอ้างถึงกรณีเฉลี่ยหรือกรณีที่เลวร้ายที่สุด @ แซ็คดีไม่เป๊ะ ขอบคุณที่ชี้ให้เห็น
PolyThinker

0

ถ้าฉันขี้เกียจฉันสามารถพูดได้ว่าการค้นหาไบนารีในอาร์เรย์ที่เรียงลำดับคือ O (n2), O (n3) และ O (2n) และฉันจะแก้ไขทางเทคนิคในทุกกรณี

เราสามารถใช้ o-notation ("little-oh") เพื่อแสดงขอบเขตบนที่ไม่รัดแน่น ทั้ง big-oh และ little-oh มีความคล้ายคลึงกัน แต่มีแนวโน้มว่า big-oh จะใช้เพื่อกำหนดขอบเขตด้านบนที่แน่นอย่างไม่มีอาการ


0

ขอบเขตล่างอย่างแม่นยำหรือ $ \ omega $ bfon f (n) หมายถึงชุดของฟังก์ชันที่ไม่มีอาการน้อยกว่าหรือเท่ากับ f (n) เช่น U g (n) ≤ cf (n) $ \ สำหรับทั้งหมด $ʻun≥ n 'สำหรับ c, n' $ \ in $ $ \ Bbb {N} $

และขอบเขตบนหรือ $ \ mathit {O} $ บน f (n) หมายถึงชุดของฟังก์ชันที่มีค่ามากกว่าหรือเท่ากับ f (n) ซึ่งบอกทางคณิตศาสตร์ว่า

$ g (n) \ ge cf (n) \ สำหรับ n \ ge n '$ สำหรับ c, n' $ \ in $ $ \ Bbb {N} $ ทั้งหมด

ตอนนี้ $ \ Theta $ คือจุดตัดของสองข้อข้างบน

$\theta $

เช่นถ้าอัลกอริทึมเป็นเหมือน "$ \ Omega \ left (f (n) \ right $" จะดีกว่าถ้าพูดว่าเป็น $ \ Theta \ left (f (n) \ right) $

หรือเราสามารถพูดได้ด้วยว่ามันให้ความเร็วจริงซึ่ง$ \omega $ทำให้เรามีขีด จำกัด ต่ำสุด


-2

ความแตกต่างพื้นฐานระหว่าง

Blockquote

Asymptotically ขอบเขตด้านบนและ Asymptotically แน่น Asymptotically ส่วนบนหมายถึง algorythm ที่กำหนดซึ่งสามารถดำเนินการได้ด้วยระยะเวลาสูงสุดขึ้นอยู่กับจำนวนอินพุตเช่นในการเรียงลำดับถ้าองค์ประกอบอาร์เรย์ (n) ทั้งหมดอยู่ในลำดับจากมากไปหาน้อยจากนั้นจึงจะขึ้นไปได้ จะใช้เวลาทำงานของ O (n) ซึ่งแสดงความซับซ้อนของขอบเขตบน แต่ถ้าเรียงลำดับแล้วก็จะใช้โอห์ม (1) ดังนั้นโดยทั่วไปเราใช้สัญกรณ์ "O" สำหรับความซับซ้อนของขอบเขตบน

Asym. ขอบเขต จำกัด แสดงค่าสำหรับเช่น (c1g (n) <= f (n) <= c2g (n)) แสดงขีด จำกัด ที่ จำกัด แน่นเพื่อให้ฟังก์ชันมีค่าอยู่ระหว่างสองขอบเขต (ขอบเขตบนและขอบเขตล่าง) โดยให้ กรณีเฉลี่ย


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