(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 cve n0nereye c*g(n) >= f(n)herkes için geçerlidir ns' 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 = 1ve herhangi bir değeri n0Big 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! 6nO(4) (Nedenini anlamıyorlarsa okuyucu için egzersiz yapın)
İkincisi, Büyük Oh'un olmasını basitleştirebilir miyiz ? Evet! 4O(6n) Bu durumda, g(n) = 6nbu yüzden:
c*g(n) >= f(n)
c*6n >= 6n + 4
Bu noktada, c = 2o 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 n0yukarıdaki denklemin nbu 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 = 2yukarıdakileri doğru yaptığından, biliyoruz g(n)=6nveya 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! 6O(n) Bu durumda, g(n) = nbu yüzden:
c*g(n) >= f(n)
c*n >= 6n + 4
c = 7Soldan sağdan daha hızlı artacağından seçelim .
7*n >= 6n + 4
Yukarıdakilerin, ndaha 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 + 1234vb; çünkü yukarıda belirtilen aynı sadeleştirme işlemini kullanarak hepsinin doğrusal zaman karmaşıklığı vardır O(n).
Tatlı!!!