veri yapıları ve algoritmalar 1 (beta)
TRANSCRIPT
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
1/32
VER YAPILARI
VE ALGORTMALAR 1
Mustafa EGE
DERS NOTLARI
2008-2009 Gz Dnemi
byMuhammed DEMRBA
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
2/32
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
3/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 1 / 302008
BLM 0 DERSE GR (kitaplarda yazmaz!)Herkesin elinde referans olarak srekli bulunmas gereken bir kitap, C dilinin kurucusu Dennis Ritchie tarafndanyazlm: The C Programming Language, Dennis M. Ritchie Brain N. Kerninghan
Derste takip edilecek kitap: Fundamentals of Data Structures in C, Ellis Horowitz, Sartaj Sahni, Susan Anderson-Freed. Bu kitap ilk olarak Fundamentals of Data Structures ismiyle yazlm olup uygulamalar SPARKS dili zerindegerekletirilmiti. (Bu versiyonun eBook hali internette dolayor) Daha sonra C dili zerinde, en son da C++zerinde gerekletirilmi halleri piyasaya kt. Kodlarn yazld diller dnda kitabn ieriinde nemli birdeiiklik yok, hemen hemen ayn. Bununla birlikte en kapsamls C++ zerine yazlm olan. Biz dersimizde C dilizerinde yazlm olan kitab kullanacaz.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
4/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 2 / 302008
BLM 1 TEMELLER (s. 1)
SSTEM YAAM DNGS (System Life Cycle) (s. 1)
Genel olarak yazlmlar sistem yaam dngs (system-cycle) ad verilen bir sre iinden geerler. Bu srecinaamalar aadaki gibi tanmlanabilir.
1) Gereksinimler (Requirements): Programlamayla ilgili tm projeler, projenin amacn belirten artlarntanmlanmasyla balar. Gereksinmeler, programcya verilen girdiler ve bu girdiler sonucu retilmesi gerekenktlarn ne olmas gerektii sorusuyla tanmlanr.
2) zmleme (Analysis): Sistemin gereksinimleri belirlendikten sonra ilk yaplacak ilerden biri, problemi analizetmektir. ki yol vardr:
i. Aadan yukar (bottom-up) analiz: Problem paralara blnr ve her bir parann zerindeodaklalr. Proje zerinde tecrbe sahibi isek bu yolu tercih edebiliriz. Direk modlleri grerekproblemi modl modl zmleriz.
ii. Yukardan aaya (top-down) analiz: Proje konusunda bir master plan yaplr. Projenin amac
nedir?, Son rn ne olacak? gibi sorularla problem zm ynetilebilir. Problem alt paralara
blnr. Bu safhada eitli teknikler sz konusudur. Daha fazla zaman harcanr. Fakat geriye dnlerve hataya dme olasl daha azdr. Proje hakknda tecrbe sahibi deilsek bu yolu tercih edebiliriz.
3) Tasar
m (Design): Tasar
ma ay
rd
m
z vakit artt
ka hata oran
azalacakt
r. Bu aama, analiz aamas
ndakialmalarn devamdr. Tasarmc veri objelerini ve objeler arasnda bulunan ilikileri bu safhada tanmlar. Veriobjeleri, soyut veri tr tanmlanmasn, ilemler ise algoritmann tanmlanmasn gerektirir. Her ikisi deprogramlama dilinden bamszdrlar (language independent). rnein bir renci veri ktnn iermesigereken veri elerini belirleriz. Fakat bu ktk iin belirli bir gerekletirimi yapmam olabiliriz. Dier birdeyile, kodlama ayrntlarn vermemi olabiliriz. (Dizi, balal liste, aa veri yaps) Gerekletirimiertelemek suretiyle daha etkili bir gerekletirimi seme frsat yakalamamz mmkndr.
4) nceltme ve kodlama (Refinement and Coding): Belirlenen veriyaplar zerinde ilem yapacak algoritmalar bu aamada kodlarz.Veri objeleri gsterimi, algoritmalarn etkinliini belirlemedenemli rol oynayabilir. Benzer bir projede alm bir arkadamzla
yapacamz sohbet veya rettiimiz alternatif zmlerden biri,zm iin en iyi yaklam verebilir.
5) Dorulama (Verification): Bu safhada, gelitirilen programn doruluunun ispat, geni bir veri grubuzerinde test etme ve hatalardan arndrma ilemleri gerekletirilir. Bunlarn her biri bir aratrma konusudur.
i. Doruluk ispat (Correctness Proofs): Matematikte baz teknikleri kullanarak programn doruluuispatlanabilir. Fakat bu ilem byk projeler iin hem zordur, hem de zaman alcdr. Byk projeleriin batan sona bir ispat gelitirmek zaman kstlaycs nedeniyle neredeyse imkanszdr. Dahanceden doruluu ispatlanm algoritmalar kullanmak, hata saysn azaltabilir.
ii. Snama (Testing): Algoritmay bir programlama diliyle kodlama ihtiyac yok iken, kodlama safhasncesi ve kodlama safhas srasnda dorulama ispatlarn yapabiliriz. Fakat test etme ilemi iin
alan bir kod ve test verisine bu aamada gereksinim vardr. Test verisi, programa ait tm olassenaryolar ierecek biimde hazrlanmaya allr. Acemi programclar, program szdizimi hatas
Kodlamay ne kadargeciktirirsen, arka planda o
kadar iyi bir metotyakalayabilirsin.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
5/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 3 / 302008
(syntax error) vermeden almsa, programn doru olduunu zannederler. yi bir test verisi,programn her kesiminin doru olarak altn onaylamaldr. Bir programn hatadan arndrlm(error-free) bir program olmasnn yan sra programn iletim zaman (running-time) da nemlidir.Hatadan arndrlm, fakat yava alan bir programn da fazla deeri yoktur.
iii. Hata giderme (Error Removal): Doruluk ispat ve sistem testleri hatal kod ile uratmza iaretederse tasarm ve kodlama kararlarna bal olarak bu hatalar yok edebiliriz.
SEMEL SIRALAMA (Selection Sort) (s. 5)
Sral olmayan deerler ieren bir diziyi sralama algoritmas (s. 5):
for( i=0 ; i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
6/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 4 / 302008
list[i]yi deil,iyi dndr. Neden?
Hata deeri olan -1 iledizi eleman olabilecekbir -1 karmasn diye.
Programda SWAP makrosu kullanld. Bu makronun edeeri olan bir fonksiyon da kullanlabilirdi (s. 6):
voidSWAP(int*x,int*y){inttemp=*x;*x=*y;*y=temp;
}// -> end SWAP()
Bu durumda sort() fonksiyonu iindeki satr, u ekilde deitiririz ve artk temp deikeni gereksiz olur:
SWAP(&list[i],&list[min]);
ZYNEL ALGORTMALAR (Recursive Algorithms)
Btndeki zm mant alt problemlerde de geerli isezyinelemeli algoritmalar kullanlabilir.
Fonksiyonlar kendi kendilerini arabilecekleri gibi (directrecursion), ardklar bir fonksiyon tarafndan daarlabilirler (indirect recursion). zyineli algoritmalar hemgl algoritmalardr, hem de karmak yaplar daha rahat
aklayabilirler.
KL ARAMA (Binary Search) (s. 6)
Sral deerler ieren bir dizide bir deer aramak istiyoruz. Aranan deer dizi iinde bulunursa indis deerini,bulunamazsa -1 deerini dndrecek bir yordam yazacaz. Binary search (ikili arama) algoritmasn kullanacaz.
teratif (Dngsel) zm [ ))(lg(n ] (s. 9)
#define COMPARE(x,y) ( (x)
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
7/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 5 / 302008
parametrelerin kullanm gibi konulara bir aklk getirir. Bu ama iin dzenlenen yapya iletiim-denetimyaps yada yt erevesi ad verilir. Bir program denetimi ele aldnda sistem ytnn balangta ikideer ierdii gzlenir: dn adresi ve nceki yt erevesine gsterge. Eer ana yordam (main) iindebir fonksiyon arma sz konusu ise yerel (local) deikenler ve aran yordamn parametreleri yterevesine eklenir. Daha sonra fonksiyondan nereye dnlecei bilgisi ve nceki yt erevesigstergesi sistem ytna eklenir.
kili aramada rnek test verisi olarak kullanlan dizi
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
4 13 18 19 24 27 33 36 39 40
list searchnum left right middle
18 0 9 4
main (bitince nereye dnlecek: maine)
list searchnum left right middle
list[0] 18 0 3 1
case 1
list searchnum left right middle
18 2 3 2
case -1
HANO KULELER PROBLEM (s. 14/11)
Oyun tanm: tane kule var: kaynak, ara, hedef. Kaynak kulede n tane
disk bulunuyor. Her bir disk, kendi zerindekinden daha byk
boyuttadr. Oyunun amac kaynak kuledeki tm diskleri hedef kuleye
tamaktr. Tama srasda ara kuleden yardm alnabilir. Fakat;1. Her seferde tek bir disk tanabilir.2. Bir disk, kendisinden daha kk bir diskin zerine konamaz.
zyinelemeli zm: En byk diski hedef kuleye tayabilmek iin stndeki n-1 tane diski ara kuleye tadmzbir an bulunmaldr. yleyse problemdeki zyineli iliki (recursive relation) yle yazlIr: )1(1)1()( ++= nhnhnh
voidhanoi(intn,char*kaynak,char*ara,char*hedef){if(n==1)printf("%s -> %s\n",kaynak,hedef);else{
hanoi(n-1,kaynak,hedef,ara);printf("%s -> %s\n",kaynak,hedef);hanoi(n-1,ara,kaynak,hedef);
}}
intmain(){
hanoi(3,"A","B","C");return0;
}
2yi case 1e dndrr,sonra da maine dner.
main
kaynak ara hedef
yle problemler var ki, ancakrekrsif yolla zlebilir.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
8/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 6 / 302008
DEV:hanoi(3,"1","2","3"); zyinelemeli yordam ars iin yt erevesi gsterimini iziniz.
ana
n kaynak ara ama
3 1 2 3
PERMTASYON PROBLEM [ )!(n ] (s. 12)
Eleman says 1n olmak zere bir kme verildiinde sz konusu kmenin olas tm permtasyonlarnyazdrmak istiyoruz. Kme n eleman ierdii iin !n diziliin olduunu biliyoruz. rnein },,{ cba kmesi
verildiinde olas dizilimler; },,{ cba , },,{ bca , },,{ cab , },,{ acb , },,{ bac , },,{ abc olur.
Kme 4 elemanl },,,{ dcba kmesi olsayd olas dizililer;
- a y takip eden },,{ dcb kmesinin tm olas dizilileri,
- b yi takip eden },,{ dca kmesinin tm olas dizilileri,
- c yi takip eden },,{ dba kmesinin tm olas dizilileri,
- dyi takip eden },,{ cba kmesinin tm olas
dizililerinin toplam
olurdu.voidperm(char*list,inti,intn){
intj,temp;if(i==n){
for(j=0;ji ) ise, if deerini bulan zyineli yordam yaznz.
3)
+
=
1
11
m
n
m
n
m
nverildiine gre
)!(!!mnm
nm
n
=
deerini hesaplayan zyineli yordam yaznz.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
9/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 7 / 302008
DEV CEVAPLARI
longfakt(longnumber){if(number
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
10/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 8 / 302008
Performans yksek programlar yazmakneden bu kadar nemli? Bir savauann bombalama sistemini sizprogramlyorsunuz. Savata sizinyazdnz program 3 snde bomba
brakyor da kar tarafnki 2 sndebrakyor. Sava batan kaybettinizdemektir. Ben savamyorum, kabul
etmiyorum. mu diyeceksiniz?
floatabc(floata,floatb,floatc){returna+b+b*c-(a+b-c)/(a+b)+4.00;
}
floatsum(floatlist[],intn){floattempsum=0;inti;for(i=0;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
11/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 9 / 302008
floatrsum(floatlist[],intn){if(n) n+1
returnrsum(list,n-1)+list[n-1]; nreturn0; 1
} toplam: 2n+2voidadd(inta[][MAX_SIZE],intb[][MAX_SIZE],intc[][MAX_SIZE],introws,intcols){
inti,j;for(i=0;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
12/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 10 / 302008
ALIILMI KARMAIKLIKLAR (Practical Complexities) (s. 37)Sonsuz sayda algoritmik karmaklk yazlabilir. Bunlar arasnda ska karlalan bazlarn kyaslayacaz.Kyaslamada kk deerler yanltc olabilir. Belli bir noktadan sonra ar artlar olabileceine dikkat edilmelidir.2n ile n2 grafiklerini kyaslayn (s. 39).
Karmaklk Ad 1 2 4 8 16 32
1 Sabit (constant) 1 1 1 1 1 1
nlg Logaritmik (logaritmic) 0 1 2 3 4 5
n Dorusal (lineer) 1 2 4 8 16 32
nn lg Log Lineer (loglineer) 0 2 8 24 64 1602n Kare (quardratic) 1 4 16 64 256 10243n Kbik (cubic) 1 8 64 512 4096 32768n2 ssel (exponential) 2 4 16 256 65536 4294967296
!n Faktriyel (factorial) 1 2 24 40320 20922789888*103 263130836933694*10 21
NOT: nlg ile kast edilen n2log dir.
0
500
1000
1500
2000
2500
3000
3500
4000
4500
1 2 3 4 5 6 7 8 9 10 11 12
lg n n n*lg n n^2 n^3 2^n n!
SHRL KARELER (Magic Squares) PROBLEM (s. 34)
1den n2ye kadar olan tamsaylarn nxn lik bir kare matrise her satr, stun ve iki ana kegen zerindekideerlerin toplam ayn olacak biimde yerletirilmesi isteniyor. 5x5lik kare iin toplamlar 65e eit olmaldr.
Coxeter Kural:lk satrn ortasna 1 yazlr. Bulunduumuz karenin sol stndeki kareyehareket etmeye allr. Bu kare daha nceden ilenmise bulunduumuz kareninaltndaki kareye hareket edilir. Hareketler srasnda matris dna tama varsa en soldakistunun en sadaki stunun sanda, en alttaki satrn en stteki satrn stnde olduufarz edilir. Bu yntemle n2 adet admda zme ularz.
Brute-Force (Kaba kuvvet): Bu kural kullanmaz isek )!( 2n farkl olasl srayla tek tek denememiz gerekirdi.
Toplam 25105.1!25 olas durumun hepsini tek tek denemek iin yaklak 16109.4 asra tekabl eden bir sregerekir. (saniyede 1 milyar komut iletilen bir makinede)
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11
- Hocam benim Amerikadan yeni gelen 10GHzlik bilgisayarm var. Bu problemi veririm,hemen zer. Hi bunlarla uramama gerek yok.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
13/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 11 / 302008
Saniyede 1 milyar komut iletebilen bir bilgisayardadeiik algoritma karmaklklarna sahip programlarn gereksinim duyaca iletim sreleri (s. 40)
n n lg n n*lg n n2
n3
n4
n10
2n
10 0.01 0.0033 0.03 0.1 1 10 10 sn 1.024
20 0.02 0.0043 0.09 0.4 8 160 2.8444 saat 1.0486 ms
30 0.03 0.0049 0.15 0.9 27 810 6.8344 gn 1.0737 sn
40 0.04 0.0053 0.21 1.6 64 2.56 ms 4.0454 ay 18.3252 dk50 0.05 0.0056 0.28 2.5 125 6.25 ms 3.1397 yl 13.0312 gn
100 0.1 0.0066 0.66 10 1 ms 0.1 sn 32.1502 asr 4.074*1011
asr
1000 1 0.01 9.97 1 ms 1 sn 16.67 dk 3.215*1011
asr 3.444*10282
asr
10000 10 0.0133 132.88 100 ms 16.67 dk 3.86 ay 3.215*1021
asr ???
Birim evirme: 1000 = 1 ms ve 1000 ms = 1 sn
Performans deerlendirme ikinci yntemin performans lm olduunu ifade etmitik. Bunun iin iki yntemkullanlabilir. (s. 41)
1- leyici Zaman (Process Time) (Elapsed Time): Program baladnda ileyici bu program iin ka saatvuruu (clock tick) yaptn hesaplamak zere otomatik olarak bir saya gnler.
2- Sistem Saati (Calender Time): C programlama dilinin standart ktphane fonksiyonlar
kullan
larak iletimzaman bulunabilir.
1. YNTEM (LEYC ZAMANI) 2. YNTEM (TAKVM ZAMANI)
Balang Start = clock(); start = time(NULL);
Biti stop = clock(); stop = time(NULL);
Tr Clock_t time_t
Sonu (sn) duration = ( (double) (stop-start) ) / CLK_TCK duration = ( (double) difftime(stop,start);
lm yaplrken dikkat edilmesi gereken bir nokta var. evre birimleri ile ilem yapmak fazla vakit alr. Bu,yanltc lmlere sebep olabilir. (evre birimleri: harddisk, ekran, CD-DVD, yazc) O yzden, ekrana kt
gnderen printf komutlarn lm yaparken comment etmeliyiz, yani aklama satr haline getirmeliyiz.
PERFORMANS LM UYGULAMALARI
1 Semeli Sralama (Selection Sort) (s. 41):
#include
#include
#define MAX_SIZE 5001
#define ITERATIONS 20 // sizelist'in eleman says#define SWAP(x,y,t) ((t)=(x), (x)=(y), (y)=(t))
voidsort(int[],int);
intmain(void){inti,j,list[MAX_SIZE]; // sralanacak diziintsizelist[]={ // farkl n (eleman says) deerleri
0,100,300,600,900,1200,1500,2000,3000,3100,3200,3300,3400,3500,3600,3700,3800,3900,4000,5000};
clock_tstart,stop;intduration;
printf(" Performans Olcumu (Secmeli Siralama)\n""-----------------------------------------------\n" );
for(i=0;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
14/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 12 / 302008
sort(list,sizelist[i]);// sizelist[i] adet eleman ieren dizi sralanyorstop =clock();duration=(int)(1000*(stop-start)/CLK_TCK);printf("%4d elemani siralama %4d milisaniye surdu\n",sizelist[i],duration);
}return0;
}// --> end main()
voidsort(intlist[],intn){
inti,j,min,temp;for(i=0;i end sort()
Performans Olcumu (Secmeli Siralama)
-----------------------------------------------
0 eleman icin siralama 0 milisaniye surdu
100 eleman icin siralama 0 milisaniye surdu
300 eleman icin siralama 0 milisaniye surdu
600 eleman icin siralama 0 milisaniye surdu
900 eleman icin siralama 15 milisaniye surdu
1200 eleman icin siralama 31 milisaniye surdu
1500 eleman icin siralama 32 milisaniye surdu
2000 eleman icin siralama 62 milisaniye surdu
3000 eleman icin siralama 110 milisaniye surdu
3100 eleman icin siralama 93 milisaniye surdu
3200 eleman icin siralama 94 milisaniye surdu
3300 eleman icin siralama 94 milisaniye surdu
3400 eleman icin siralama 109 milisaniye surdu
3500 eleman icin siralama 125 milisaniye surdu
3600 eleman icin siralama 125 milisaniye surdu
3700 eleman icin siralama 125 milisaniye surdu
3800 eleman icin siralama 141 milisaniye surdu
3900 eleman icin siralama 140 milisaniye surdu
4000 eleman icin siralama 141 milisaniye surdu
5000 eleman icin siralama 234 milisaniye surdu
ktda dikkatimizi eken iki ey var! Birincisi; 600 elemana kadarki sralamalar hi zaman almam gzkyor.kinicisi; 3000 elemanl dizi 110 msde sralanrken daha fazla elemana sahip diziler 93, 94, 109ms gibi daha az
srelerde sralanm gzkyor. Ayrca 3500, 3600 ve 3700 elemanl dizilerin sralanmas eit vakit alm gibigzkyor. Bunlar doru olamaz! Bu tutarszlklar neden kaynaklanyor? lkinde sralama ilemi, iki clock gnlemearasnda bitmi, ilem esnasnda hi clock gnlenmemitir. Saat vuruunun balang ve biti deerleri ayn olduu
iin (stop-start) komutuyla 0 elde ettik. kincisinde de ilkine benzer bir saat vuruu tutarszlna rastladk. Buartlarda ayn eleman sayl diziler iin bile farkl sonular elde etmemiz mmknd.
zm: Her lm belirli sayda tekrarlayp lm sonularnn ortalamasn alabiliriz. Bunu sral arama program
zerinde grelim:
2- Sral Arama (Sequential Search) (s. 43):
#include
#include
#define MAX_SIZE 5001
#define ITERATIONS 20 // sizelist'in eleman saysnv
intseqsearch(int[],int,int);
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
15/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 13 / 302008
intmain(void){inti,pos,list[MAX_SIZE]; // sralanacak diziintsizelist[]={ // farkl n (eleman says) deerleri
0,100,300,600,900,1200,1500,2000,3000,3100,3200,3300,3400,3500,3600,3700,3800,3900,4000,5000};
longintj,runtimes[]={ // her bir arama ka kez tekrar edilecek500000,200000,100000, 100000,50000,50000,40000,40000,30000,30000,25000,25000,20000,20000,20000,15000,10000,10000,5000,5000};
clock_tstart,stop;floatduration,total;
printf(" Performans Olcumu (Sirali Arama)\n""-----------------------------------------------------------------------\n" );
for(i=0;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
16/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 14 / 302008
[0][1][0] [0][1][1] [0][1][2]
[0][0][0] [0][0][1] [0][0][2]
G[2][2][3]
BLM 2 DZLER ve YAPILAR (s. 49)
OK BOYUTLU DZLERN BELLEKTE GSTERM (Representation of Multidimensional arrays) (s. 78)
[ ][ ][ ] [ ]1210 nupperupperupperupperA K olarak tanmlanan n boyutlu matrisin
=
1
0
n
i
iupper adet eleman vardr. r. ]10][10][10[A matrisi 1000 elemanldr.
Diziler, bellee iki ekilde yerletirilebilir: Satr ya da stun ncelikli (s. 51).
Satr ncelikli yerletirme: Satr ncelikli yerleimde matris satrlara gre yerletirilir. rnein [ ][ ]10 upperupperA
eklinde verilmi iki boyutlu bir dizinin ]0][0[A elemannn bellee yerleim adresi ise ]0][[iA elemannnbellee yerleim adresi
iupperi + olacaktr. nk .i satrdan nce iupperi adet eleman vardr. Dolaysyla
]][[ jiA elemannn bellee yerleim adresi jupperi i ++ olacaktr. intx[3][4]; eklindeki dizi:
[0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3]
3 boyutlu bir dizinin satr ncelikli yerletirilmesi (s. 79): G[2][2][3] eklindeki 3 boyutlu bir dizinin bellekgsterimini 3 boyutlu bir ekille aklayabiliriz. Ak renkli dilim 0. dilim, koyu renkli dilim 1. dilim olmak zere biradres u ekilde ifade edilir: G[dilim][satr][stun]
[ ][ ][ ]210 upperupperupperG eklinde verilen matrisin elemanlarnn konumlar
+ i.upper1.upper2+ j.upper2 + keklindeki son ifade 3 toplama ve 3 arpma ieriyor. Bir derleyici dizielemanlarna eriim mekanizmasn hzlandrmak ister. arpma, toplamadan ok vakit ald iin ifadeyiparanteze alarak arpma saysn azaltr. fadeyi paranteze aldmzda [ + (i.upper1+ j).upper2 + k ]3 toplama 2 arpma ieren bir ifade elde etmi oluruz. Bylece daha hzl eriim salanm olur.
Bu almamz [ ][ ][ ] [ ]nupperupperupperupperAK
210 eklinde tanmlanm bir matrisin her hangi bir elemannaeriim iin genelletirelim. Elemanlarn bellekteki konumlar:
A[0][0]...[0] A[i0][0]...[0] + i0.upper1.upper2uppern-1A[i0][ i1]...[0] + i0.upper1.upper2uppern-1 + i1.upper2uppern-1
A[i0][ i1]...[ in-1] + i0.upper1.upper2uppern-1 + i1.upper2uppern-1 + + in-1
&A[i0][ i1]...[ in-1] =
==
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
17/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 15 / 302008
SMETRK MATRSLER (s. 93/3)
Bir kare matris kegenlerinden biriyle blndnde iki para oluur. Bu iki paradan sadece birtanesini tutmak, kare matrisin programda kullanlma amacn yerine getirmek iin baz durumlarda
yeterli olabilir. rnein ehirler aras uzaklklar ya da periyodik tablodaki atom arlklarn tutmakiin matrisin yars yeterlidir. Byle bir durumda bellek israf yapmamak iin matrisin dier yars
tutulmayabilir. Gerekli veriler tek-boyutlu bir dizide tutulur ve kullancya sanki iki boyutlu bir matris zerinde
alyormu izlenimi veren bir ara yz salanr. rnein;
Kullancya salanan arayz:
Bellekte gerek gsterim (ALT dizisi):
Grld gibi (ilk satr numaras 0 olmak zere) i. satr i+1 adet eleman iermektedir. Buradan hareketle
matristeki toplam eleman saysn syleyebiliriz:2
)1( + nn(nxn lik bir kare matris iin) Yani ALT dizisi bu kadar
eleman iermelidir. aij elemannn ALT dizisindeki konumu i. satra kadarki toplam eleman says ile aijnin kendi
bulunduu satrdaki konumunun toplamdr. Dolaysyla aij elemannn ALT dizisindeki konumu: jtki
t
+= =0
olur.
#include
#include
#define MAX_SIZE 100
voidAltUcgenOku(intalt[],intn){ // kullanc, diziyi dolduruyorinti,j,k;if(n*(n+1)/2>MAX_SIZE){
printf("Alt dizi boyutu yetersiz!\n");exit(1);
}elsefor(i=0;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
18/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 16 / 302008
=
333231
23222120
121110
0100
5
5
55
ddddddd
ddd
dd
A
KUAK MATRSLER (Band Matrix) - (s. 93/5)
Ska karlalan dier bir matris tr de kuak matristir. Belirliblgenin dndaki elemanlar kullanlmyordur ya da hepsinin deeribelli bir sabit deere eittir.
Kuak matristeki eleman says nedir?=n Kare matrisin bir kenarnn boyutu (rneimizde 4),=a Alt gendeki kuak says (ana kegen dhil, rneimizde 3),=b st gendeki kuak says (ana kegen dhil, rneimizde 2) olmak zere;
Ana kegende n tane eleman vardr. Ana kegendeki ve ana kegen alt kuaklarda toplam
))1(()2()1( ++++ annnn K eleman vardr. Ana kegen st kuaklardaki eleman says ise
))1(()2()1( +++ bnnn K olur. yleyse matristeki toplam eleman says2
)1(
2
)1()1(
+
bbaaban
Bir elemana erimek: Dikkat ettiimizde ji deerinin ayn kuak iinde ayn sabit
deere eit olduunu grrz. Bu deeri kuak numaras olarak kullanacaz. rnein d20ve d31 elemanlarnn bulunduu kuak 21302 == numaral kuaktr. yleyse anakuak numaras 0 olur. Negatif nolu kuaklar alt kuaklar, pozitif nolu kuaklar stkuaklardr. Bo blgelere denk den bir elemana eriilmek istenirse bunu da kuaknumarasndan anlayabiliriz. Kuak numaralar [ ]1,1 ba kapal aralnda olmaldr.
Her kuan ilk elemannn bellekteki konumunu tutmak zere de yardmc bir ARA dizisikullanacaz. Dolaysyla ARA dizisi, kuak says kadar, yani 1+ ba adet elemaniermelidir. (Negatif indis deeri olamayaca iin indisler tablodaki gibi -2 yerine 0danbalamaldr. Kuak no deerine a-1 ekleyerek bunun stesinden geliriz.)
#include
#include
#define MAX_SIZE 101
voidKusakMatrisKur(intkusak[],intara[],intn,inta,intb){inti,k,toplamoge;if(n*(a+b-1)-a*(a-1)/2-b*(b-1)/2>MAX_SIZE){
printf("Bellek yetersiz!\n");exit(-1);}toplamoge=0; // nceki kuaklardaki toplam e saysfor(i=1-a;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
19/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 17 / 302008
Yazdmz KusakMatrisEris yordamnn karmakl )1( olur. nk girdi karakteristiine bal olarak
yordamn daha uzun sre almas gibi bir ey sz konusu deildir, her durumda ayn sre alr. Bu yordam aradizisi kullanmadan indisi 0dan balayp dnglerle sayan ekilde yazabilirdik, fakat karmaklk artard. Zamankarmakl endiesinden tr bu ekilde yazmayz. Fakat ARA dizisi kullanmak da hem bellek karmaklnartrr, hem de program dinamik olmaktan uzaklatrr. zm olarak ARA dizisini hi kullanmadan ARA dizisivazifesi gren bir forml reterek de kuak balang deerlerini hesaplayabiliriz.
DEV 1:ARA dizisinden yardm almadan
DEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERNZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLERDEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERNZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLER DEVLERN ZMLERDEVLERN ZMLER DEVLERN ZMLER DEFTERDE FORLU MORLU BEYLER VAR
Kullandmz derleyici sadan sola m taryor, soldan saa m? rnein u iki edeer ifadeden ikincisi dahagvenlidir:1. if( ifade1 && ifade2 ) 2. if( ifade1)
if(ifade2 )
POLNOMLAR ZERNDE LEMLER - (s. 59)
Polinomlar Tutacak Veri Yapsnn Tasarlanmas
1. Yntem (kt yntem):Aadaki gibi bir yap (struct) tanmlarz. degree, polinomun en byk sl teriminin ss, yanipolinomun derecesidir. degree deikenini kullanmak, her seferinde dereceyi hesaplamaktan bizikurtarr. coef dizisi ise polinomun katsaylarn tutar. (xi teriminin katsaycoef[i]dedir)
#define MAX_DEGREE 101// Polinomun alabilece
i en yksek derece
typedefstruct{intdegree; // En byk dereceli terimin ssfloatcoef[MAX_DEGREE]; // Katsaylar
}polynomial;polynomial P;
Fakat bu ekildeki gsterimi kullanrsak katsays 0 olan terimleri de tutmamz gerekir. rnein1005)( xxP = eklindeki bir polinomu tutmak iin 0dan 99a kadar 0 deeri ieren bir coef dizisi
oluturulacaktr. Bu ise bellek israfdr.
2. Yntem (daha iyi yntem):Tanmladmz yap tek bir terim ( i
ixa ) tutabilir. Polinomun tamamn
tutmak iin polynomial yaplarnn bir dizisini kullanrz. Yazacamzyordamlarda iimizi kolaylatrmak iin dizideki terimler byk slterimlerden kk sllere doru tutulacaktr. Bu ekilde sral tutma,gerektii yerlerde merge mant kullanabilmemize olanak salar.
#define MAX_TERMS 101 // Azami terim saystypedefstruct{
floatcoef; // Bir terimin katsaysintexpon; // Bir terimin ss
}polynomial;polynomialP[MAX_TERMS]; // Polinomun tamam
423)( 520 ++= xxxA
coef 3 2 4expon 20 5 0
1310)( 235 +++= xxxxB
coef 1 10 3 1expon 5 3 2 0
Merge mant
, s
ral
yaplar zerinde dahaetkin algoritmalar
retmemize olanak salar.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
20/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 18 / 302008
Polinomlarn Toplanmas (s. 64)
ki polinomun toplam: +=+ iii xbaxBxA )()()( eklinde ifade edilir. Ayn dereceli terimlerin katsaylartoplanr, sler ayn kalr. Toplama yapmak iin iki polinom zerinde ilerleyen birer gsterge (indis numaras)
kullanrz. Terimlerin bykten ke sralanm olmas avantajn kullanp iki gstergeyle ilerleyerek toplamayaparz. yle ki;
A polinomunda sradaki terimin ss Bdekiyle aynysa terimler toplanp sonu polinomuna eklenir ve heriki gsterge ilerletilir. (terimler toplandnda katsay sfr oluyorsa toplam, sonu polinomuna eklenmez)
Eer A polinomundaki terimin ss Bdekinden bykse, Adaki sse sahip bir terim Bde yokturdiyebiliriz. nk Bde bir sonraki terimin ss uanki terimden daha kk gelecektir, daha byk birterim gelemez. O yzden Adaki terimi sonu polinomuna ekler ve gstergeyi ilerletiriz. Bdeki gstergeye
dokunmayz.
Benzer ekilde Bdekinin ss Adakinden byk gelirse Bdeki terimi ekleyip gstergeyi ilerletiriz.
#include
#include
#define MAX_TERMS 101 // Polinomda tutulabilecek azami terim says#define COMPARE(x,y) ( (x)
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
21/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 19 / 302008
DEV 2: ki polinomu arpan pmult yordamn yazn ve performans analizini yapn. n tane polinomu nasltoplardnz? Veri yapsn oluturun. n tane polinomu nasl arpardnz? Veri yapsn oluturun. (Sayfa 66/5)DEVLERN ZMLER DEVLERN ZMLER DEFTERDE BREYLER VAR
DEV 3: Sayfa 99daki algoritmay inceleyin. lk konumun 23 farkl deeri iin kt oluturun.DEVLERN ZMLER DEVLERN ZMLER DEFTERDE BREYLER VAR
Polinomlar
n arp
lmas
ki polinomun arpm: = ))(()()( jjii xbxaxBxA Ann her terimi Bnin her terimi ile arplr. arplrken sler toplanr, katsaylar arplr. Oluan ayn sl terimlerbirletirilir. Farkl terimlerin arpmyla oluacak ayn sl terimlerin birletirilmesi ve sral yapnn korunmasgerekmektedir.
/* polinomlarn her bir terimi olarak kullanlacak yap */typedefstructpol_oge*pol_gosterge;typedefstructpol_oge{
intkatsayi;
intus;
pol_gostergebag;}pol_oge;
/*Listede parametresinden sonra gelen eyi listeden ve bellekten siler */voidSonrakiTerimiSil(pol_gostergeOnceki){
pol_gostergeSilinecek=Onceki->bag;// free yapabilmek iin adresi tutmalyzif(!Silinecek)return; // zaten e yoksa ilem yaplamazOnceki->bag=Onceki->bag->bag; // ba alanlar dzgnce gncellenmelidirfree(Silinecek); // bellekteki kalnt temizlenmelidir
}
/*Dinamik bellek alp belirtilen st ve katsayi bilgilerine sahip bir terim olutururve Onceki parametresi ile verilen enin peine liste yapsn bozmadan ekler */
pol_gostergeYeniTerimEkle(intUst,intKatsayi,pol_gostergeOnceki){pol_gostergep=(pol_gosterge)malloc(sizeof(pol_oge));if(!p){printf("Bellek yetmiyor yetmiyoor...");exit(1);}
p->us =Ust; // st bilgisini yazp->katsayi=Katsayi; // katsay bilgisini yaz
if(Onceki
){
// Onceki parametresi belirtildi
p ->bag=Onceki->bag; // araya yada sona ekleOnceki->bag=p;
}elsep->bag=NULL; // Onceki botur, baka bir terimin peine eklenmeyecekreturnp;
}/* Liste olarak verilen iki polinomu birbiriyle arpp yeni bir polinom listesi oluturur ve liste ban dndrr. */pol_gostergePolCarp(pol_gostergepBas,pol_gostergeqBas){
voidSonrakiTerimiSil(pol_gostergeOnceki); // Parametresinden sonra gelen eyi listeden ve bellekten siler
pol_gostergeYeniTerimEkle(intUst,intKatsayi,pol_gostergeOnceki);/* Yeni bir terim iin bellek alpst ve katsay alanlarn doldurur, Onceki ile verilen enin peine ekler */
pol_gosterge baslangic=NULL, /* yeni oluturulan bir elemann sonu listesi zerindeeklenecei konumun aranmaya balanaca yere gsterge */
p,q,r, // pBas, qBas ve rBas (sonu) listelerinde dolaacak gstergelerrBas=NULL; // yeni oluturulacak sonu listesi
intrUst,rKat; // her iki elemann arpmnda st ve katsay bilgilerifor(p=pBas;p;p=p->bag){ // birinci polinomun her bir terimi iin
r=baslangic; // ikinci listeye her balamada r'yi son iaretlenen konumdan balatfor(q=qBas;q;q=q->bag){ // ikinci polinomun her bir terimiyle ilem yaplacak
rUst=p->us +q->us; // stler toplanrrKat=p->katsayi*q->katsayi;// katsaylar arplr
if(rBas){ // listenin ilk eleman deil// uygun konum ara:while ( r->bag&&(r->bag->us>rUst))r=r->bag;
// ss rUst olan eleman daha nce eklenmedi, yeni eleman ekle:if ( !r->bag||(r->bag->usbag->katsayi+=rKat)==0 )SonrakiTerimiSil(r);
}elserBas=r=baslangic=YeniTerimEkle(rUst,rKat,NULL); // listenin ilk eleman eklendi
if(q==qBas)baslangic=r;// p listesinin sonraki elemanyla arpmlar burdan itibaren yerleecek}}
returnrBas; // sonu listesinin ba
n
dndr}
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
22/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 20 / 302008
Problemin baz dier zmleri:1. )( 22mn : Sradan hepsini arp. Her geleni sona ekle. Sonra srala ver birletir.
2. )( 22mn : Sradan hepsini arp. Her seferinde batan itibaren tarayp uygun konuma ekle.
3. )( 2mn : lk polinomun her elemanyla arpm iin bir liste olutur ve her admda sonula merge et.
4. )),max(),(min( 2 mnmn : 3. yntemin polinomlarn eleman saylarna gre optimize edilmi hali.
5. ))lg(( nnm : lk polinomun her elemanyla arpm iin ayr liste olutur ve en son tmn merge et.
6. ))),lg(min(( nmnm : 5. yntemin polinomlarn eleman saysna gre optimize edilmi hali.
7. Dizi a, n. indis n. ss tutsun. SAKIN HA!
SEYREK MATRSLER (Sparse Matrix) - (s. 66)
erdii birok deer sfr olan matrise seyrek matris denir. Seyrek matrisin kesin tan mn yapmak zordur. Seyrekmatris birok 0 deeri ierdiinden iki boyutlu bir dizide tutulduunda bellek kaybna yol aar. yleyse alternatifbir matris gerekletirimi aratrmalyz.
zm yollarndan biri matrisin her bir elemann lsnden oluan l (triple) bir yapdatutmaktr. (Baka yntemler de var. (s. 78)) Normal elemanlar iin elemann satr indisini row, stun indisini col,elemann deerini ise value tutar. M[0] eleman dierlerinden farkldr, balk vazifesi grr. M[0].rowmatristeki satr says, M[0].col matristeki stun says, M[0].value ise matriste sfr olmayan elemanlarn
saysdr. Son bir nokta; M dizisindeki elemanlar ekildeki gibi nce satra ve sonra stuna gre sral tutulacaktr.
Bellek karmakl: Matrisin 3te 1i dolu olduunda ayn bellek maliyeti olur. Daha fazla eleman varsa bu yaptercih edilmez.
#define MAX_TERM 101
typedefstruct{introw, // Satr
col, // Stunvalue; // Deer
}term;
term M[MAX_TERM];
Seyrek Matrisin Devriini (Transpose) Alma (s. 69)
]][[ jiM konumundaki eleman devrik matriste ]][[ ijM konumuna yerleir. Yani
ksacas satrlar stun olarak yazyoruz.
// Orjinal M matrisinin devriini alp T'yi olutururvoidtranspose(termM[],termT[]){
intn,i,j,CurrentT;n=M[0].value; // eleman says (O'dan farkl)T[0].row=M[0].col; // T'nin satr says = M'nin stun saysT[0].col=M[0].row; // M'nin satr says = T'nin stun saysT[0].value=n;if(n>0){ // eleman var m
CurrentT=1; // devrik matris zerinde gstergefor(i=0;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
23/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 21 / 302008
2825]8[
9104]7[
632]6[
321]5[
1111]4[
1550]3[
2230]2[1500]1[
866]0[
M
M
M
M
M
M
MM
M
valuecolrow
Analiz (s. 70):transpose yordam her bir stun numaras iin M matrisini batan sona tarayarak stun numarastutan elemanlar devrik matrise ekler. Satr numaralar sral gittiinden dolay devrik matris de sral ekilde
oluacaktr. Fakat algoritmann karmakl tam dolu matris iin )( 2 rowscols , seyrek matris iinse
).( sayelemcols olur.
Bunu daha iyi bir algoritma ile de yapabilirdik (s. 71). Matrisi
her stun iin tekrar taramak algoritma karmakln artryor.Eer elemanlarn yerleecei konumlar nceden bilseydik,gelen eleman gereken yere yerletirerek ilerlerdik. rnein ilksatrda 2 eleman, 2. satrda 3 eleman bulunacaksa ilk satr 1
konumundan balad iin ikinci satr 3 konumundanbalayacak, 3. satr ise 6. konumdan balayacaktr. Buyaklamla matrisi bir kez tarayarak satr balarnn yerlemesigereken yerleri bulabiliriz. kinci taramada ise elemanlarkonumlarna yerletiririz. Bylece iki tarama ile ilemitamamlayabiliriz. Aada kodu bulunan fast_transpose yordam iin karmaklk: 1__1_1_ ++++++ termsnumcolsnumtermsnumcolsnum 3_2_2 ++= colsnumtermsnum
)__( colsnumtermsnum += .).( sayelemcols +=
voidfast_transpose(termM[],termT[]){inti,j,row_terms[MAX_COL],num_cols,num_terms,start_pos[MAX_COL];T[0].col =M[0].row;T[0].row =num_cols =M[0].col;T[0].value=num_terms=M[0].value;if(num_terms>0){ // eleman var m
for(i=0;i
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
24/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 22 / 302008
SATRAN TAHTASINDA AT GEZS (s. 97/10)Problemimiz: Bir at, her haneden bir kez gemek artyla satran tahtasnn tmhanelerinde gezdirilecektir. Atn hareketi, bilindii zere, L eklindedir. Yani 2 yatay 1dikey ya da 2 dikey 1 yatay konum deitirebilir.
zm Aratrmas: At tm haneleri gezmi farz edip adm adm geri getirmek suretiyle,yani senaryoyu sondan baa doru geri sararak problemi zebiliriz. Bu ekildekiyaklama back-tracking (geri sarma) denir. Fakat back-tracking bir brute-force
yntemidir, karmakl artrr.
At problemi iin 1823 ylnda WANSDORFF tarafndan sezgisel bir yaklam gelitirilmitir.
Sezgisel yaklamlar (heuristic approaches) gelitirmek iin problem zerinde uzun srealmak ve probleme iyice aina olmak gerekir. Sezgisel yaklamlar problemi optimaleyakn zer, yani akllca davranr. Ama tam olarak optimal zemez. (Mayn tarlasoyununda olduu gibi)
zm: Gelelim WANSDORFFun sezgisel yaklamna WANSDORFF der ki; Atn bir sonrakigidecei yer, ilerleme says sfr olmayan ama en az olan hanedir. lerleme says demek,o haneden direk olarak hareket edebilecei hanelerin says demektir.
Konum Hamle
0 i-2 j+1
1 i-1 j+2
2 i+1 j+2
3 i+2 j+1
4 i+2 -1
5 i+1 -2
6 i-1 -2
7 i-2 -1
34
25
16
07
x
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
25/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 23 / 302008
BLM 2 YIITLAR ve KUYRUKLAR (s. 101)YIIT ve KUYRUK VER YAPISI (Stacks and Queues)
YIIT (Stack): zerinde ekleme (insertion) ve silme (deletion) yaplabilen bir listedir. },,,,{ 1210 = naaaaS K
eklinde bir S yt verildiinde a0 alt eleman, an-1 ise st elemandr. Eer yt veri yapsna srasyla A, B, C, D ve Eelemanlar eklenmise silinecek, alnacak, ilenecek ilk eleman E olabilir. Son eklenen ilk kaca iin LIFO (last-in-first-out) mantna dayaldr. Tek arabann sabilecei bir kmaz sokaa park edilen arabalarda da tpk yt veriyapsnda olduu gibi son giren ilk kmak zorundadr. Stack Activation Frame, bir sistem ytdr; nceki ereveyegsterge, programda nereye dnleceini gsteren dn adresi ve yerel deikenleri tutar.
eklendiA
topA
eklendiB
topAB
eklendiC
top
AB
C
eklendiD
top
AB
C
D
eklendiE
top
AB
C
D
E
silindiE
top
AB
C
D
Yta Ekleme ve Yttan Silme: Ytn tepesini top deikeni gsterir. 0=MAX_STACK_SIZE-1)// Yeni eleman iin yer var m?
yigit_dolu(); // Yt dolu uyars ver ve kyigit[++*top]=item; // nce gstergeyi artr// sonra ytta iaret edilen konuma yeni eleman aktar
}
elementyigit_al(int*top){if(*top
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
26/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 24 / 302008
KUYRUK (Queue): },,,,{ 1210 = naaaaQ K kuyruu verildiinde yt veri yapsndan farkl olarak a0 veri yapsnda
ilenecek ilk elemandr. an-1 kuyruun arkasnda yer alr. Kuyrua ilk giren ilk kar -> FIFO (first-in-first-out).Srasyla A, B, C ve D elemanlarn kuyrua eklediimizde ilk alnacak eleman, ilk eklenen eleman olan Adr.
arkan
arkaA
n
arka
A
B
n
arka
A
B
C
n
arka
A
B
C
D
n
arka
B
C
D
n
#include
#include
#define MAX_QUEUE_SIZE 100
typedefstruct{intdeger;
// dier deikenler}element;
elementkuyruk[MAX_QUEUE_SIZE];inton =-1;intarka=-1;
voidkuyruk_dolu(){printf("Kuyruk Dolu!!!\n");exit(-1);
}
voidkuyruk_bos(){printf("Kuyruk Bos!!!\n");exit(-2);
}
voidkuyruk_ekle(int*arka,elementitem){
if(*arka>=MAX_QUEUE_SIZE-1) // Yeni eleman iin yer var m?kuyruk_dolu(); // Kuyruk dolu uyars ver ve k
kuyruk[++*arka]=item; // nce gstergeyi artr// sonra kuyruun arkasna yeni eleman aktar
}
elementkuyruk_al(int*on,intarka){if(*on==arka)kuyruk_bos(); // Kuyruk bosa uyar ver ve kreturnkuyruk[++*on]; // Gstergeyi artr ve kuyruun nndeki eleman dndr
}
Dngsel Kuyruk (Circular Queue): arka gstergesi MAX_QUEUE_SIZE1deerine eit olduunda kuyruk dolu uyars vermek gerekir. Bu aradakuyruktan birok eleman alnd iin kuyruun nnde yeni elemanlareklenebilecek bo yerler olumu olabilir. Kaydrma yaplarak ndeki boyerler kullanma sokulmak zere arkaya tanabilir, fakat kaydrmalar arzaman alr. Buna zm olarak dngsel kuyruk veri yaps gelitirilmitir. Dngsel kuyrukta kuyruun ba ilesonu birletirilmitir. nde boalan yerler arkadaym gibi otomatik olarak kullanma sokulur.
Dngsel kuyruk MAX_QUEUE_SIZEboyutunda almsa tutulabilecek eleman says dorusal kuyruktakinden bireksik, yani MAX_QUEUE_SIZE1 kadardr. nk n gstergesinin gsterdii bir e denetim iin bo kalmaldr.
Kaydrma!Bilgisayar bilimlerinde
en kt kelime!Yksek maliyet demek!
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
27/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 25 / 302008
voidkuyruk_ekle(inton,int*arka,elementitem){*arka=(*arka+1)%MAX_QUEUE_SIZE; // arka gstergesini ilerletif(on==*arka)kuyruk_dolu(); // kuyruk doluysa hata ver ve kkuyruk[*arka]=item; // bo konuma yeni eleman aktar
}
elementkuyruk_al(int*on,intarka){if(*on==arka)kuyruk_bos();
// kuyruk bosa uyar ver ve k*on=(*on+1)%MAX_QUEUE_SIZE;
// n gstergesini ilerletreturnkuyruk[*on];
// ndeki eleman dndr}
Labirent (Maze) Problemi (s. 117)
nxp boyutlarnda olan bir matriste 0lar ak yolu, 1ler ise duvarlar
simgelemektedir. Giri konumu [0][0], k konumu [n][p] olarak kabuledildiinde giriten ka hangi yoldan gidilebileceini bulmak istiyoruz. Yatay vedikey dorultuda hareket edebileceimiz gibi apraz ynlerde de hareket edebiliriz.Her defasnda yasak bir hareket (matris dna kmaya teebbs) yaplpyaplmadn denetlemekten kurtulmak iin matrisin evresini 1 ile evirebiliriz.Hareketlerimize yardmc olmas iin olas 8 hareket ynn tutmak zere bir tablo
yaps tanmlayabiliriz.
yn hareket[yn].dikey hareket[yn].yatay
0 -1 0
1 -1 1
2 0 1
3 1 1
4 1 0
5 1 -1
6 0 -1
7 -1 -1
[i-1][j-1] [i-1][j] [i-1][j+1]
[ i ][j-1] [ i ][j] [ i ][j+1]
[i+1][j-1] [i+1][j] [i+1][j+1]
7 0 1
6 yn 2
5 4 3
[0]
[1]
[2] [3]
[4]
[5]
F
B C
D
E
n
arka[0]
[1]
[2] [3]
[4]
[5]
B C
D
E
n
arka[0]
[1]
[2] [3]
[4]
[5]
A
B C
D
E
n arka
[0]
[1]
[2] [3]
[4]
[5]
A
B C
D
n
[0]
[1]
[2] [3]
[4]
[5]
A
B C
n
[0]
[1]
[2] [3]
[4]
[5]
A
B
n
arka
[0]
[1]
[2] [3]
[4]
[5]
A
n
[0]
[1]
[2] [3]
[4]
[5]
narka
arka
arka
arka
11111111
1011111111010011
11101101
11111011
11110101
11000101
11111111
Dnyadaki bilgisayar mhendisliialannda en iyi niversitehangisi? Harvard m? yleyse
Harvard niversitesinde okuyorumda, eer baaramazsam atlacam.Daha kt bir okula gitmek zorundakalacam.diye okumanz lazm.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
28/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 26 / 302008
Bana al oritmanz s le in size
#define MAX_STACK_SIZE 100
#define FALSE 0
#define TRUE 1
#define CIKIS_SUTUN 6
#define CIKIS_SATIR 6
typedefstruct{shortintdikey,yatay;}yonler;yonlerhareket[8]={
{-1,0},{-1, 1},{0, 1},{1, 1},
{1,0},{1,-1},{0,-1},{-1,-1}};
typedefstruct{shortintsatir,sutun,yon;}element;elementyigit[MAX_STACK_SIZE];inttop=-1;
shortint gezildi[8][8];shortintlabirent[8][8]={
{1,1,1,1,1,1,1,1},{1,0,1,0,0,0,1,1},{1,0,1,0,1,1,1,1},{1,1,0,1,1,1,1,1},{1,0,1,1,0,1,1,1},
{1,1,0,0,1,0,1,1},{1,1,1,1,1,1,0,1},{1,1,1,1,1,1,1,1}};
voidizbul(void){shortintsatir,sutun,y_satir,y_sutun;inti,yon,bulundu=FALSE;elementkonum;yigit[0].satir=yigit[0].sutun=yigit[0].yon=1;// ilk konum bilg. yta koygezildi[1][1]=1; top=0; // ilk konuma hareket edildiwhile(top>-1&&!bulundu){ // yt doldu mu yada k bulundu mu
konum=yigit_al(&top); // yttan yeni konum bilgilerini alsatir=konum.satir; // hangi satr ve stundan
sutun=konum.sutun;yon =konum.yon; // hangi yne doru gidilecekwhile(yon
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
29/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 27 / 302008
Deerlendirme:
1. Sekizlik look-up table kodu ksaltt ve iikolaylatrd.
2. Program, mazei dolamak iin stack yapsnkullanarak brute-force yapyor.
3. En kt durum analizi iin en kt veri grubunu
bulmalyz. Programn ynleri tarama srasndikkate alarak ekildeki iki durumu inceleyelim.Girdi 1de ilk denenecek olan yol uzun bir yoldur,ama doru yoldur. Bu yzden sadece ytaekleme says fazla olur, yttan silme yaplmaz.Girdi 2de ise ilk denenecek olan yol uzun, stelikyanl yoldur. Bu yolun sonuna kadar gidilir vekmaz olduu anlalr, yttaki veriler bir birsilinir. Matrisin doru yol dnda kalan ksm
tamamen dolalarak bunca vakit kaybedildiktensonra doru yoldan ilerlenip zme ulalr. te
bu, bizim programmz iin en kt veri grubudur.
FADE DEERLENDRME (Evaluation of Expressions) (s. 122)
Mantksal ve aritmetik ifadelerin derleyiciler tarafndan deerlendirilmesisrasnda da yt veri yaps kullanlr. Acaba caedcbax += / eklindeki bir ifadeyi zmlerken, )24()33()2)2/4(( + gibi bir
ifadenin deerini hesaplarken ya da caedcba + )()/( gibi parantezli
bir ifadeyi ilerken derleyiciler sorunun stesinden nasl geliyor?
fadelerin Farkl Gsterimleri: Ala geldiimiz ifadeler infix (ara-ile) biimindedir. Ara-ile gsteriminde herile, kendi ilenenlerinin arasnda yer alr. Bundan baka prefix (n-ile) ve post-fix (son-ile) biiminde olmak
zere iki gsterim daha vardr. Ara-ile gsteriminde hem parantezleri, hem de ilem nceliklerini dikkatealmamz gerekir. Oysa n-ile ve son-ile gsterimlerinde ilem nceliini dnmeden ilem yapabiliriz.
rnek No: n-ile (pre-fix) Ara-ile (in-fix) Son-ile (post-fix)
1 x34 3x4 34x
2 2+x34 2+3x4 234x+
3 x+abc/da (a+b)xc d/a ab+cxda/
4 xx/a+bcdeac ((a/(bc+d))x(ea)xc abcd+/eaxcx
Son-leci Ara-lece evirme (Postfix to Infix)Son ile biimindeki 42/233x+42x ifadesini ara ile biimine adm adm evirelim:
YIIT
token [0] [1] [2] top4 4 0
2 4 2 1
/ (4/2) 0
2 (4/2) 2 1
- ((4/2)-2) 0
3 ((4/2)-2) 3 1
3 ((4/2)-2) 3 3 2
x ((4/2)-2) 1
+ (((4/2)-2)+ (3x3)) 0
4 (((4/2)-2)+ (3x3)) 4 1
2 (((4/2)-2)+ (3x3)) 4 2 2x (((4/2)-2)+ (3x3)) 1
- ((((4/2)-2)+ (3x3))-(4x2)) 0
Girdi 1 Girdi 2
Kendi kodunu ancak sen ayrntlinceleyebilirsin. Bir bakas seninkodunu tam olarak analiz edemez.
Saynz 120-130 deil de 30-40 olsa veyanmda da 4-5 tane asistanm olsa ozaman devlerinizi daha ayrntlinceleme imkan bulabilirdim.
Analizini bile beceremediinalgoritmaya burun kvrma!
Problemi nce aratr, o sorubakalar tarafndan defalarcazlmtr. En hzl yolunu
bul. zlmemise,o zaman sen kefet.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
30/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 28 / 302008
Son-le Biimdeki fadeyi Hesaplama (Postfix Evaluation)Son ile biimindeki ifadenin '\0' ile sonlandn ve ilenenlerin birer karakterden (basamaktan) olutuunuvarsayalm. fadeyi karakter karakter okuyup okunan her bir token (damga - sz dizim birimi) iin bir ilemyapacaz. Karakter olarak okuduumuz rakamlar sayya evirmek iin token'0' komutunu kullanabiliriz. Bukomut token karakterinin ASCII kodundan 0 rakamnn ASCII kodu olan 48i karr, bylece say deeri eldeedilmi olur. rnein token karakteri ASCII kodu 50 olan 2 says ise 50-48=2 ilemi ile 2nin say deeri elde edilir.
#define MAX_SIZE 100
typedefenum{sol_paran,sag_paran,arti,eksi,carpma,bolme,mod,eos,operand
}oncelik;
floatyigit[MAX_SIZE];charexpr[]="42/2-33*+42*-\0";
onceliktoken_al(char*sembol,int*n){*sembol=expr[(*n)++];switch(*sembol){
case'(':returnsol_paran;
case')':returnsag_paran;case'+':returnarti;case'-':returneksi;case'/':returnbolme;case'*':returncarpma;case'%':returnmod;case'\0':returneos;default: returnoperand;
}}
floateval(){
// son ile biiminde verilen aritmetik ifadeyi deerlendirip sonucu dndrrcharsembol;onceliktoken;floatop1,op2;intn=0,top=-1;token=token_al(&sembol,&n); // bir sz dizim birimi (token) alwhile(token!=eos){ // karakter kmesi sonu (eos) mu
if(token==operand) // token ilenen (operand) miyigit_ekle(&top,sembol-'0'); // yta koy
else{ // bir ile (operatr) geldiop2=yigit_al(&top); // yttan ikiop1=yigit_al(&top); // ... ilenen alswitch(token){ // ilenenleri ile ve yta koy
casearti: yigit_ekle(&top,op1+op2);break;caseeksi: yigit_ekle(&top,op1-op2);break;casecarpma: yigit_ekle(&top,op1*op2);break;casebolme: yigit_ekle(&top,op1/op2);break;casemod: yigit_ekle(&top,(int)op1%(int)op2);
}// -> end switch}// -> end if-elsetoken=token_al(&sembol,&n);// bir token al
}// -> end whilereturnyigit_al(&top); // karakter kmesinin sonuna gelindi// ytta kalan tek eleman sonu olmaldr.
}
typedefenum{ ... };
ile etiketleme yapmak iimizikolaylatrr.
Fonksiyonlar component(bileen) yazar gibi yaz.
Global deiken, define gibikullanmlarla da bamllk
oluturma!Byle component (bileen)
yazlmaz! Yarn bir yerde ie
girip ekip halinde altnzaman proje yneticisine ylemi diyeceksin: Ben ok has
programcym. Kendime zg birtarzm var. Benim deikenlerimainin stne koy. Ben bylealyorum. Beni kabul edersenolduum gibi kabul et, yoksa...
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
31/32
Hacettepe niversitesi Bilgisayar Mhendislii BlmVeri Yaplar ve Algoritmalar 1 Ders Notlar Mustafa EGE 29 / 302008
Ara-leci Son-lece evirme (Infix to Postfix)infix: a+b*c postfix: abc*+
token [0] [1] top kt
a -1 a
+ + 0
b + 0 ab
* + * 1 ab
c + * 1 abc
eos -1 abc*+
infix: a*(b+c)*d postfix: abc+*d*
token [0] [1] [2] top kt
a -1 a
* * 0 a
( * ( 1 a
b * ( 1 ab
+ * ( + 2 ab
c * ( + 2 abc
) * 0 abc+
* * 0 abc+*
d * 0 abc+*d
eos abc+*d*
infix_to_postfix kodu gelecek ama son ileneni basamyor???
ALIMA: fade zmleme ile ilgili dier evirme ve hesaplamaalgoritmalarn tasarlaynz.
OKLU YIIT ve KUYRUKLAR (Multiple Stacks and Queues)Tek boyutlu bir dizi (memory[MEMORY_SIZE]) n adet yt kurmak iin kullanlabilir. Bu durumda diziyi n adetkesime (segment) blmemiz gerekir. Dizi boyutu m=MEMORY_SIZE olarak kabul edildiinde ve ytlarn top vesnr deerlerini tutacak iki yardmc dizi kullanldnda veri yapsu ekilde olur:
LSTELER (Lists)En gl veri yaps dizidir, ama her ey diziyle zlemiyor. rnein diziye
ekleme ve diziden silme ilemleri, tek bir eleman iin )(n lik bir kaydrmamaliyeti getiriyor. Bu durumda veri yaps olarak dizi tercih edilmez, liste
tercih edilir. nk listeler iin fiziksel olarak kayd rma yapmyoruz, sadecetek bir enin sonraki ebilgisini gncelliyoruz.
Bellek adresleri iki paradan oluur: Kesim adresi, kesim ii adresi. ..
Normal artlarda yordamn formal parametre listesinde *parametre olarak gzken deiken, yordam iinde de*parametre olarak kullanlmaldr.
Her pointera mallocla yer ayrmak gerekmiyor, yok yle bir ey!
in-fix
post-fix pre-fix
?
?
?
? ?
eval
Pointerlar bu yalardarendin rendin, yoksa 4.
snfta bile pointerrenmemi olursun.
Ben iki derstir ne anlatyorum? Dersi braktm, C anlattm, pointerlar anlattm. okiyi bildiiniz pointerlar bir de ben anlattm. Ben pointerlar ok iyi biliyorum, ama hoca bir ey diyor, yine de anlamadm. Olabilir.
-
8/7/2019 Veri Yaplar ve Algoritmalar 1 (Beta)
32/32
Senin dev kdnyle benimktla st ste getirip a
tuttuum zaman (fark grmemem lazm)
List gstergesiyle iaret edilen sral listenin ba alanlarn tersine eviren liste_devrik_al yordamn yaznz.Oge_ekle, oge_cikar, malloc, ekstra bellek, eksta iler yok; hibir ey yok!
typedefstructliste*list_gosterge;typedefstructliste{
intdeger;structliste*bag;
};
voidliste_devrik_al(list_gosterge*list){list_gosterge r, // en gerideki gsterge
p=*list, // en ilerideki gstergeq=NULL; // ortadaki gsterge
while(p){r=q; // r, q'yu takip eder.q=p; // q, p'yi takip eder.p=p->bag; // p'yi ilerlet.q->bag=r; // daha nce q, r'den nce yer alyordu, tersine evir.
}*list=q; // son e liste ba.
}
Balal Liste Kullanarak Yt Gerekletirimi - (s. 148)Top, liste ban tuttu. Silerken son elemandan geri gelmek gerektii iin ya iki iareti ile sonu tut, ya da tekiareti ile ba tut.
Seyrek Matrislerin Dngl Bal Listeyle Gsterimi