Cyber-Warrior.Org \ Doküman \ Programlama > Temel Algoritmalar 1
| Madde |
| |
Yazar : //Y!G!D0// |
| |
Date : 23.10.2010 14:46:51 |
| |
# Temel Algoritmalar 1 |
| |
1. SIRALAMA
Genellikle s iralama (sorting) islemlerini veritabaninda kullaniriz.
I sim bilgileri harf sirasinda, telefon bilgileri alan kodlarina siraliolarak
istenebilir. Program imiz bu olanaklarisaglamalidir. Çok gerekli olan bu
i slemlerin algoritmasikarmasik olabilir. Programinizin siralama hizida
önemlidir. Örne gin 15 ismin siralanmasidakikalarca sürmemelidir.
Bu bölümde görece giniz bilgisayar bilimi çalismalari, en kisa sürede en etkili sekilde
s iralama için düzenlenmistir.
Büyük O Gösterimi
Bir algoritman in etkinligini ölçmek için bilgisayar programcilari“Büyük O
Gösterimi”ni tasarlam islardir. Büyük O, bir algoritmanin yönetmesi gereken bilgi
miktar inin islenme hiziniölçer.
Programc ilar genellikle aynimiktardaki verinin, farklialgoritmalardaki islem süresini
bilmek isterler. Ortalama ve en kötü durum senaryosu üretirler. “Büyük O” sayesinde
program için en uygun algoritma seçilir.
Mesela isimlerin s iralanacagibir algoritmada, isimlerin sayisiprogramin hizini
etkiler. Bu O(n) ile gösterilir. “O” s iralama büyüklügü, “n” de nesne sayisidir. “n”
boyutundaki bir problemin çözümünde geçen ad im sayisiT(n) = 4n² - 2n + 2 olarak
bulunabilir.
1.1. Ekleme S iralamasi
Ekleme s iralamasi(insertion sort) aslinda bir kart oyunundaki kartlarin siralanmasina
benzetilebilir. Da ginik durumdaki kartlardan iki tanesini elinize alirsiniz, üçüncüsünü
di gerlerinin yaninda uygun bir yere eklersiniz. Her kart aldiginizda digerlerinin içinden
uygun olan yere eklersiniz. Böylece kartlar s iralihâle gelir.
Bu yöntem ile basitçe program, kar isik olan sayilarisu adimlar ile siralar:
1. Ilk iki eleman listeden alinip, karsilastirilir, gerekirse yerleri degistirilir.
2. Bir sonraki eleman al inip, önceki siralielemanlar içinde uygun yere eklenir.
3. Ikinci adim siralama bitene dek tekrar edilir.
Ekleme s iralamasinda önce diziye* rastgele degerler yükleriz. Dizinin ikinci
eleman indan baslayan bir ana döngü içinde programiyazariz. Bir sonraki dizi elemanigeçici
olarak bir de giskene aktarildiktan sonra, bu degeri aktif dizi elemaniile karsilastiririz. Eger
“geçici de ger” küçük ise baska bir döngüde, siraliolan kisimda bu degerin yeri bulunur. Dizi
s iralanana dek bu islem devam eder.
1.2. Balon S iralamasi
Balon s iralamasinda (bubble sort) karisik durumdaki sayilar suyun içindeki balonlar
gibi hareket ederek yerlerini bulurlar. Say ilar tekrarliolarak kontrol edilerek yakin sayilar bir
araya getirilir.
1. Ilk iki eleman karsilastirilir, gerekirse yerleri degistirilir.
2. Listede bir sonraki elemana gidilerek, bir önceki eleman ile kar silastirilir.
3. Liste sonuna kadar 2. ad im tekrar edilir.
4. 1 ve 3. ad im, tüm listenin siralamasibitene dek tekrar edilir.
Önce veri listesi haz irlanir. Ön sartlibir ana döngü içine, sinirlariilk elemandan
sondan bir önceki elemana kadar olan bir döngü yap ilir. Seçili elemanin degeri ile dizinin
sonraki eleman inin degeri karsilastirilir. Eger büyük ise iki dizi elemaniyer degistirilir. Dizi
sonuna kadar tarama ve yer de gistirme islemleri devam eder. Bu döngü tekrar edilir ve
de gisiklik kalmamisise ana döngü sonlandirili
1.3. Kabuk S iralamasi
Kar isik durumdaki listede, en sondaki elemanien basa getirmek zaman kaybidir. Bu
sebeple programc ilar kabuk siralamasi(shell sort) algoritmasinigelistirmislerdir.
“Böl ve yönet” mant igiile tüm dizinin siralanmasiyerine, küçük parçalar halinde dizi
s iralanir. Küçük listeler siralandiktan sonra, listeler birlestirilir.
Asl inda kabuk siralamasi balon ve ekleme siralamasini hizlandirmak için
geli stirilmistir. Yani farklibir siralama algoritmasidegildir.
1. Büyük liste küçük listelere bölünür.
2. Küçük liste balon veya ekleme s iralamasiile siralanir.
3. Resim 1.7’deki örnekte 15 ve 29 rakamisiralanmasina gerek yoktur. 16 ve 4
rakam isiralanir, 78 ise isleme girmez.
4. 3. ad imda sadece 4 ve 16’nin yeri degisir, tekrar dizi küçük listelere bölünür.
5. Dizide 15, 78 ve 16 s iralanir, 4 ve 29 rakamlarinin siralanmasina gerek yoktur.
6. Liste s iralamasitamamlanana kadar 2 ve 4. adimlar tekrarlanir
Ba sla
Say isal Dizi Veriler(5)
Say isal i, Geçici, Dur, Geç, X, Sinir
Yaz; "Siralanacak veriler:"
Döngü i = 1, 5, 1
Veriler(i) = Rasgele(100)
Yaz; Veriler(i)
Döngü Bitti
X = tamsay i(5 / 2)
I ken (X > 0)
Dur = 0
S inir = 5 – X
I ken (Dur = 0)
Geç = 0
Döngü i = 1, S inir, 1
E ger (Veriler(i) > Veriler(i + X)) Ise
Geçici = Veriler(i)
Veriler(i) = Veriler(i + X)
Veriler(i + X) = Geçici
Geç = 1
E ger Bitti
Döngü Bitti
S inir = Geç – X
E ger Geç = 0 Ise Dur = 1
I ken Bitti
X = tamsay i(X / 2)
I ken Bitti
Yaz; "Sirali liste:"
Döngü i = 1, 5, 1
Yaz; Veriler(i)
Döngü Bitti
Bitir
1.4. H izliSiralama
H izlisiralama (quick sort) diger yöntemlere göre daha çok kullanilir. Bu yöntemde
listenin ortas indan bir eleman alinir, elemanin degerine göre sol veya sagdaki degerler yer
de gistirir.
Liste yar iya bölündükten sonra, her ayrilan parça tekrar yariya bölünür. Alt parçalar
kendi aralar inda siralanir. Küçük parçalar birlestirilerek tüm listenin siralihali olusturulur.
1. Listenin ortas indan bir eleman seçilir. Seçili elemandan büyük olan elemanlar
sa ga, küçük olanlar sola yer degistirilir.
2. 1. ad im listenin her yarisiiçin tekrar edilir.
3. Küçük listeler birle stirilir, siraliliste elde edilir.
Kendini tekrar eden fonksiyonlara “ tekrarlamali- recursive” fonksiyon denir. Basit
olarak fonksiyonun kendini ça girmasidir. “Hizlisiralama”da bu yöntem kullaniliyor. Bu
sebeple s iralama için alt program yapmamiz gereklidir.
1.5. S iralama Algoritmalari
Ekleme, balon, kabuk ve h izlisiralama yöntemleri ile karisik listelerin degisik
metotlar ile s iralanabildigini gördünüz.
Genellikle küçük listelerde ekleme s iralamasi, neredeyse siraliolan bir listede balon
s iralamasi, hiz gerektiren yerlerde hizlisiralama kullanilir. Fakat kodlamak için gereken
zamandan tasarruf etmek için, programc ilar dilin içine “hazir” bulunan siralama komutlarini
tercih ederler. Örne gin, su sekilde bir komut olabilir:
s irala diziAdi, ilkEleman, sonEleman
Dilin kendi komutunu kullanman iz tavsiye edilir, fakat komut yavasliga neden oluyor
ise, kendi algoritman iziolusturunuz.
ALINTIDIR!!!
kaynak=megep.meb.gov.tr |
| |
|
| |
|
|