Arama Algoritmaları ve Algoritma Karmaşıklığı

  • Konuyu Başlatan Konuyu Başlatan SYN_T3SL4
  • Başlangıç tarihi Başlangıç tarihi
  • Görüntüleme 954
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

SYN_T3SL4

If you can't handle it you will win nothing !
Katılım
11 Mart 2016
Mesajlar
990
Elmaslar
887
Puan
19.300
Yaş
25
Konum
Aydın / Kuşadası
Minecraft
SYN_T3SL4
08.02.2021 tarihinde "Algoritma Karmaşıklığı" konulu bir yazı paylaştım. Bu yazıda her ne kadar algoritma karmaşıklığından ve genel hatlarıyla algoritmalardan bahsetsemde arka planda birçok konuya daha değinilmesi gerekiyor. Bunlardan en önemlileri arama algoritmaları.

Düşünsenize bir claim eklentisi yapacaksınız ve bunun için birden fazla kontrolle sonuca ulaşmanız gerekiyor. Sunucuyu yormadan en kısa yolu nasıl seçeceksiniz. Kendi eklentim olan T3SL4Claim'den alıntılar yaparak bir sorunu çözüme kavuşturmayı düşünüyorum. Bu sayede en basit arama algoritmasından daha da üst seviyelere çıkabiliriz.

Öncelikle bir algoritmanın / bir fonksiyonun karmaşıklığının hesaplanmasına değinmek istiyorum.

Hesaplamaları yaparken değerlendirme kriteri satırların adi satır olup olmadığıdır.

Örneğin:
int claimHoloSlot;
bu satır bir adi satırdır ve karmaşıklığa etkisi 1'dir.

for(int i=0; i<claimHoloSlot; i++) {
}

Bu satırın karmaşıklığa katkısı n'dir. Burada n döngünün uzunluğunu ifade eder.

for(int i=0; i<claimHoloSlot; i++) {
for(int j=0; j<claimHoloSlot+2; j++) {
}
}

Bu satırın karmaşıklığa katkısı ise n^2'dir (n kare). Sebebi ise çift döngü olmasıdır. Yani içteki döngü dıştaki kadar dönecek bu n dir bir de içteki döngünün kendi değeri olan n var buradan da n^2 elde edilir.

Bu konuda değerlendireceğim sıralama algoritmalarına değinirsek:

- Linear search,
- Binary search.

Linear Search:
Çoğunlukla kullanılan arama algoritması linear search'tür. Bunun sebebi hem her duruma rahat bir şekilde uyarlanabilmesi hem de yapısı itibariyle basit olmasıdır.

Şimdi karşımızda 10 kişi olsun ve bu 10 kişiden sadece 1'i mavi gözlü olsun. Yazacağınız programın amacı ise bu 1 mavi gözlüyü bulmak olsun. O zaman ne yaparsınız 0'dan başlar 9'a kadar gidersiniz ta ki mavi gözlüyü bulana kadar. Mavi gözlü 0. kişi de çıkabilir 9. kişi de bu tamamen girilen veriye bağlıdır. İşte bu tarz bir arama linear yani doğrusal aramadır. Ve doğrusal arama bazen worst case (Big-O) bazen de Theta notasyonunu verebilir.

Binary Search:
Binary search algoritması için öncelikle girilen verileri sıralamanız gerekmektedir. Sıralama algoritmalarına daha sonra değineceğim için şimdilik sıralanmış olarak varsayabiliriz. Sıralı bir liste üzerinde arama yaparken algoritmanız her aramada listenizi parçalayacaktır bu da karmaşıklığa pozitif olarak etki edecek. Binary search algoritmasının karmaşıklığı (log n)'dir.

Girilen verinin uzunluğu (n) = 100 olsun

Linear search big-O'su = O(n)'den 100'dür.

Binary Search big-O'su = O(log n)'den log100 'dür buradan da 2 bulunur.

Aradaki zaman farkı hafife alınmayacak kadar fazladır.

Şimdiden bol kodlamalar dilerim :))
 
Sana tweet atarak sormayı düşünüyordum ama engellemişsin sanırım beni atamadım. Ullimemati'ye çalışıyorsun sanırım.
 
Sana tweet atarak sormayı düşünüyordum ama engellemişsin sanırım beni atamadım. Ullimemati'ye çalışıyorsun sanırım.
Allah allah hocam şaşırdım şuan tam olarak nereden engellemişim ki
 
Adam profil fotoğrafının hakkını veriyor canım :D
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst