Big O yerine neden Big O öğretiliyor?


21

Big O notasyonu bir fonksiyona üst sınır sağlarken Big Theta sıkı bir sınır sağlar. Ancak, Big O notasyonunun tipik olarak (ve enformel olarak) öğretildiğini ve gerçekten Big Theta anlamına geldiklerinde kullanıldığını buldum.

örneğin "Quicksort O (N ^ 2)", "Quicksort ort (N ^ 2)" ifadesine daha güçlü bir ifadeye dönüşebilir.

Big O kullanımı teknik olarak doğru olsa da, Big Theta'nın daha yaygın kullanımı daha anlamlı olamaz ve daha az karışıklığa yol açmaz mı? Bu Büyük O'nun daha sık kullanılmasının tarihsel bir nedeni var mı?

Vikipedi notları:

Gayri resmi olarak, özellikle bilgisayar bilimlerinde, Big O notasyonunun, genellikle Big Theta notasyonu kullanmanın belirli bir bağlamda daha uygun olabileceği durumlarda, bir asimptotik sıkı sınır tanımlamak için suiistimal edilmesine izin verilir.


3
Bunun gerçekten soru ile ilgili olmadığını biliyorum, ancak quicksort teta değil (N ^ 2). O (N ^ 2).
jsternberg

Büyük O, yeni başlayanlar / CS olmayan kişilerin bilmesi gereken şeydir. Büyük Teta, algoritmalar için girişte kapsanan ve her ana tarafından alınmayacak olan şeydir. Bir algoritma sınıfı olan kişiler, isterlerse daha derin olan Büyük O notalarını okuyabilirler. Wikipedia alıntılarının ne anlama geldiğinden emin değilim. Akademik yayınlarla, Büyük O ve Büyük Theta'yı karıştırırsanız, bir konferansta boğazınızı keseceksiniz. Bazı insanlar hayatlarını Theta'yı kovalayarak geçirirler ve bunlar HARD HARD problemleridir.
İş

@jsternberg Teknik olarak haklısın. Bu da doğrudur, ancak anlamsızdır: "Her durumda Quicksort (en kötüsü, en iyisi, ...) O (n ^ 100). Ama OP ile aynı fikirdeyim: Daha doğru olması gerekir: 2), QuickSort en iyi durum Theta (NlogN) 'dır çünkü her durumda farklı işlevler göreceğiz
Eldar

Yanıtlar:


26

Çünkü performansı analiz ederken genellikle sadece en kötü durumla ilgileniyorsunuzdur. Böylece, üst sınırın bilinmesi yeterlidir.

Belirli bir giriş için beklenenden daha hızlı çalıştığında - sorun değil, önemli nokta bu değil. Çoğunlukla önemsiz bilgidir.

@Peter Taylor'ın belirttiği gibi, bazı algoritmalar hiç sıkı bir bağa sahip değildir. Örneğin O (n ^ 2) ve Omega (n) olan quicksort'a bakınız.

Ayrıca, sıkı sınırların hesaplanması genellikle daha zordur.

Ayrıca bakınız:


6
Fakat Big O mutlaka en kötü durum performansına karşılık gelmiyor. Quicksort O (2 ^ n) içinde çalıştığını ve% 100 doğru olduğunu söyleyebilirim. X algoritmasının O (N ^ 2) yerine Theta'da (N ^ 2) çalıştığını söylersem çok daha anlamlı olur.
tskuzzy

Ayrıca, yalnızca bir üst sınırtan ziyade algoritmaları analiz ederken sıkı sınırlar hemen hemen her zaman hesaplanır. İnsanların neden sadece daha etkileyici teta gösterimleri kullanabildiklerini kullanmadığını soruyorum.
tskuzzy

9
Neden çoğu programcının onu kullanmadığını söyledim. Tembeliz ve fazla hassasiyete ihtiyacımız yok. Eğer istersen kimse seni büyük teta kullanmasını engellemez. Devam et, yap. Algoritma seçiminiz büyük olasılıkla bundan pek fayda görmeyecektir. Büyük O notaları tarafından karıştırılan bir programcıyı hiç duymamıştım. Ben de bunu kafa karıştırıcı bulmuyorum.
Falcon,

9

Bunun bir nedeni, Θ sadece bilinmeyen birçok durumun olmasıdır. Örneğin, Matrix çarpımı O (n ^ 2.376) 'dır, ancak bilinen sıkı bir sınır yoktur. Tabii, bildiğim kadarıyla söyleyebilirim, orada olan Matris çarpımı giden bir sıkı ama biz değerini bilmiyoruz.


Ancak bu, belirli bir algoritma değil, bir problemin çalışma süresi için sınırlar olacaktır. Genel olarak matris çarpımı kübik zamandan daha hızlı bir şekilde çözülebilirken, naif algoritma ne olursa olsun Θ (n ^ 3) olur.
tskuzzy

5
@tskuzzy, quicksort alın. Theta bağlı değil, çünkü O (n ^ 2) ve Omega (n).
Peter Taylor,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.