Ortalama = (BestCase + WorsthCase) / 2
Karmaşıklık (Complexity) : Girdi küçük ise hafıza (space) ve zaman(time) karmaşıklığının pek de bir önemi yoktur. Yazılımda Hafıza-Zaman tradeoff’u vardır. Birinden kazanmak istiyorsak genelde bir diğerinden fedakarlık etmeliyiz. Eğer ikisinden birden aynı anda kazanç elde edebiliyorsak iyi bir şey bulmuşuz demektir.
Dinamik programlama -> Zamandan kazandırırken yerden kaybettiren bir yaklaşımdır.
Denormalizasyon -> Yer kaybettirirken zamandan kazandırır.
Algoritma seçimi yapılırken önemli olan nokta doğru yerde doğru algoritmayı kullanmaktır.
Örneğin , A ve B olarak adlandırdığımız iki algoritmamız olsun.
A’nın zaman karmaşıklığı 5.000n
B’nin zaman karmaşıklığı 1.1^n olsun
1.1^n 5000n e göre çok daha küçük bir sayıdır. Ancak ne zaman için 5000den küçük sayılar için.
n= 10 için A algoritması 50000 adımda biterken , B algoritmasi 3 adımda bitmektedir.
n = 1000 için A algoritması 5000000 adımda biterken , B algoritması 2.5.10^42 adımda bitmektedir.
Böyle olunca mesele doğru yerde doğru algoritmayı seçmekten geçmektedir ve bizim algoritmaları analiz ederken yapmamız gereken şey n=10,n=1000 değil n sonsuza giderkeni baz almaktır.
yukarıda görüldüğü gibi algoritma, 5000’den küçük n değerleri için A algoritması avantajlı iken 5000’den büyük n değerleri için durum değiştirmiştir ve B algoritması avantajlı olmuştur. Bu sebeple , bizim için n değerlerine göre algoritma analizi değil algoritmanın büyüme oranı yani growth rate’i önem arz etmektedir.