ทำไม Big O จึงสอนแทน Big Theta


21

สัญลักษณ์ Big O จัดเตรียมขอบเขตบนของฟังก์ชันในขณะที่ Big Theta ให้ขอบเขตที่ จำกัด อย่างไรก็ตามฉันพบว่าสัญกรณ์ Big O โดยทั่วไปแล้ว (และเป็นทางการ) สอนและใช้เมื่อพวกเขาหมายถึง Big Theta จริงๆ

เช่น "Quicksort คือ O (N ^ 2)" สามารถเปลี่ยนเป็นคำพูดที่แข็งแกร่งมากขึ้น "Quicksort คือΘ (N ^ 2)"

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

หมายเหตุWikipedia :

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


3
ฉันรู้ว่านี่ไม่เกี่ยวข้องกับคำถามจริงๆ แต่ quicksort ไม่ใช่ theta (N ^ 2) มันคือ O (N ^ 2)
jsternberg

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

@jsternberg ในทางเทคนิคคุณถูกต้อง สิ่งนี้ก็เป็นจริง แต่ไม่มีความหมาย: "Quicksort ไม่ว่าในกรณีใด (แย่ที่สุดดีที่สุด ... ) คือ O (n ^ 100) แต่ฉันเห็นด้วยกับ OP ควรแม่นยำยิ่งขึ้น: QuickSort ที่เลวร้ายที่สุดคือ Theta (N ^ 2) QuickSort best-case คือ Theta (NlogN) เพราะในแต่ละกรณีเราจะได้ฟังก์ชั่นที่แตกต่างกัน
Eldar

คำตอบ:


26

เพราะคุณมักจะสนใจในกรณีที่เลวร้ายที่สุดเมื่อวิเคราะห์ประสิทธิภาพ ดังนั้นการรู้ขอบเขตบนก็เพียงพอแล้ว

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

อัลกอริทึมบางอย่างที่ @Peter Taylor ระบุไว้ไม่มีข้อผูกมัดใด ๆ เลย ดู quicksort เช่น O (n ^ 2) และ Omega (n)

ยิ่งไปกว่านั้นขอบเขตที่ จำกัด มักจะยากต่อการคำนวณ

ดูสิ่งนี้ด้วย:


6
แต่บิ๊กโอไม่จำเป็นต้องสอดคล้องกับประสิทธิภาพของเคสที่แย่ที่สุด ฉันบอกได้ว่า quicksort ทำงานใน O (2 ^ n) และถูกต้อง 100% มันจะมีความหมายมากกว่านี้ถ้าฉันบอกว่าอัลกอริทึม X ทำงานใน Theta (N ^ 2) มากกว่า O (N ^ 2)
tskuzzy

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

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

9

เหตุผลหนึ่งคือมีหลายกรณีที่ไม่เป็นที่รู้จัก. ตัวอย่างเช่นการคูณเมทริกซ์คือ O (n ^ 2.376) แต่ไม่มีข้อ จำกัด ที่ทราบ แน่นอนว่าเท่าที่ผมสามารถบอกได้ว่ามีเป็นแน่นมุ่งคูณ Matrix แต่เราไม่ทราบว่าค่าของมัน


แต่นั่นจะเป็นขอบเขตสำหรับเวลาทำงานของปัญหาไม่ใช่ขั้นตอนวิธีเฉพาะ ในขณะที่การคูณเมทริกซ์โดยทั่วไปสามารถแก้ไขได้เร็วกว่าลูกบาศก์เวลาอัลกอริธึมไร้เดียงสาคือΘ (n ^ 3) ไม่ว่าจะเกิดอะไรขึ้น
tskuzzy

5
@tskuzzy, ใช้ quicksort มันไม่มี Theta-bound เนื่องจากเป็น O (n ^ 2) และ Omega (n)
Peter Taylor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.