จากการอ้างอิงของคำตอบนี้ Theta คืออะไร (มัดแน่น)?
โอเมก้าเป็นขอบเขตล่างค่อนข้างเข้าใจเวลาขั้นต่ำที่อัลกอริทึมอาจใช้ และเรารู้ว่า Big-O มีไว้สำหรับขอบเขตบนหมายถึงเวลาสูงสุดที่อัลกอริทึมอาจใช้ แต่ฉันไม่รู้เกี่ยวกับ Theta
จากการอ้างอิงของคำตอบนี้ Theta คืออะไร (มัดแน่น)?
โอเมก้าเป็นขอบเขตล่างค่อนข้างเข้าใจเวลาขั้นต่ำที่อัลกอริทึมอาจใช้ และเรารู้ว่า Big-O มีไว้สำหรับขอบเขตบนหมายถึงเวลาสูงสุดที่อัลกอริทึมอาจใช้ แต่ฉันไม่รู้เกี่ยวกับ Theta
คำตอบ:
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)
สัญกรณ์Θ ( สัญกรณ์ theta) เรียกว่าขอบเขตแน่นเนื่องจากมีความแม่นยำมากกว่าสัญลักษณ์ Oและสัญกรณ์Ω (สัญกรณ์โอเมก้า)
ถ้าฉันขี้เกียจฉันสามารถพูดได้ว่าการค้นหาไบนารีในอาร์เรย์ที่เรียงลำดับคือ O (n 2 ), O (n 3 ) และ O (2 n ) และฉันจะแก้ไขทางเทคนิคในทุกกรณี นั่นเป็นเพราะ O-notation ระบุขอบเขตบนเท่านั้นและการค้นหาแบบไบนารีจะถูกล้อมรอบไว้ที่ด้านสูงโดยฟังก์ชันเหล่านั้นทั้งหมดไม่ใกล้เคียงกันมากนัก ประมาณการขี้เกียจเหล่านี้จะไร้ประโยชน์
สัญกรณ์Θแก้ปัญหานี้ได้โดยการรวม O-notation และΩ-notation ถ้าฉันบอกว่าการค้นหาไบนารีคือΘ (log n) นั่นจะทำให้คุณได้ข้อมูลที่แม่นยำยิ่งขึ้น มันบอกให้คุณทราบว่าอัลกอริทึมถูกล้อมรอบทั้งสองด้านด้วยฟังก์ชันที่กำหนดดังนั้นจึงไม่เร็วหรือช้ากว่าที่ระบุ
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 เท่านั้น
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/…
ถ้าคุณมีบางสิ่งบางอย่างที่ O (f (n))ซึ่งหมายความว่ามีเป็นk , กรัม (n)เช่นว่าf (n) ≤ กิโลกรัม (n)
ถ้าคุณมีบางสิ่งบางอย่างที่ Ω (f (n))ซึ่งหมายความว่ามีเป็นk , กรัม (n)เช่นว่าf (n) ≥ กิโลกรัม (n)
และถ้าคุณมีบางสิ่งบางอย่างกับO (f (n)) และ Ω (f (n))แล้วมันΘ (f (n)
บทความวิกิพีเดียจะดีถ้ามีความหนาแน่นน้อย
g
แทนที่จะเป็นf
และส่วนที่เหลือสามารถปล่อยให้เป็นไปตามนั้นได้ เช่นเดียวกันกับบรรทัดที่สองควรเป็น "ถ้าคุณมีบางอย่างที่เป็นΩ (g (n))" โปรดตรวจสอบอีกครั้งได้ไหม
ขอบเขตด้านบนของ Asymptoticหมายความว่าอัลกอริทึมที่กำหนดจะทำงานในช่วงเวลาสูงสุดขึ้นอยู่กับจำนวนอินพุต
ลองใช้อัลกอริทึมการเรียงลำดับเป็นตัวอย่าง หากองค์ประกอบทั้งหมดของอาร์เรย์อยู่ในลำดับจากมากไปหาน้อยในการเรียงลำดับจะต้องใช้เวลาดำเนินการO(n)
ซึ่งแสดงความซับซ้อนของขอบเขตบน O(1)
ถ้าแถวเรียงแล้วค่าที่จะได้รับ
โดยทั่วไปO-notation
จะใช้สำหรับความซับซ้อนของขอบเขตบน
ขอบเขตที่ไม่ปรากฏชัด (c 1 g (n) ≤ f (n) ≤ c 2 g (n)) แสดงความซับซ้อนของขอบเขตเฉลี่ยสำหรับฟังก์ชันโดยมีค่าระหว่างขีด จำกัด (ขอบเขตบนและขอบเขตล่าง) โดยที่ c 1และ c 2คือค่าคงที่
วลีเวลาต่ำสุดและเวลาสูงสุดทำให้เข้าใจผิดเล็กน้อยที่นี่ เมื่อเราพูดถึงสัญกรณ์ 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 (n2), O (n3) และ O (2n) และฉันจะแก้ไขทางเทคนิคในทุกกรณี
เราสามารถใช้ o-notation ("little-oh") เพื่อแสดงขอบเขตบนที่ไม่รัดแน่น ทั้ง big-oh และ little-oh มีความคล้ายคลึงกัน แต่มีแนวโน้มว่า big-oh จะใช้เพื่อกำหนดขอบเขตด้านบนที่แน่นอย่างไม่มีอาการ
ขอบเขตล่างอย่างแม่นยำหรือ $ \ 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 $
ทำให้เรามีขีด จำกัด ต่ำสุด
ความแตกต่างพื้นฐานระหว่าง
Blockquote
Asymptotically ขอบเขตด้านบนและ Asymptotically แน่น Asymptotically ส่วนบนหมายถึง algorythm ที่กำหนดซึ่งสามารถดำเนินการได้ด้วยระยะเวลาสูงสุดขึ้นอยู่กับจำนวนอินพุตเช่นในการเรียงลำดับถ้าองค์ประกอบอาร์เรย์ (n) ทั้งหมดอยู่ในลำดับจากมากไปหาน้อยจากนั้นจึงจะขึ้นไปได้ จะใช้เวลาทำงานของ O (n) ซึ่งแสดงความซับซ้อนของขอบเขตบน แต่ถ้าเรียงลำดับแล้วก็จะใช้โอห์ม (1) ดังนั้นโดยทั่วไปเราใช้สัญกรณ์ "O" สำหรับความซับซ้อนของขอบเขตบน
Asym. ขอบเขต จำกัด แสดงค่าสำหรับเช่น (c1g (n) <= f (n) <= c2g (n)) แสดงขีด จำกัด ที่ จำกัด แน่นเพื่อให้ฟังก์ชันมีค่าอยู่ระหว่างสองขอบเขต (ขอบเขตบนและขอบเขตล่าง) โดยให้ กรณีเฉลี่ย