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