(bu daha uzun bir yanıt olduğundan, özet için kalın harfleri okuyun )
Örneğinizi alalım ve adım adım ilerleyerek yaptıklarımızın arkasındaki amacı anlayalım. Fonksiyonunuzla ve Big Oh notasyonunu bulma hedefiyle başlıyoruz:
f(n) = 6n+4
Birincisi, let O(g(n))
notasyonu Big Oh olmak biz bulmaya çalışıyoruz f(n)
. Büyük Oh tanımına bakıldığında, biz bulmalıyız basitleştirilmiş g(n)
bazı sabitleri vardır nerede c
ve n0
nereye c*g(n) >= f(n)
herkes için geçerlidir n
s' den büyüktür n0
.
İlk olarak, seçim yapalım g(n) = 6n + 4
(ki bu O(6n+4)
Big Oh'da gelir). Bu durumda şunu görüyoruz c = 1
ve herhangi bir değeri n0
Big Oh tanımımızdaki matematiksel gereksinimleri karşılayacaktır, çünkü g(n)
her zaman eşittir f(n)
:
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
Bu noktada matematiksel gereksinimleri karşıladık. Eğer durursakO(6n+4)
, bunun yazmaktan daha yararlı olmadığı açıktır, bu f(n)
yüzden Big Oh notasyonunun gerçek amacını kaçıracaktır: bir algoritmanın genel zaman karmaşıklığını anlamak! Böylece, bir sonraki adıma geçelim: basitleştirme.
Birincisi, Büyük Oh'un durumundan basitleştirebilir miyiz ? Hayır! 6n
O(4)
(Nedenini anlamıyorlarsa okuyucu için egzersiz yapın)
İkincisi, Büyük Oh'un olmasını basitleştirebilir miyiz ? Evet! 4
O(6n)
Bu durumda, g(n) = 6n
bu yüzden:
c*g(n) >= f(n)
c*6n >= 6n + 4
Bu noktada, c = 2
o zamandan beri sol tarafın her bir artışı için sağ taraftan (6) daha hızlı artacaktır (12) n
.
2*6n >= 6n + 4
Şimdi n0
yukarıdaki denklemin n
bu değerden daha büyük olan herkes için geçerli olduğu yerde bir pozitif bulmamız gerekir . Sol tarafın sağdan daha hızlı büyüdüğünü zaten bildiğimiz için tek yapmamız gereken tek olumlu çözüm bulmak. Bu nedenle, n0 = 2
yukarıdakileri doğru yaptığından, biliyoruz g(n)=6n
veya O(6n)
potansiyel bir Büyük Oh gösterimi f(n)
.
Şimdi, Büyük Oh'un öyle olmasını basitleştirebilir miyiz ? Evet! 6
O(n)
Bu durumda, g(n) = n
bu yüzden:
c*g(n) >= f(n)
c*n >= 6n + 4
c = 7
Soldan sağdan daha hızlı artacağından seçelim .
7*n >= 6n + 4
Yukarıdakilerin, n
daha büyük veya eşit olan herkes için geçerli olacağını görüyoruz n0 = 4
. Böylece, O(n)
potansiyel bir Oh Oh gösterimidir f(n)
. g(n)
Artık basitleştirebilir miyiz ? Hayır!
Son olarak, biz fark ettik için en basit Big Ah gösterimi f(n)
olduğunu O(n)
. Neden bütün bunları yaşadık? Çünkü şimdi bunun f(n)
doğrusal olduğunu biliyoruz , çünkü Büyük Oh notasyonu doğrusal karmaşıklıktır O(n)
. Güzel olan şu ki, zaman karmaşıklığını f(n)
diğer algoritmalarla karşılaştırabiliriz! Örneğin, artık biliyoruz f(n)
işlevlerine karşılaştırılabilir zaman karmaşıklığı ise h(n) = 123n + 72
, i(n) = n
, j(n) = .0002n + 1234
vb; çünkü yukarıda belirtilen aynı sadeleştirme işlemini kullanarak hepsinin doğrusal zaman karmaşıklığı vardır O(n)
.
Tatlı!!!