Cyber-Warrior.Org \ Doküman \ Programlama > Temel Algoritmalar 2
| Madde |
| |
Yazar : //Y!G!D0// |
| |
Date : 28.10.2010 16:24:00 |
| |
# Temel Algoritmalar 2 |
| |
2. ARAMA
S iralama adimindan sonra en önemli konu “arama” islemidir. Isim ve adres bilgilerini
saklayan bir programda, bilgilerin s iralanmasive aranmasialgoritmalarina ihtiyaç duyulur.
Örne gin;Ankara’da yasayan “F” harfi ile baslayan isimlerin listelenmesi istenebilir.
Arama i sleminin hizliolmasiiçin genellikle programlar verileri önce siralarlar.
S iralama ve arama islemleri, uygun algoritma seçilerek hizlive etkin olarak yapilir. Ayrica
s iralilistede minimum ve maksimum deger otomatik olarak bulunmusolur. Listenin en
ba sindaki eleman en küçük degere, liste sonundaki eleman ise en büyük degere sahiptir.
2.1. S irali(Ardisik) Arama
S iraliarama (sequential search) listedeki tüm bilgileri tarama yöntemidir. Liste, bagli
liste veya dizi olabilir.
Evinizin kapianahtarinikaybettiginizde, siraliarama yöntemini kullanarak anahtari
aramak istersek, apartmandaki tüm odalar itek tek arama yolu ile yapabiliriz. Eger anahtar ilk
odalarda ise h izlibir sekilde anahtarinizibulursunuz. Yani küçük listelerde bu arama
yönteminin yava sliginihissetmezsiniz bile. Tüm sehri aramaniz gerektigini düsünün, arama
h iziçok yavasolurdu.
Aramay iister baslangiçtan, isterseniz listenin sonundan baslatabilirsiniz. Aranan bilgi
bulundu gunda arama islemi sona erer.
2.2. Ikilik Arama
I kilik arama† (binary search) siralihaldeki bir listede hizlica arama yapmamizisaglar.
Uzun liste ikiye bölünür, aranan bilgi hangi yar ida ise, o yariiçinde arama yapilir. Sayi
bulunana kadar liste yar iya bölünerek arama islemi devam eder.
On elemanl idizide 37 rakaminibulmak için, önce dizinin ortasindaki eleman olan 30
ile aramaya ba slanir. 37 rakami30’dan büyük oldugu için sagtaraftaki yarida arama
yap ilacaktir.
† Ikilik arama sadece siralihâldeki listeler içindir
Kalan be ssayida ortadaki 59 ile aranan sayiolan 37 karsilastirir. Bu sefer de sol
tarafta arama yap ilacaktir. Elimizde iki sayikaldi. Listedeki ilk eleman aranan sayiile
kar silastirilir. 37 rakamiüçüncü adimda bulunmusoldu. Siraliarama yönteminde olsaydi
alt inciadimda arama bitecekti.
Ikilik arama yönteminin akissemasiniçiziniz. Test degerleri seçip, akissemanizi
deneyiniz.
“Yari” degiskeninin degeri bulunmasinda bir açik vardir. Eger “Sol ve Sag”
de giskenlerinin toplamitam sayidegiskenin sinirlarinigeçerse, program hata verip kapanir.
Bu sorunu nas il çözebilirisiniz?
Çözüm önerisi: ( tamsayi () komutu ondaliklisayinin tam sayikisminiverir.)
2.3. K iyma (Hashing) Yöntemi
K iyma veya kiyim yöntemi (hashing search) yeri hemen hemen bilinen degerleri
bulmak için yap ilmistir. Mesela, evinizin anahtarinigenellikle belli bir yere koyariz veya bir
yere asar iz. Böylece bulmamiz kolaylasir. Programda aramayikolaylastirmak için elimizdeki
de gerleri dizide belli yerlere atacagiz.
2.3.1. K iyma Fonksiyonu
Bir veri yap isi(dizi veya bagliliste) içine degerler için, kiyma veya kiyim degeri
( hash value) hesaplanir. Kiyma degeri, kiyma fonksiyonu (hash function) yardimiile
bulunur. K iyma fonksiyonu sayesinde, “aranan deger” tüm listede aranmasiyerine, belli bir
yerde aranarak bulunur. Örne gin bir arananDeger adlitam sayiyidizide aradigimizi
dü sünelim; önce “kiyma degeri” bulunur:
K iymaDegeri = arananDeger % 5
//mod bulmak için ba ska bir yöntem:
K iymaDegeri = arananDeger – (tamsayi(arananDeger / 5) * 5)
Bu formül bize say inin bese bölümünden kalan sayiyi“kiyma degeri” olarak verir.
Hangi say isaklanmisolursa olsun kiyma degerleri 0, 1, 2, 3 veya 4 olabilir. Mesela 26
rakam inin 5’e bölümünden kalan degeri 1 oldugu için, 26 degerini dizinin 1. elemanina
atayabiliriz.
Uzun listelerde k iyma yöntemi ile arama çok hizlibir sekilde yapilabilir.
2.3.2. K iyma Yönteminde Çakismalar
K iyma fonksiyonu ile tek olan degere sahip bir sayiüretilir. Farkliliste elemanlarinin
ayn ikiyma degeri olabilir. Mesela, 7 ve 32 degerlerinin 5 ile bölümünden kalan sayi2’dir.
Ayn ikiyma degeri birden fazla sayida ise, buna çakisma (collision) denir. Çakismalari
kontrol alt ina almak için, aynikiyma degerine sahip olan elemanlar bir yapida toplanir. Iki
boyutlu bir dizi veya ba gliliste içine çakisanlar tutulabilir.
Dizi veya ba gliliste büyüyebilir veya hafizada fazla yer kaplamamasiiçin
k isaltilabilir.
2.3.3. K iyma Yönteminde Arama
De gerler listeye kaydedildikten, sonra arama islemi kiyma fonksiyonu ile rahatlikla
yap ilabilir. Aynikiyma degerine sahip elemanlar da kendi aralarinda taranir
E ger her elemanin kendi tek (unique) kiyma degeri var ise, kiyma fonksiyonu
sayesinde tek ad imda arama islemi tamamlanir. Birden fazla kiyma degeri olan elemanlar ise
en az indan küçük bir liste halinde oldugundan, arama islemi fazla zaman kaybina neden
olmaz. Bu küçük listede s iraliveya ikilik yöntemleri ile arama yapilabilir.
Kiyma arama yönteminde olusan alt listelerde nasil arama yapilabilir? Hangi arama
yöntemini tercih edersiniz?
K isa listelerde kolay kodlanabilen “siraliarama”, hiz gerektiren daha büyük
listelerde “ ikilik arama” tercih edilir.
Çok büyük verilerde “ kiyma yöntemi” seçilebilir, ama kodlamasizordur. Önceden
de gerleri veri yapisina yerlestirme gerekliligi ve alt listede farklialgoritma ile arama
kullan ilmasigerektigi için kod yazimiuzun zaman alir.
ALINTIDIR!!!
kaynak=megep.meb.gov.tr
|
| |
|
| |
|
|