Algoritma Analizi

SalvadorTR

Üye
25 Ocak 2016
155
9
İzmir
Merhaba Vakit Bulamadığım İçin Böyle Şeyler Paylaşamıyorum Herkese hitap eden bir konu değil, küçük çocukların peşinden koştuğu pamuk şeker bu konuda yok malesef. Gönül isterdi ki, herkes bir taraftan algoritma örnekleri paylaşsın, algoritmanın hızı hakkında yorum yapsın, hesaplasın falan işte. Biz de böyle hayaller kuruyoruz

Donanım derslerimizi de tekrar ediyoruz ama, yazılımı da ihmal etmiyoruz...

Konu zor desem yalan olur. Sadece biraz mantığı kullanmak gerekiyor. Ezber yok, mantık var. Zaten ezberle algoritma mı olur? Ezber yapılan yerler var mıdır, vardır. Ama ona da tam ezber denilmez. Kısmi ezber.

Mesela bir dizide arama yapacaksınız.Bu dizi küçükten büyüğe sıralı olsun. Dizi n elemanlı ve tüm elemanların üzerinden, baştan başlayıp teker teker geçmeniz size n zamana mâl olacaktır. Bir de dizinin çok büyük olduğunu (2^32 elemanlı örneğin) düşünün. O zaman algoritmanın ifadesi(böyle değil ama, basite indirgemek adına) O(2^32) olur. Yani 2^32 defa çalışacaktır.

İşte böyle bir arama yerine, daha kısa sürede bu işlemi yapabilecek başka algoritmaları kullanabiliriz. Bunlardan bir tanesi İkili arama algoritması. Bu algoritma kısaca şöyle çalışır. Önce diziyi ortadan ikiye böler, ve ortadaki elemana bakar. Eğer bu ortadaki eleman, aradığımız ifadeden küçükse, dizinin ilk yarısını atar ve ikinci yarısını ele alır. Sonra ele aldığı ikinci yarıyı da ikiye bölüp ortasına bakar. Böyle bu şekilde bulununcaya kadar ya da tek eleman kalıncaya kadar devam eder. Bu algoritmanın zaman hesabı logn şeklinde hesaplanıyor. O zaman eleman sayımızı yerine koyarsak,


log2^32 = 9.63


Gördüğünüz gibi, daha az adımda işi bitirdi :)


Kısaca, illa ezber olacaksa bu tür algoritmaların mantığı öğrenilsin, hesaplama formülleri ezberde tutulsun. Onun dışında for döngüsü olacaktı, yok while döngüsü olacaktı şeklinde algoritmayı ezberlemenin kimseye bir faydası olmaz.

Sanırım buraya kadar bir sıkıntı yok. Şimdi yukarıdaki logaritmayı görüp de, "Matematik varsa ben iptal beyler" diyenleriniz varsa darılırım yani.. Basit bir işlem, işin içinde türev integral yok. Olanlar var tabi ama, ben burda algoritma analizinin çok basit bir şekilde nasıl yapıldığını anlatmaya çalışıyorum,o konulara girmek istemiyorum. Zaten bunların hesabı bir tabloda verilmiş, hangi algoritmayı kullanacaksanız karşısında işlem var yerine koyup hesaplarsınız. Olmadı hesap makinesi var...


[url=https://hizliresim.com/YdVbzl][/URL]

Şimdi gelelim bir algoritmanın iyi ve kötü durumlarına. Yukarıdaki Worst Time Complexity sütunu, yani en kötü durum karmaşıklığı, aradığımız elemanın dizinin en sonunda bulunma ihtimalindeki zaman hesabını verir. Yani diyelim ki dizinin üzerinden teker teker gittik ve dizinin sonunda bulduk. Bu durumda doğrusal arama için karmaşıklık O(n) oluyor. Yani dizinin sonuna kadar gidiyoruz ve n kadar işlem yapıyoruz.

Best time complexity sütünu da, en iyi durumdaki zaman karmaşıklığını veriyor. Yani aradığımız eleman dizinin başında ise, doğrusal aramamıza göre O(1) yani ilk aramada bulacaktır.

Algoritma analizini, bu yazıda popüler* algoritmalar üzerinde yaptık. Yani zaten ne olduğu belli olan algoritmalar. Ancak herkesin yazdığı kod bir değil, herkes bir şablona göre kod yazmıyor. İşte kendi yazdığınız kodu analiz etmenin de yolları vardır. Onu da inşallah unutmazsam vakit bulduğum bir zamanda anlatmaya çalışacağım. Bu arada konularıma 1,2 şeklinde numara vermiyorum artık, çünkü devamını getirmeyince hiç te iyi bir görüntü oluşturmuyor...



Emeğe Saygı Lütfen. :Smiley1022::Smiley1011:
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.