สัญลักษณ์ Big Oh (O, Theta, Omega) เป็นเรื่องเกี่ยวกับอัตราการเติบโตของฟังก์ชั่น
เมื่อคุณใช้อัลกอริทึมมันมีลักษณะบางอย่างที่รันไทม์เปลี่ยนแปลงเมื่อคุณเพิ่มชุดข้อมูลที่ทำงาน ตอนนี้คุณอาจปรับอัลกอริทึมให้เร็วขึ้นโดยใช้ตัวคูณที่ 100 แน่นอนว่านี่ยอดเยี่ยม แต่โดยหลักแล้วมันยังคงเป็นอัลกอริธึมเดียวกัน ในอีกไม่กี่ปีข้างหน้าคอมพิวเตอร์อาจเร็วกว่าคอมพิวเตอร์ทั่วไปถึงสองเท่า
สัญกรณ์กุ๊บย่อปัจจัยเหล่านี้ออกไป ไม่สนใจว่าอัลกอริทึมfจะเร็วเป็นสองเท่าของอัลกอริธึมอื่นหรือไม่g: gสามารถปรับให้ทำงานเร็วขึ้น 4 เท่าหรือคุณอาจซื้อฮาร์ดแวร์ที่เร็วกว่าแทนก็ได้ หากคุณมองจากมุมมองนี้คุณอาจบอกว่ามันเป็น "เหมือนเดิม" (ไม่ได้บอกว่าคุณทำได้ (เสมอ) ละเว้นปัจจัยคงที่ในทางปฏิบัติ)
บิ๊กโอระบุขอบเขตบนมันคล้ายกับ<=ความสัมพันธ์
คุณจะยอมรับว่า1 < 2เป็นจริง นั่นหมายความว่า1จะต้องไม่น้อยกว่าหมายเลขอื่นหรือไม่? ไม่แน่นอน 1มีจำนวนอนันต์ของตัวเลขที่มีขนาดใหญ่กว่าคือ
ด้วยอัตราการเติบโตก็คล้ายกัน O(n)หมายถึงชุดของฟังก์ชั่นทั้งหมดที่เติบโตเป็นเส้นตรง (หรือช้ากว่า) O(n^2)ในทางกลับกันหมายถึงฟังก์ชั่นเหล่านั้นทั้งหมดที่เติบโตขึ้นด้วยสมการกำลังสอง (หรือช้ากว่า) ฉันแน่ใจว่าคุณจะยอมรับว่าฟังก์ชันเชิงเส้นเติบโตช้ากว่าฟังก์ชันสมการกำลังสอง
นี่คือเหตุผลที่ฟังก์ชันสามารถอยู่ในคลาส "บิ๊กโอ" มากกว่าหนึ่งคลาส
นี่คือการเปรียบเทียบฟังก์ชันที่แตกต่างกับ
: (จากคณิตศาสตร์คณิตศาสตร์ของ Knuth)

จากซ้ายไปขวาฟังก์ชั่นจะเติบโตเร็วขึ้น
นอกจากนี้
ความหมาย n ^ 2 เติบโตเร็วกว่า n ^ 1 เพราะ 2> 1
คำนิยาม

"f เติบโตเร็วกว่าหรือเร็วกว่า g"

"f เติบโตช้าลงหรือเร็วพอ ๆ กับ g"

การรวมกันของทั้งสองข้างต้น มันบอกว่าฟังก์ชั่นfเติบโตขึ้น "อย่างเท่าเทียมกันอย่างรวดเร็ว" gเป็น มันคือความสัมพันธ์ที่เท่าเทียมกัน
การตีความ
สมมติว่าคุณมีสองขั้นตอนวิธีการและfg
อวสาน
สมมติว่า
,
หมายถึงว่าไม่ว่างบประมาณของคุณไม่มีจำนวนคงที่ของพลังในการคำนวณที่คุณสามารถเพิ่มไปยังระบบของคุณเช่นที่มักจะทำงานให้เร็วที่สุดเท่าfg
ใหญ่มาก
สมมติ
,
หมายความว่าถ้าคุณมีข้อมูลมากพอที่fจะทำงานได้เร็วกว่าเสมอgไม่ว่าอำนาจการใช้คอมพิวเตอร์มากคุณเพิ่มไปยังระบบของคุณ
พิสูจน์
หากคุณพยายามพิสูจน์สิ่งนี้จริงๆคุณต้องแสดงโดยใช้คำจำกัดความของสัญลักษณ์รถม้าที่ฟังก์ชั่นของคุณตรงตามเงื่อนไขที่จำเป็น
ดังนั้นคุณต้องไปหาค่าc, d, n_0เช่นว่าสภาพถือ
นี่คือวิธีที่คุณสามารถทำได้สำหรับขอบเขตล่างด้วยc:

สิ่งสำคัญคือต้องตระหนักว่าฉันกำหนดโดยพลการcว่าเล็กกว่าa-1ดีอย่างสมบูรณ์ คำจำกัดความของ Theta (g) กล่าวว่า "มีc" มันอาจเป็นค่าใดก็ได้ตราบใดที่มันใหญ่กว่า 0 (ถ้าaเป็นจำนวนจริงบวกคุณจะต้องเปลี่ยนการพิสูจน์เล็กน้อยอย่างไรก็ตามเพราะa - 1อาจเป็นค่าลบ)
(ฉันสมมติว่าaเป็นค่าบวกมิฉะนั้นฟังก์ชันจะเป็นค่าลบเสมอสำหรับค่าขนาดใหญ่nซึ่งไม่สมเหตุสมผลสำหรับฟังก์ชันที่แสดงถึงรันไทม์)
คุณสามารถลองทำเพื่อขอบเขตบนมันค่อนข้างคล้ายกัน หากคุณไม่ทราบวิธีฉันสามารถให้หลักฐานกับคุณ
คำแนะนำ: เริ่มต้นด้วย d > a + 1
ความสนใจ
เป็นสิ่งสำคัญที่คุณไม่ต้องพิสูจน์ว่าผิดวิธี หากคุณคิดว่า (+ +) อยู่ใน O (n) และไปจากที่นั่นคุณยังไม่ได้พิสูจน์สิ่งที่คุณต้องการ คุณจะต้องตรวจสอบว่าทุกขั้นตอนของคุณไปที่วิธีการทั้งสองคือแทนที่จะคุณมี=><=>