Büyük Oh notasyonu (O, Theta, Omega) fonksiyonların büyüme oranları ile ilgilidir.
Bir algoritma uyguladığınızda, veri kümesini artırdığınızda çalışma zamanının nasıl değiştiği belirli bir özelliğe sahiptir. Şimdi, algoritmayı 100 kat daha hızlı çalışacak şekilde optimize edebilirsiniz. Tabii, bu harika, ama aslında aynı algoritma. Benzer şekilde, birkaç yıl içinde bilgisayarlar bugünkünden iki kat daha hızlı olabilir.
Landau notasyonu bu sabit faktörleri soyutlamaktadır. Bir algoritmanın f
her zaman başka bir algoritmadan iki kat daha hızlı olup olmadığı önemli değildir g
: Belki g
4 kat daha hızlı çalışacak şekilde optimize edilebilir veya bunun yerine daha hızlı donanım satın alabilirsiniz. Eğer ona bu perspektiften bakarsanız, bunların "aynı" olduğunu söyleyebilirsiniz. (Bu, pratikte sabit faktörleri (her zaman) göz ardı edebileceğiniz anlamına gelmez.)
Büyük oh bir üst sınırı belirtir, <=
ilişkiye benzer .
Bunun 1 < 2
doğru olduğunu kabul edeceksiniz . Bu 1
, herhangi bir sayıdan daha az olamayacağı anlamına mı geliyor ? Kesinlikle değil. Daha büyük olan sonsuz sayıda sayı vardır 1
.
Büyüme oranları ile benzerdir. O(n)
"Heteroaril", lineer (veya daha yavaş) büyüyen tüm fonksiyonlar grubunu belirtir. O(n^2)
diğer taraftan, ikinci dereceden bir karmaşa (veya daha yavaş) ile büyüyen tüm bu işlevleri ifade eder. Eminim lineer bir fonksiyonun ikinci dereceden bir fonksiyondan daha yavaş büyüdüğünü kabul edersiniz.
Bu nedenle bir işlev birden fazla "Big-oh" sınıfında olabilir.
Farklı işlevlerin aşağıdakilerle karşılaştırılması : (Knuth'un Beton matematiğinden)
Soldan sağa fonksiyonlar daha hızlı büyür.
Ayrıca, n ^ 2 anlamı n ^ 1'den daha hızlı büyür çünkü 2> 1.
Tanımlar
"f daha hızlı veya eşit derecede hızlı büyür"
"f g kadar yavaş veya eşit derecede hızlı büyür"
Yukarıdaki ikisinin kombinasyonu. Fonksiyonun f
"eşit derecede hızlı" büyüdüğünü söylüyor g
. Bir denklik ilişkisi.
yorumlama
Diyelim ki iki algoritmanız var f
ve g
.
Omega
Varsayım , bütçeniz ne olursa olsun, sisteminize ekleyebileceğiniz sabit bir hesaplama gücü olmadığı anlamına gelir, böylece f
her zaman olduğu kadar hızlı çalışır g
.
Büyük oh
Varsaymak , yeterli veriye sahipseniz, sisteminize ne kadar bilgi işlem gücü eklediğinizden bağımsız olarak f
her zamankinden daha hızlı çalışacağı anlamına gelir g
.
Kanıt
Bunu gerçekten kanıtlamaya çalışıyorsanız, Landau notasyonunun tanımlarını kullanarak işlevinizin gerekli koşulları karşıladığını göstermeniz gerekir.
Eğer değerlerini bulmalıyız Yani c
, d
, n_0
durum böyle olduğu anlamına gelmemektedir.
Alt sınır için bunu şu şekilde yapabilirsiniz c
:
Keyfi c
olarak a-1
mükemmel olmaktan daha küçük olarak tanımladığımı fark etmek önemlidir . Teta'nın (g) tanımı "orada bir c
" vardır. 0'dan büyük olduğu sürece herhangi bir değer olabilir. ( a
Olumlu bir gerçek sayı ise, kanıtı biraz değiştirmeniz gerekir, ancak a - 1
aslında negatif olabilir)
( a
Olumlu olduğunu varsayıyorum , aksi takdirde işlev her zaman büyük değerleri için negatif olacaktır n
, bu da çalışma zamanını gösteren bir işlev için hiçbir anlam ifade etmez.)
Üst sınır için yapmayı deneyebilirsiniz, oldukça benzer. Nasıl olduğunu bilmiyorsanız, size bir kanıt sunabilirim.
İpucu: ile başlayın d > a + 1
Dikkat
Bunu yanlış bir şekilde kanıtlamamanız önemlidir. (An + b) 'nin O (n)' de olduğunu varsayar ve oradan giderseniz, ne istediğinizi kanıtlamış olmazsınız. Tüm adımlarınızın her iki yönde de gittiğini doğrulamanız =>
gerekir <=>
.