veri yapıları ve algoritmalar 1 (beta)

Upload: harun-koer

Post on 08-Apr-2018

247 views

Category:

Documents


0 download

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