veri yapıları ve algoritmalar 2

Upload: kaan-yildiz

Post on 18-Jul-2015

904 views

Category:

Documents


58 download

TRANSCRIPT

VER YAPILARI ve ALGORTMALAR

2

Yard.Do.Dr.

MustafaEGEDERSNOTLARI 20082009 Bahar Dnemi Ankara by Muhammed DEM RBA ya nl lar ve eksikler i necmin [email protected] adresine bildiriniz

nszElinizde bulunan bu ders notlar, Hacettepe niversite Bilgisayar Mhendislii Blmnde okutulan VeriYaplarveAlgoritmalar2dersindekikonulariermektedir.Yazlanlar,bykldedefterden,ders tekidiyaloglardanvederskitabndan(EllisHorowitzFundamentalsofDataStructuresinC)alnmtr.

OluumBu notlar; ncelikle Yasin KAVAKn, fotokopisi elden ele dolaan Veri Yaplar defterinin sanal ortama aktarlmasylaolumayabalad.(YasinKAVAKakalcteekkrler)Fotokopimakinelerindegittikesolano siyahbeyaz sayfalar; ekiller renlendirilerek ve kodlar MinGW & Eclipse C/C++ editrlerinden ina oldu umuzvurguverenklendirmelereuygunekildebiimlendirilerekdahailgiekicivedahaanlalrhlegeti rilmeyealld. Defterdekinotlarlayetinilmedi,20082009gzdnemindeMustafahocamznverdiiVeriYaplarders leribilfiiltakipedildi.Buderslerdedefterdenfazlaolarakedinilenbirikimdenotlarayanstlmayaalld. Hocamzn,grmgeirmibirmhendisingenmeslektalarnabirikimleriniaktarmassadedindeders esnasnda bizlere sunduu ufuk ac grlerinin de yer yer dhil edilmesi notlar renklendirdi ve derse mhendislikruhu,dersnotlarnaayrbirzenginlikkatt.Kendisineaitcmleler,belkiufakdzeltmeveuyar lamalarla,amabykounluklahocamznazndan,kendinehasnktelislbuzelliklekorunarakakta rlmayaalld. Tm bunlara ek olarak; notlardan istifade etmek isteyenleri aratrmaya sevk etmede bir ilk adm, bir tevikolmasamacylaekbilgilereklendi;konularWikipediaveVikipediarlkldbalantlarlabeslendi. Arzuedenler,konuylailgilidahadetaylbilgilerealanbirkapolarakbubalantlarabavurabilecekler 2009dersylndasnavlardasorulansorularverencizmlerideensonabirekolarakeklendi.

AmaveSonuBudersnotununoluumunceliklekiiselfaydaamalanarakbalamtr.Dahasonraiseyalnzcaher kesinfaydalanabileceibedavabirkaynakortayakoymamaksadnndna tamadan;severekisteyerek, iten gelerek, ama bir grev bilinciyle devam ettirilerek oluturulmutur. Sonuta, yapan da okuyan da memnunedengzelbirgayriresmiesermeydanagelmioldu.

Teekkrler...ncelikle veri yaplar ve algoritmalarn Bilgisayar Mhendisliinin can damar mesabesinde olduunu anlamamzayardmedenMustafaEGEhocamza Dersin standard hline gelmi defterinden bolca faydalandmz Yasin KAVAK arkadamza ve varsa kendisininfaydalanmolabilecei,bilemediimizdahaeskideftersahiplerine Yanllarveeksikleriekinmedensyleyenvebuiyiliklerindentrteekkrgerektenhakedentas hihiarkadalarma %60a%40sloganylayaptmziinbirkymeti olduunuzihnimdesomutlatrangiriimciruhluar kadalarma Notlarnoluumudneminde(zelliklesnavzamanlarnda)herkebandabeniyakalaypmemnuni yetlerinidilegetirerekgazmagazkatan,gayretimidiritutanblmarkadalarma Vendirilmesays:180saysnabirbirartrarakkatkyapanherferdebirbirteekkrederim.MuhammedDEMRBA Ankara2009

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

ii

85

NDEKLER

NSZ .................................................................................................................................................................... . NDEKLER ........................................................................................................................................................... .

AA(TREE)VERYAPISI.........................................................................................................................................1 TERMNOLOJ;...........................................................................................................................................................1 KLAA(BINARYTREE)...............................................................................................................................................1 KLAAVERYAPISININDZKULLANILARAKGSTERM.....................................................................................2 KLAAVERYAPISININBALAKULLANILARAKGSTERM..............................................................................2KLAADOLAMAYORDAMLARIZYNEL......................................................................................................................3 KLAADOLAMAYORDAMLARITERATF.......................................................................................................................4 SORU1:Kkndedolamayordamndngselolarakyaznz.........................................................................................4 SORU2:Kksondadolamayordamndngselolarakyaznz.>Budahazordur.........................................................4 SORU3:Udmlerisoldansaadoruyazanzyineliyordamyaznz.........................................................................4 SORU4:Udmlerisadansoladoruyazanzyineliyordamyaznz.........................................................................4 SORU5:Udmlerisoldansaadoruyazandngselyordamyaznz.......................................................................4 SORU6:Udmlerisadansoladoruyazandngselyordamyaznz.......................................................................4 SORU7:Yalnzsolocuuolandmleriyazanzyineliyordamyaznz........................................................................4 SORU8:Yalnzsaocuuolandmleriyazanzyineliyordamyaznz........................................................................4 SORU9:Herikiocuudaolandmleriyazanzyineliyordamyaznz........................................................................4 SORU:Lningsterdiibirikiliaacnudmleriniyazanyordamyaznz...................................................................5 SORU:kiliaatakidmleridzeydzeyyazdranyordamyaznz..............................................................................5 SORU:Lileiaretedilenikiliaacnkopyasnkartanyordamyaznz...........................................................................5 SORU:kiaacnebiimli(isomorphic[izomorfik])olupolmadndenetleyenprogramyaznz.................................5 SORU:esitmi()yordamnfarklbirbiimdeyaznz...................................................................................................6 SORU:Birikiliaacnsavesoldmlerininyerinideitirenyordamyaznz. .............................................................6 .

KLARAMAAALARI(BINARYSEARCHTREE).............................................................................................................6 KLARAMAAACINAEKLEME.................................................................................................................................6Dengeliaalar:..................................................................................................................................................................7 Skkullanlandmler:.....................................................................................................................................................7 ???:.....................................................................................................................................................................................7

EklemeNaslYaplr?.................................................................................................................................................7SORU:L,ikiliaramaaacnnkkniaretedengstergedir,NULLdaolabilir.kiliaramaaacnaxdeeriniekleyen boolean arama_agacina_ekle(int x, agac_gost *L)yordamnyaznz. ..............................................7 . SORU:Lilegsterilenikiliaramaaacndaxdeeriniarayan,bulursaxdeeriniiereneyegsterge,bulamazsa NULLdndrenagac_gost arama_agacinda_ara(int x, agac_gost L)yordamnyaznz..................8 SORU:Aramayordamnzyineliolarakyaznz.ncelikleaadakirneiinceleyiniz...................................................8 renci zm ....................................................................................................................................................................8 . SORU:Lileiaretedilenikiliaacnderinliinibulupdndrenyordamdngselolarakyaznz...................................8 SORU:Lileiaretedilenikiliaacnderinliinibulupdndrenyordamzyineliolarakyaznz.....................................8

EkParametrelerKoymaMevzusu.............................................................................................................................9 KLARAMAAACINDANESLME.......................................................................................................................9 SATISFIABILITYPROBLEM.............................................................................................................................................10Dahaiyizmaramak:...................................................................................................................................................10

OKUMAPARASI:MESLEKSEVGS........................................................................................................................11Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar iii 85

GENELLETRLMLSTELER(GENERALIZEDLISTS)..................................................................................................12 GENELLETRLMLSTELERNAVANTAJI................................................................................................................................13SORU:Paylamlaltlisteiermeyenzyinelemesizbirlisteyikopyalayanyordamyaznz............................................13 SORU:Paylamszvezyinelemesizikilistenineitolupolmadnbulanyordamyaznz..........................................14 SORU:zyinelemesizvepaylamlikilistenineitolupolmadnbulanyordamyaznz............................................14 SORU:zyinelemesizvepaylamszbirgenelletirilmilisteyidolap,atomikdmlerdekideerleriyazanvoid dolas_yaz(oge_gost L) yordamnyazn............................................................................................................14 SORU:zyinelemesizbirlisteninderinliinibulanyordamzyineliolarakyaznz........................................................15 SORU:zyinelemesizbirlisteninderinliinibulanyordamdngselolarakyaznz......................................................15 rencizm:..............................................................................................................................................................15 zyineliDnme:............................................................................................................................................................15 Dorualankod:............................................................................................................................................................15 OrijinalKitapAlmak:.........................................................................................................................................................15 SORU:Paylamszzyinelemesizlistenindevriinialanyordamyaznz.r:L=(a,(b,c))>L=((c,b),a)..........................16

OKUMAPARASI:TEORKARKAPLANVEMATEMATK..........................................................................................16 AAYAPISININGENELLETRLMLSTEYAPISIYLAKURULMASI..............................................................................17 AacnGenelletirilmiBirListeileGerekletirilmesininDezavantaj....................................................................17dev1:..................................................................................................................................................................................17 dev2:..................................................................................................................................................................................17

KILAVUZLUKLAA(THREADEDBINARYTREE)........................................................................................................17 KlavuzlukiliAaKurmaKurallar.........................................................................................................................18 KlavuzlukiliAataKkOrtadaDolam..............................................................................................................19SORU:KkortadadolamagreLileiaretedileneninardlnbulankilavuz_gost kokortada_ardil_bul( kilavuz_gost L )yordamnyaznz.....................................................................19

KlavuzlukiliAacaDmEkleme........................................................................................................................20SONU:.............................................................................................................................................................................20 NULLmkontrol: ............................................................................................................................................................21 . Aklamasatr:.................................................................................................................................................................21 Tekyordamaindirmek: ....................................................................................................................................................21 . YazlmMhendisliiKavramlar:......................................................................................................................................21 SORU:Sizdesolaeklemeyordamndnnz.............................................................................................................21

YIINLAR(HEAPS)..................................................................................................................................................22 NCELKKUYRUUNANEDENGEREKSNMDUYARIZ?...............................................................................................................22 MAKSMUMNCELKLKUYRUAEEKLEME......................................................................................................................23 MAKSMUMNCELKLKUYRUKTANEALMA/SLMEYORDAMI .............................................................................................24 . MaksimumncelikliKuyruktaneAlma/Silme....................................................................................................25 YIININDERVERYAPILARIYLAKARILATIRILMASI...............................................................................................................26 1) Srasz dizi: (unordered array):....................................................................................................................26 2) Srasz liste (unordered list):.........................................................................................................................26 3) Sral dizi (ordered array):............................................................................................................................26 4) Sral balal liste (ordered link list):...........................................................................................................26 5) Maksimum yn (max. heap):.....................................................................................................................26Problembyleolmal:.......................................................................................................................................................26 leriDzey:........................................................................................................................................................................26

KMELERDEUNIONVEFINDLEMLER ..........................................................................................................27 . GEREKLETRM: .............................................................................................................................................................27 . KUME_BUL_1VEBRLESM_1YORDAMLARININANALZ.........................................................................................................28SoftwareTesting: .............................................................................................................................................................28 .

AIRLIKLIKURAL(WEGHTNGRULE) ...................................................................................................................................28 .Soru:Aacnekadardejenereeder,bozar?...................................................................................................................29

Lemma ....................................................................................................................................................................29 . AZALTMAKURALI(COLLAPSNGRULE)..................................................................................................................................29 Lemma ....................................................................................................................................................................30 . Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar iv 85

ZGELER(GRAPHS)...............................................................................................................................................31 Problem...................................................................................................................................................................31 TANIMLAR....................................................................................................................................................................31izge.................................................................................................................................................................................31

ZGEVERYAPISINERELERDEKULLANILIR?................................................................................................................31 TERMNOLOJ...............................................................................................................................................................32Komudmler..............................................................................................................................................................32 Altizge............................................................................................................................................................................32 Yol.....................................................................................................................................................................................32 Teorem1................................................................................................................................................................................32 spat......................................................................................................................................................................................32

ZGEVERYAPISININGEREKLETRM.....................................................................................................................32 1KomulukMatrisi(AdjacencyMatrix).................................................................................................................32Derecebulma...................................................................................................................................................................32 Kenarsaysbulma............................................................................................................................................................32

2KomulukListesi(AdjacencyList)........................................................................................................................33Kenarsaysbulma............................................................................................................................................................33 Derecebulma...................................................................................................................................................................33

3DiziileSral(Sequential)Gsterim.....................................................................................................................33Yorum...............................................................................................................................................................................34

4YnlizgelerinKomulukListesi(Orthogonal)Gsterimi.................................................................................34 5KomuluunokBalalListelerileGsterimi(AdjacencyMultilist).................................................................35Dolamak..........................................................................................................................................................................35 Eklemek............................................................................................................................................................................35 Altrma...........................................................................................................................................................................35 karm.............................................................................................................................................................................35

ZGEZERNDETEMELLEMLER...............................................................................................................................36 nceDerinliineArama(DepthFirstSearch)..........................................................................................................36Ekleme..............................................................................................................................................................................36 Balangdm............................................................................................................................................................37 Listeninsrayaetkisi..........................................................................................................................................................37 Analiz................................................................................................................................................................................37 Veriyaps.........................................................................................................................................................................37

nceGeniliineArama(BreadthFirstSearch)......................................................................................................37Analiz................................................................................................................................................................................38 lerisi.................................................................................................................................................................................38

BitiikBileenler(ConnectedComponents).............................................................................................................39Analiz................................................................................................................................................................................39 Teorem..................................................................................................................................................................................39

YaylmAalar(SpanningTrees)...........................................................................................................................40Tanm.....................................................................................................................................................................................40 Ebiimlilik........................................................................................................................................................................40 Kenararlklar.................................................................................................................................................................40 Proje.................................................................................................................................................................................40 zelyaylmaalar.........................................................................................................................................................40 Soru:Kafarklyaylmaacvardr?................................................................................................................................40

MinimumYaylmlAalar(MinimumCostSpanningTrees).................................................................................41Tanm................................................................................................................................................................................41 rnekler:..........................................................................................................................................................................41 Algoritmalar......................................................................................................................................................................41 KruskalAlgoritmas................................................................................................................................................................42 PrimAlgoritmas....................................................................................................................................................................43 PrimVeKruskalAlgoritmalarnKodlamak............................................................................................................................44 ProblemzmedeYaklam.............................................................................................................................................45

EnKsaYolProblemi(ShortestPath).......................................................................................................................45 TekKaynaktanTmHedeflereEnKsaYol(SingleSourceAllDestinations)...........................................................46Bruteforceunanalizi........................................................................................................................................................46 Analiz................................................................................................................................................................................47 Yaplariyiletirmek..........................................................................................................................................................47 Yolubulmak......................................................................................................................................................................48Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar v 85

YAZILIMMHENDSLKAVRAMLARI...................................................................................................................................48 AKTVTEALARI ..............................................................................................................................................................48 .Satraras..........................................................................................................................................................................48 Tanm:DmAktifAlar(activityonvertex/nodenetworksAoV/AoN)......................................................................49 Tanm:TopolojikSra(topologicalordering/topologicalsort).............................................................................................49 Topolojik sra bulmak...........................................................................................................................................................49 TopolojikSraBulmaYordam................................................................................................................................................50 Tanm:KenarAktifAlar(activityonedge/arcnetworksAoE/AoA)...............................................................................51

GraphDrawing........................................................................................................................................................51Yapayaktivite(dummyactivity).......................................................................................................................................51 Minimumarcproblem:izgeyi,enazsaydayapayaktivitekullanarakizebilmeproblemi............................................51

EnErkenveEnGeBalamaZaman(EarliestTimes).............................................................................................512.VizeSorusu...................................................................................................................................................................52 EnErkenBalamaZamanlarnnHesaplanmas(CalculationofEarliestTimes).....................................................................52 EnErkenBalamaZamanHesaplamaTablosu......................................................................................................................53 EnGeBalamaZamanlarnnHesaplanmas(CalculationofLatestTimes)..........................................................................54 EnGeBalamaZamanHesaplamaTablosu.........................................................................................................................55 Bolluklar.................................................................................................................................................................................55

SIRALAMA(SORTING)............................................................................................................................................56 SEMELSIRALAMA(SELECTONSORT)ALGORTMASI..............................................................................................................57 EKLEMELSIRALAMA(INSERTONSORT)ALGORTMASI.............................................................................................................57 INSERTONALGORTMASININORTALAMADURUM(AVERAGECASE)ANALZ................................................................................58 KABARCIKSIRALAMA(BUBBLESORT)ALGORTMASI................................................................................................................59 SAYARAKSIRALAMA(COUNTNGSORT)ALGORTMASI.............................................................................................................59 OPTMALSIRALAMAZAMANI(OPTMALSORTNGTME)..........................................................................................................60Teorem..................................................................................................................................................................................60

HIZLI(ABUK)SIRALAMA(QUCKSORT)ALGORTMASI............................................................................................................60 OKUMAPARASI:ALGORTMAVEBLGSAYAR......................................................................................................62 QUCKSORTALGORTMASININORTALAMADURUM(AVERAGECASE)ANALZ..............................................................................63 ZYNELEMESZQUCKSORTALGORTMASI ...........................................................................................................................65 . GELTRLMQUCKSORTALGORTMASI..............................................................................................................................66 OKUMAPARASI:ZORUNLUSTAJLAR....................................................................................................................66 BRLETRMELSIRALAMA(MERGESORT)ALGORTMASI ..........................................................................................................67 . MERGESORTALGORTMASININANALZ ...............................................................................................................................69 . ZamanKarmakl.................................................................................................................................................69 BellekKarmakl..................................................................................................................................................69 AlfabetikVerileriSralamak.....................................................................................................................................69 YIINSIRALAMA(HEAPSORT)ALGORTMASI.........................................................................................................................71 ZamanKarmakl.................................................................................................................................................72 BASAMAAGRESIRALAMA(RADXSORT)ALGORTMASI........................................................................................................74 SINAVLARDAIKMISORULAR..............................................................................................................................77 2009QUZ1.UBE.......................................................................................................................................................77renci zm ..................................................................................................................................................................77 . renci zm ..................................................................................................................................................................77 . renci zm ..................................................................................................................................................................78 . renci zm (1-i)..........................................................................................................................................................79 renci zm (1).............................................................................................................................................................81 renci zm (2).............................................................................................................................................................83 renci zm (4).............................................................................................................................................................85

2009QUZ2.UBE.......................................................................................................................................................77 2009ARASINAV1...........................................................................................................................................................78 2009ARASINAV2...........................................................................................................................................................79 2009FNAL.....................................................................................................................................................................81

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar vi 85

AA(TREE)VERYAPISIArama, sralama, sz dizim, veri sktrma, zmleme (syntax analysis), kod optimizasyonu (code optimization) ve derleyici gerekletirimindeki ara sreler gibi ok eitli amalar iin kullanlan aa

veri yaps, bilgisayar bilimlerinde nemli yer tutar. Aa veri yaps, gnlk yaamda da karlatmz bir yapdr. Bir insann/bitkinin soy aac, hiyerarik bir ynetimdeki ilikiler aa veri yaps kullanlarak kolayca grafiksel olarak tanmlanabilir.

Aa (tree) veri yaps, izge (graph) veri yapsnn bir alt kmesidir. Bir izgenin aa olabilmesi iin her bir dmn yalnzca tek bir atas olmaldr; dier deyile aata her bir dmn tek bir babas olur, izgede ise birden ok olabilir. TERMNOLOJ; Yandaki aa ile ilgilenelim: B; E ve F dmlerinin babasdr. E ve F dmleri, B dmnn ocuklardr. Ayn babann ocuklar, karde (sibling) dmlerdir. Terminoloji bykbaba-torun eklinde dier kuaklara geniletilebilir. D, Mnin bykbabas; E, F, G, H, I ve J dmE leri Ann torunlardr.Dzey 1 D H I J 2

A B F C G

3

A kk (root) dmdr. Bir dmn (node) 4 K L M alt aalarnn (subtrees) says sz konusu dmn derecesini (degree) verir. rnein A dmnn derecesi 3tr. F dmnn derecesi 0dr. Bir aacn derecesi ya da derinlii (depth) ise aataki dmlerin derecelerinin maksimumuna eittir. Derecesi 0 olan bir dm yaprak (leaf) yada u (terminal) dm olarak isimlendirilir. rnein K, L, F, G, M, I, J. Alt aalar bulunan bir dm alt aalarnn kklerinin babasdr (parent). Sz konusu dmler ise baba konumundaki dmn ocuklardr (child). Bir dmn atalar (ancestor) kkten bu dme kadar olan iz (path) zerindeki tm dmlerdir. A, D, H dmleri Mnin atalardr. E, F, K ve L dmleri Bnin torunlardr. KLAA(BINARYTREE) Yalnzca sol alt aac (left subtree) ve/veya sa alt aac (right subtree) olan ya da hi ocuu olmayan dmlerin oluturduu aaca ikili aa ad verilir. kili aata dmlerin dereceleri 0, 1 ya da 2 olabilir. Aacn, izgenin bir alt kmesi olduunu sylemitik. kili aa da aacn bir alt kmesidir.

Lemma (doruluu hemen grlebilen, kolayca kantlanabilen teorem; teoremin yumuatlm hali)i) kili bir aata i. dzeydeki dmlerin maksimum says 2i-1 dir. (i1) ii) k derinliinde (depth) olan ikili bir aata dmlerin maksimum says 2k1 dir. (k1)

i) Tmevarmdan; i=1 iin dm says 20=1 salanr. (n1). dzeyde 2n2 dm varsa n. dzeyde 2n2 sol ocuk + 2n2 sa ocuk = 2n1 dm olur. k ii) (i. dzeydeki maksimum dm says) =i =1 k

Lemmann spat:

A B C D H D I B E

A C F J G K

Dzey 1 2 3 4

2i =1

i 1

= 20 + 21 + 22 + ... + 2k 1 = 2k 1

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

1

85

Tm dzeyler tam dolu!2 4 8 9 10 5

1 3 6 7

10 numaral dm yok!2 4 8 9 5 11

1 3 6 7

Tam dolu (full) ikili aa

Tam (complete) ikili aa

Tam olmayan (incomplete) ikili aa

TANIM: Tamdolu(full)ikiliaa; aacn derinlii k ise, dmlerin says 2k1 olan ikili aatr. TANIM: Tam (complete) ikili aa; n dml olan; babaya i, sol ocua 2i, sa ocua 2i+1 numaras verildiinde 1den ne kadar numaralandrmann yaplabildii aatr. (kkten son dme atlama yaplmadan numaralandrma yaplabilmeli) KLAAVERYAPISININDZKULLANILARAKGSTERM n dml bir tam ikili aa, bir dizi zerinde gerekletirilebilir. ndisi i olan bir dm iin baba, sol ocuk ve sa ocuk indisi aadaki formllerle hesaplanabilir. Dizinin kullanmna -formller gerei0 deil, 1 nolu indisten balanacana dikkat edilmelidir! Eer i=1 ise sz konusu dm kk dm olup babas yoktur. baba (i ) = i 2 solcocuk(i) = 2i2i > n ise sol ocuk kalmamtr.

sagcocuk(i) = 2i + 1 2i > n ise sa ocuk kalmamtr.1 1 1 A kili aacn dizi ile gerekletiriminA A A 2 B 2 1 B de alacak dizinin boyutunu belirleme2 3 3 C 3 B de derinlik parametresi kullanlr. Aacn B C 2 4 4 D C derinlii k ise 2 k 1 boyutunda bir dizi 4 5 7 6 5 E C 4 D E F G almaldr. Aacmz, tam (complete) 8 6 F D 8 9 bir ikili aa ise (soldaki rnek) hemen D 7 G 8 H I 16 8 H hemen tm dizi gzleri dolacak, bellek E E 16 9 I kayb ya hi olmayacak ya da ok az 31 olacaktr. Dizi deil o! O bir aa! Fakat aa, tam ikili aa olmaktan uzaklatka (sadaki rnek) tl bekleyen bellek miktar artacaktr. rneimizdeki sola arpk (skewed) olan ikili aata derinlik 5tir. En kt durumda 2 5 1 =31 elemanl bir dizi amak gerekir, fakat bu dizinin sadece 5 eleman kullanlr. Depolama ve eriim, bilgisayar bilimlerinin iki ana konusudur. stte aklanan bellek karmakl asndan dnldnde eer aacmz tam ikili aasa ve ekleme/karma yaplmayacaksa, aa yapsn dizi ile gerekletirmek uygun olur. rnein bir a zerindeki bilgisayarlar sabitse, ilerde bilgisayar eklenip kartlmayacaksa ikili aa yapsn dizi ile kurabiliriz.

KLAAVERYAPISININBALAKULLANILARAKGSTERM1: typedef struct agac *agac_gost; 2: typedef struct agac { 3: agac_gost solcocuk; 4: char veri; 5: agac_gost sagcocuk; 6: };

veri sol ocuk (gsterge) sa ocuk (gsterge)

sol ocuk

veri

sa ocuk

A B D H I E F C G H D I B E

A B C C F G D E

A B C D E

A

gstergeler koyu renkli dikdrtgenle gsterilmitir.

NULL

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

2

85

KLAADOLAIMLARI(BINARYTREETRAVERSALS) kili aa zerinde birok ilem yaplabilir. Bunlardan en ok kullanlan Gsterge 1 eitli kriterlere gre dmleri yalnzca bir kez ziyaret ederek tm aac do2 lamaktr. Bir aac dolarken bir dme ilikin olarak veri (i), sol alt aa (ii) 3 ve sa alt aa (iii) sz konusu olduundan dolay dolama sras 6 farkl bi4 5 imde olabilir.1- Sol Veri Sa (inorder = kk ortada) 2- Sol Sa Veri (postorder = kk sonda) 3- Veri Sol Sa (preorder = kk bata)1

4- Sa Veri Sol 5- Sa Sol Veri 6- Veri Sa Sol

+2 17

x3 14 18

E19

x4 11 15

D16

/5 8 12

C13

A6 7 9

B10

Sol dmn sa dmden nce dolald ilk dolam ekli ksaca inorder, postorder ve preorder olarak bilinir. Uygulamann ihtiyacna gre istersek dier dolam eklini de kullanabiliriz. Aritmetik ifadelerin ara-ile, n-ile ve son-ile biimleriyle kkortada, kk-bata ve kk-sonda dolama arasnda bir balant vardr. rn. yanda aa yaps verilen aritmetik ifadenin n-ile biimini aac kknde dolaarak elde edebiliriz.

A B C D G H J E I K L F

Kk-ortada(infix): ((((A/B)*C)*D)+E) Kk-nde (prefix): +**/ABCDE

Veri Alan lev + x x / A 6 NULL 5 A printf 7 NULL 4 / printf 8 B 9 NULL 8 B printf 10 NULL 3 x printf 11 C 12 NULL 11 C printf 13 NULL 12 x printf 14 D 15 NULL 14 D printf 15 NULL 1 + printf 17 E 18 NULL 17 E printf 19 NULL Kk ortada dolam

Soldaki rnek aac farkl ekilde dolatmzda u sralamalar elde ederiz: inorder: BGDHCECIKALF postorder: GHDJKIECBLFA preorder: ABCDGHEIJKFL

KLAADOLAMAYORDAMLARIZYNELNOT:

Aa gstergesi NULL gelebilir, buna hi dikkat etmiyorsunuz!1: void kok_sonda_dolas( agac_gost L ){ 2: if(L){ 3: kok_sonda_dolas( L->solcocuk ); 4: kok_sonda_dolas( L->sagcocuk ); 5: printf("%c", L->veri); 6: } 7: }

1: void kok_ortada_dolas( agac_gost L ){ 2: if(L){ 3: kok_ortada_dolas( L->solcocuk ); 4: printf("%c", L->veri); 5: kok_ortada_dolas( L->sagcocuk ); 6: } 7: } 1: void kok_onde_dolas( agac_gost L ){ 2: if(L){ 3: printf("%c", L->veri); 4: kok_onde_dolas( L->solcocuk ); 5: kok_onde_dolas( L->sagcocuk ); 6: } 7: }

NOT: Bu algoritmay hl anlamadysanz, aa eklindeki stack framei izmeniz anlamanza yardmc olacaktr.

zyineli arlarn olduu satrlar NULL ile arlmaktan kurtararak algoritmamz daha da optimize edebiliriz. Bunun iin rnein, soldaki gibi yazdmz 4 ve 5. satrlar sadaki gibi deitirebiliriz;4: kok_onde_dolas( L->solcocuk ); 5: kok_onde_dolas( L->sagcocuk ); 4: if(L->solcocuk) kok_onde_dolas( L->solcocuk ); 5: if(L->sagcocuk) kok_onde_dolas( L->sagcocuk );

Gemiteki tm sorularm internete koysam, bu sizi yanltr. Naim Sleymanolunu halter kaldrrken 100 kere seyretsem, yine de ben o halteri kaldramam. Bu nasl yazld sorusuna younlan. Bunu siz zmelisiniz, kendiniz anlamalsnz. zerinde almazsanz, 4. snfa gelseniz bile zyineli (recursive=rekrsif) kod yazamazsnz.

Duyarsam unuturum, grrsem hatrlarm, yaparsam renirim. [in Atasz]Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 3 85

Algoritmay yazdktan sonra peini brakmyoruz. Bilgisayar bilimlerinde algoritmann analizini yapmak zorundayz. Yazdmz yordamlarda (dm says n olmak zere) maliyet 2n = O(n)dir, deimez. (bir gitti bir geldi, elemanlarn stnden 2er kez geti; toplam 2n) Bellek karmakl ise derinlikle ilikilidir O(lgn).Sizin Hocam, zyineli algoritmalar ok bellek yer tarzndaki iddialarnz, zyineli kod yazmamak iin kaamaktr. te bakn, bellek karmakl O(lgn) oldu. zyineli algoritmalar, karmak problemlerin stesinden hzlca gelmek iin zm sunar.

KLAADOLAMAYORDAMLARITERATF Her zyineli algoritma dngsel hale getirilebilir. Bu, iki ekilde yaplabilir. Birincisi; zyineli algoritmann davrann dngsel ekilde ifade ederek olur. kincisi; tpk iletim sisteminin zyineli yordam iletilirken yapt gibi, dn adreslerini bir stacke atarak olur. Biz, algoritmamzn davrann dikkatlice tetkik edelim, rnein inorder dolam zerinde duralm. Kk ortada dolaabilmek iin kkteki deeri basmadan nce sol alt aac basmamz gerekiyor. yleyse dmleri bir sraya koyduumuzda son eklediimize nce erimek isteyeceiz. Ya hu bu bir stack yaps! Ne kadar estetik anlattk! yleyse bir yt kullanacaz. Bellek karmakln artrmamak iin yta, eleri kopyalamak yerine elerin adreslerini koyacaz. Peki, bize ne kadarlk bir stack lazm, yt boyutu ne olmal? Yta ayn anda eklenebilecek en fazla eleman says, aacn sol derinlii kadardr. Aadaki yordam, yinelemesiz (iteratif=dngsel) bir yaklamla kk ortada dolam gerekletirir. Yazdrma ilemini yapan 11. satra uygun bir koul ifadesi koyarsak sadece setiimiz dmleri yazdran bir yordam elde edebiliriz: sadece u dmler, sadece tek ocuklular, sadece sol ocuklular vs.1: void kok_ortada_dolas( agac_gost L ){ 2: void yigit_ekle( int *, agac_gost, agac_gost[] ); 3: agac_gost yigit_al( int *, agac_gost[] ); 4: int ust = -1; 5: agac_gost yigit[MAX_SIZE]; 6: for(;;){ 7: for(;L; L = L->solcocuk ) // sol dmleri yta ekle 8: yigit_ekle( &ust, L, yigit ); 9: L = yigit_al( &ust, yigit ); // Yt bosa NULL dner 10: if(!L) break; 11: printf("%c",L->veri);//if(!(L->sagcocuk)||!(L->solcocuk)) printf("%c", L->veri); 12: L = L->sagcocuk; 13: } 14: }

Her dm yta bir kez eklenir, yttan 1 kez alnr. Her dmden 2 kez geildii iin (dm says n olmak zere) 2n adm vardr, zaman karmakl O(n)dir. Derinlik h ise en kt durumda (aacn arpk [skewed] olmas durumunda) bellek (space) karmakl O(h)tr. Fakat bellek karmakl aacn durumuna gre O(1)de de kalabilir.Bizim bu dersteki amacmz, byk otomasyon sistemleri vs. gelitirmek deil, kk modlleri ustaca yazabilmektir. Kk kodlar defalarca farkl ekillerde yazmalsnz. almalarnz kt zerinde yazarak yapmanz, zyineli kod yazabilme yeteneinizi gelitirecektir. SORU 1: Kk nde dolama yordamn dngsel olarak yaznz. SORU 2: Kk sonda dolama yordamn dngsel olarak yaznz. -> Bu daha zordur. SORU 3: U dmleri soldan saa doru yazan zyineli yordam yaznz. SORU 4: U dmleri sadan sola doru yazan zyineli yordam yaznz. SORU 5: U dmleri soldan saa doru yazan dngsel yordam yaznz. SORU 6: U dmleri sadan sola doru yazan dngsel yordam yaznz. SORU 7: Yalnz sol ocuu olan dmleri yazan zyineli yordam yaznz. SORU 8: Yalnz sa ocuu olan dmleri yazan zyineli yordam yaznz. SORU 9: Her iki ocuu da olan dmleri yazan zyineli yordam yaznz.

Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.[Alan Jay Perlis]

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

4

85

SORU: Lnin gsterdii bir ikili aacn u dmlerini yazan yordam yaznz.1: void uc_dugum_yaz( agac_gost L ){ 2: if(L){ 3: uc_dugum_yaz( L->solcocuk ); 4: if( !(L->solcocuk) && !(L->sagcocuk) ) 5: printf("%c", L->veri); 6: uc_dugum_yaz( L->sagcocuk ); 7: } 8: }

SORU: kili aataki dmleri dzey dzey yazdran yordam yaznz. I.YntemA B D H C E F GA

Her eleman 3 kez alnd iin zaman karmakl 3n = O(n) olur. h, aacn derinlii olmak zere lgnhveri); 12: if(L->solcocuk) kuyruk_ekle(on, &arka, L->solcocuk, kuyruk); 13: if(L->sagcocuk) kuyruk_ekle(on, &arka, L->sagcocuk, kuyruk); 14: } else break; 15: } 16: }

Zaman karmakl 2n=O(n)

Bellek karmakl O(lgn)

(Derinlik lgn+1)

SORU: L ile iaret edilen ikili aacn kopyasn kartan yordam yaznz. nce kt zerinde benim tahtada yaptm almay yapmalsnz, zyineli zldn grmelisiniz. Bu yordam bottom-up alyor, topdown da yazlabilirdi. Bu yordam, aac kk-sonda dolama biimine gre dolayor; satrlarn yerleri deitirilerek kk-nde ve kk-ortada biimine de kolayca evrilebilir.1: agac_gost agac_kopyala( agac_gost L ){ 2: agac_gost T; 3: if(L){ 4: T=ogeal(); 5: T->solcocuk = agac_kopyala(L->solcocuk); 6: T->sagcocuk = agac_kopyala(L->sagcocuk); 7: T->veri = L->veri; 8: return T; 9: } 10: return NULL; 11: }

SORU: ki aacn e biimli (isomorphic [izomorfik] ) olup olmadn denetleyen program yaznz.1: int esitmi( agac_gost L, agac_gost T ){ 2: return ( !L && !T ) || ( L && T && ( L->veri == T->veri ) 3: && esitmi( L->solcocuk, T->solcocuk ) 4: && esitmi( L->sagcocuk, T->sagcocuk ) ); 5: }

Eer bizden sadece iki aacn biimce benzer olup olmadnn testini yapmamz isteniyorsa, veriler nemsenmiyorsa o zaman ( L->veri == T->veri ) ifadesini kaldrrz.Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 5 85

kili aalarn izomorfik olup olmadn denetlemek bu kadar kolay! ki izgenin (graf) e biimliliini bulmak ise olduka zor bir problemdir. Hocam, benimki ok gzel alyor da geri dnmyor. aryorum, aryorum, ama dnmyor, tkanp kalyor. O zaman yine zyineli algoritma yazmay renememiiz demektir. SORU: esitmi() yordamn farkl bir biimde yaznz. SORU: Bir ikili aacn sa ve sol dmlerinin yerini deitiren yordam yaznz.1: void cocukdegistir( agac_gost L ){ 2: agac_gost p; 3: if(L){ 4: SWAP( L->solcocuk, L->sagcocuk, p); 5: cocukdegistir( L->solcocuk ); 6: cocukdegistir( L->sagcocuk ); 7: } 8: }A B C D

Verileri deitirmiyorum, sadece gstergeleri takas ediyorum. Bylece sa ve sol alt aalar yer deitirmi oluyor. Bu yordamn davrann kt zerinde adm adm inceleyiniz. Eer SWAP makrosunu zyineli arlarn ncesine deil de arasna ya da sonuna koysaydk ne ekilde bir davran gzlemlerdik, tetkik ediniz.

TETKK SONUCU: Bu aa zerinde ayn sonucu retti, nk sa aalarn hepsi tek dml.KLARAMAAALARI(BINARYSEARCHTREE) kili arama aac da bir tr ikili aatr (ikili aacn bir alt kmesi). Eer ikili arama aac bo deilse aadaki zellikleri tar. 1. kili aata her enin deeri farkldr, birden ok e ayn deere sahip olamaz. Deerler tektir. (Unique) 2. Bo olmayan sol alt aataki deerler, alt aacn kk konumunda bulunan deerden kktr. 3. Bo olmayan sa alt aata bulunan deerler, alt aacn kk konumundaki deerden byktr. 4. Sol ve sa alt aalar da ikili arama aac zelliini tar. En soldaki rnekte 22 verisi ieren dm, 15in sa ocuu olduu iin beklenen ekilde 15ten byktr. Fakat 22, 18in sol alt aacnda olduu halde 18den byktr, hlbuki kk olmalyd. Bu yzden bu aa, ikili arama aac tanmna uymaz, ikili arama aac zellii tamaz. Dier rneklerde ise aacn mevcut dmleri byklk-kklk sralamasn bozmadan yerlemitir.18 80 15 9 22 19 20 21 2 50 95 97 38 39 35 40 53

kili arama aac

kili arama aacdr

kili arama aacdr.

KLARAMAAACINAEKLEME Mevcut bir ikili arama aacna, ikili arama aac olma zellikleri bozulmadan her deer eklenebilir. Gelen veriye gre byk-kk karlatrmalar yaplarak uygun yer bulunup oluturulan yeni dm eklenir. Siz bir deer syleyin, ben ekleyeyim. Hocam 15in sana ekleyin. Saa eklerim, sola eklerim; sen bir deer syle. Nereye ekleyeceim benim bileceim i! SORU: 3, 5, 7, 9, 11 kmesiyle derinlii 3, 4 ve 5 olan ikili arama aalar iziniz. Bu kmeyle 2 derinliinde bir aa izilebilir mi? ZM: stenen rnek aalar yanda izilmitir. Bu derinliklerde farkl aalar retmek elbette mmkndr. Fakat 2 derinliinde bir aa izilemez. nk lemmaya gre k derinliindeki bir aataki maksimum dm says 2k1 olabilir. 2 derinlikli aata da en fazla 22 1=3 dm bulunabilir, bu aaca 5 dm smaz.Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 3 9 5 7 7 11 3 5 9 11 3 5 7 9 11

Derinlik 3

Derinlik 4

Derinlik 56 85

47 26 17 34 49 52 55 84 93

VerilerinAacaEklenmeSrasnemlimidir? kili arama aacn kurmada verilerin geli biimi (aaca ekleni sras) nemlidir. Srasyla 47, 55, 49, 26, 34, 17, 52, 84, 93 eklinde gelirse soldaki aataki gibi yerleir. Derinlik: 4. Srasyla 26, 17, 47, 93, 84, 52, 34, 55, 49 eklinde gelirse sadaki aataki gibi yerleir. Derinlik: 6. Kk ortada dolam sonucu ise her iki aa iin ayn olur: 17, 26, 34, 47, 49, 52, 55, 84, 93.

26 17 47

34 84 52

93

Veriler sral gelseydi oluacak aa saa ya da sola arpk olacakt ve derinlii n ola- 49 55 cakt. Eer ikili arama aacnn derinlii lg(n) ise bu durumda dengeli ikili arama aac sz konusudur. Silme ve eklemede karmaklk O(lgn) olacaktr. rnein, n=2.000.000 e iin karlatrma says lgn21 olacaktr. O(n) ile O(lgn) arasndaki fark 2.000.000 ile 20 arasndaki fark gibidir. Dengeli aalar: Veriler nasl gelirse gelsin, aac dengeli hale getiren algoritmalar var. Bu algoritmalar, veri geldiinde aacn arlk noktasn annda hesaplar ve aac bu noktadan silkeleyerek dengeler. (self-balancing binary search tree) r: Red-Black tree, AVL tree .u an konumuz deil. Aacn dengeli olmas sizin iin ok nemliyse aac dengeli kuran algoritmalar kullanmalsnz. ok zor deil, kitaplarda da var, sadece biraz daha uzun. dev olarak sorabilirim. Sk kullanlan dmler: Baz durumlarda aranan dmler, sk kullanlan dmler olabilir. rnein bir hastaneye giri yapan hastalarla ilgili ilemler birka gn srecektir, dolaysyla ayn hastalara srekli eriilmek istenecektir. Arama yordamnn hzl sonu dndrebilmesi iin bu dmlerin kke yakn olmas istenen bir durumdur. Aac, arama frekans yksek olan dmleri kke yaklatracak ekilde yeniden dzenleyen algoritmalar (Zig-zag algoritmalar) mevcuttur. Bunlar daha ileri konular. imdilik sadece gelen verilerle basite bir ikili aa kurmay reneceiz. Bylece imdiye kadar yazdmz yordamlar altrp test etmemizi salayacak rnek aalar oluturabileceiz. imdiye kadar arka planda bir aa olmad iin kodu altrarak test edemiyordunuz. ???: Aata dmlerin yerleiminden (aa grntsnden) yola karak verilerin eklenme sras elde edilebilir mi? Gelen veriye gre, oluan aa yaps unique oluyor mu? ???: Kk-bata, kk-ortada, kk-sonda dolam srasndan aa grnts elde edilebilir mi? EklemeNaslYaplr? Her iki ocuu da olan bir dme eklenemez. En az bir ocuu olmayan dme eklenebiliyor. Gelen veri, kkten itibaren aata aranr. Daha byk deerli bir dme rastlanrsa sol ocuuna, daha kk deerli bir dme rastlanrsa sa ocuuna ilerlenir. Eer ayn deer bulunursa ikili arama aacnn tanmna aykr olacandan aaca ekleme yaplamaz. Arama gstergesinin son kald konuma (deeri ararken ilk rastlad NULL gstergenin yerine) e eklenir. SORU: L, ikili arama aacnn kkn iaret eden gstergedir, NULL da olabilir. kili arama aacna x deerini ekleyen boolean arama_agacina_ekle(int x, agac_gost *L) yordamn yaznz.1: typedef enum { FALSE, TRUE } boolean; 2: boolean arama_agacina_ekle( int x, agac_gost *L ){ 3: agac_gost ogeal(void); 4: agac_gost q, p, r; // q arkadaki, p ndeki gsterge 5: p = *L; // p kk gsteriyor 6: while( p ) { // ndeki gsterge NULL oluncaya kadar ilerle 7: q = p; // arka gstergeyi gnle. 8: if( x < p->veri ) p = p->solcocuk; // yeni elemann yeri sol alt aata m 9: else if(x > p->veri) p = p->sagcocuk;//yeni eleman yeri sa alt aata m 10: else { printf("\nBenzer deger var."); return FALSE; }} 11: r = ogeal(); 12: r->solcocuk = r->sagcocuk = NULL; 13: r->veri = x; 14: if( *L == NULL ) *L = r; // aa bosa yeni e kk yaplr 15: else { 16: if( x < q->veri ) q->solcocuk = r; // babann sol ocuu mu 17: else q->sagcocuk = r; // yoksa sa ocuu mu gnlenecek 18: } return TRUE; }Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 7 85

agac_gost *L : Aa bosa (L==NULL) eklenen eleman ilk eleman olacaktr ve L gstergesinin gnlenmesi gerekir. Bu yzden L gstergesini call by reference ile gndereceiz. Algoritma karmakl

O(n)e doru gider.

(lgn) - O(n) arasnda deiir. Dengeli aata O(lgn) maliyetle aranr. Aa arpklatka maliyet

SORU: L ile gsterilen ikili arama aacnda x deerini arayan, bulursa x deerini ieren eye gsterge, bulamazsa NULL dndren agac_gost arama_agacinda_ara(int x, agac_gost L) yordamn yaznz.1: agac_gost arama_agacinda_ara( int x, agac_gost L ){ 2: while(L){ // uygun alt aata sona dek ilerle 3: if( x == L->veri ) return L; 4: if( x < L->veri ) L = L->solcocuk; 5: else L = L->sagcocuk; 6: } 7: return NULL; 8: } Yordamn ne yapmas gerektiini aka tanmlyoruz. Memura grevi tanmlarken mdr ok doru tanmlamal. Adam bir daha gelip kapy almamal.

SORU: Arama yordamn zyineli olarak yaznz. ncelikle aadaki rnei inceleyiniz.1: if(L){ 2: if( x == L->veri ) return L; 3: if( x < L->veri ) return arama( x, L->sol ); 4: return arama( x, L->sag ); 5: } 6: return NULL; zyineli kod yazarken yandaki rnekteki gibi return satrndan sonra ilem yapyorsunuz. Buraya hi girmez, ama olsun, biz yazalm da

Bu rnek alr m? Hayr! Eer aranan x, L->veri deerinden kkse if( x < L->veri ) blouna girilir. Blok iindeki zyineli ar ne dndrrse dndrsn sonu olarak da o dner. NULL da dnse, bir sonu bulunup o da dnse niha dn deeri bu olur. Yani 3. Satrdaki if blouna girilirse 4. satrdaki sa aac arama ilemi asla yaplmaz. renci zm:1: agac_gost ara_ozyineli( int veri, agac_gost L ){ 2: if( !L ) return NULL; // aa bo mu 3: if( L->veri == veri ) return L; // aranan bulundu 4: agac_gost T = ara_ozyineli( veri, L->solcocuk ); // sol aata ara 5: return ( T ) ? T : ara_ozyineli( veri, L->sagcocuk ); // yoksa sada ara 6: } Bu yazdmz yordamlar buradaki herkesin gz kapal yazmas lazm! Hadi bir gz ak olsun

SORU: L ile iaret edilen ikili aacn derinliini bulup dndren yordam dngsel olarak yaznz.teratif kod yazmak acemi ii! Bunu denemelisiniz, ama kymetsiz olduunu da kabul etmelisiniz. Snavda bu ekilde yazsan, alsa bile puan alamazsn. Bundan kann, hibir kymeti yok! Neden? nk global deikenler kullanyorsun. Ama doru alyorsa 1 puan da m vermezsiniz? Hayr, 0.25 bile vermem! Fakat yordam iinde yerel olarak yordam tanmlayp kullanabilirsin, bu olabilir.Byk firmalarda byk ilerin yaplabilmesi iin entegre almak gerekir. Bunu yle bir aa yaps eklinde dnn. Senin yazdn bir yordam ta burdaki adam kullanyor. Ama sen onu tanmyorsun, o ta Hindistanda! Telefonu ap Ya

O

Sen

senin bi max deikeni var, bu ne oluyor? diye soramaz ki!

SORU: L ile iaret edilen ikili aacn derinliini bulup dndren yordam zyineli olarak yaznz. Aacn derinlii, sol ve sa alt aalarnn maksimum Recursive Thinking (zyineli dnme/muhakeme) derinliklisinin 1 fazlasdr: max(sol, sa) + 1 Recursive Algorithms Her dme ait 2 yerel parametre: sol & sa derinlik. Solving Recursive Relations(zyineli bantlar zme)

Bu iki yaklam bizim mhendis arkadalara kabul ettirmek zordur. Adamn bir dnce tarz var, ne gzel kod yazyor!Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 8 85

DKKAT: Problem yeterince kld m? Bata da NULL gelebilir! 1: int derinlik( agac_gost L ){ return 4; 2: /* sol ve sa alt aa derinlii bulunup {2,3} 3: bu iki deerin maksimumuna 1 eklenmelidir. */ {1,0} {2,0} 4: int sol, sag; 5: if( L ){ // gsterge NULL m {0,0} 6: // sol ve sa alt aacn derinliini bul {1,0} 7: sol = derinlik( L->solcocuk ); NULL ile yaplan 8: sag = derinlik( L->sagcocuk ); {0,0} arlardaki local 9: return MAX(sol, sag) + 1; deikenler kullanl- { , }{ , } 10: } madan silinir 11: else return 0; // u yapraa ulald 12: }

Binlerce kez zyineli kod yazdysanz bu kodu daha profesyonelce yle yazarsnz:1: int derinlik( agac_gost L ){ 2: return (!L) ? 0 : MAX( derinlik( L->solcocuk), derinlik(L->sagcocuk) )+1; 3: }

EkParametrelerKoymaMevzusu If you have a procedure with 10 parameters, you probably missed some. [Alan Jay Perlis] Bir renci sorar: Hocam yordam, int derinlik( agac_gost L, int a ) eklinde fazladan bir parametre ekleyerek tanmlasak da derinlik(L,0) eklinde bir ilk aryla zsek olur mu? Cevap: Neden fazladan parametre tanmlayp ilk arda sfr aktaryorsun? Aada bir yerde toplayacaksn dimi? Bak, ben biliyorum. Yordam kullanan adama ne diyeceksin? aya sfr aktarmay sakn ha unutma! Sralama yordam yazdn; 0 aktarnca sralyor da, 1 aktarnca sralayamyor Olur mu? Ama u olur; kkten bye mi, bykten ke mi sralanacan belirtmek iin bir parametreye, -1, +1 ya da '>', 'deger ){ printf(); return; } } 1: typedef enum { not, and, or, true, false } logical; 2: typedef struct agac *agac_gost; 3: typedef struct agac { 4: agac_gost solcocuk; 5: logical veri; 6: short int deger; 7: agac_gost sagcocuk; 8: }; 9: void kok_sonda_degerlendir( agac_gost L ){ 10: if(L){ 11: kok_sonda_degerlendir(L->solcocuk); 12: kok_sonda_degerlendir(L->sagcocuk); 13: switch( L->veri ){ 14: case not : L->deger = !(L->sagcocuk->deger); break; 15: case and : L->deger = L->sagcocuk->deger && L->solcocuk->deger; break; 16: case or : L->deger = L->sagcocuk->deger || L->solcocuk->deger; break; 17: case true : L->deger = TRUE; break; 18: case false: L->deger = FALSE; break; 19: }}}

Circuit Satisfiability (CIRCUIT-SAT): Verilen bir devrenin kn 1 yapacak bir atama yaplabilir mi? Formula SAT 3-CNF-SAT (3-conjuctive normal form): Her alt cmle (clause) 3 deiken ieriyor; ( x1 V x1 V x2 ) ( x3 V x2 V x4 ) (x1 V x3 V x4 ) Peki, bu aa nasl kurulur? Algoritmalar var, alma yapmak gerekir. Yazlm Mhendislii Lab. (341-342) derslerinde 12 kez dev olarak sorduk. Algoritmamz olas tm ihtimalleri deniyor, brute force yapyor. lem aacn bata bir kez kurduktan sonra (precomputing) her seferinde deerleri yerletirip sonuca bakmak iimizi hzlandryor. Precomputing: Defalarca kez yaplacak bir i iin nceden bir kez yaplacak bir alma, hazrlanacak bir veri yaps verimlilii son derece artrr. r: String search/match (en zor algoritmalardan biridir). Googlea yazdn, tak buldu! Bak, hzl algoritma! KnuthMorrisPratt. Ltfen algoritma analizi kitaplarndan greedy algoritmalar, branch and bound, precomputing konularna aln!

OKUMA PARASI: Meslek SevgisiFen fil-meslek olmalsnz. Msrda kaz almalarnn bana geenler var ya! Kendisini mesleine ylesine vermi ki Adam 2009dan besleniyor, ama 5500 sene ncesinde yayor. u firavunun kars oraya o sebepten gmlm olamaz, undandr diyebiliyor. Sanki o zamanda yayor gibi Bu kadar ok sevmelisiniz mesleinizi br adam Orda kara delik var. diyor ve ispatlamak iin yllarca orann fotoraflarn ekiyor. Fotorafn birinde yldzn biri azck hareket ediyor -onun bir piksel oynamas bile ok hzl hareket etmesi demektir-, ok seviniyor. Adam galaksinin merkezinde yayor. Onu teleskopun bana 50 yl koysan, koluna da serum versen; oradan hi kalkmasa hi bir ey demez. Genler buradan stanbula maa gidiyorlar. 8 saat yol, yorgunluk stne 150 TL verip maa giriyorlar. stelik kafasna her ey gelme ihtimali var; ta, denek Dayak da yeyip geliyorlar, bu oluyor. Ama birisi kalkp Filanca hoca gelmi, stanbulda konferans verecek. diye 8 saatlik yola, stanbula gitse; Vay aptal! denir deil mi? Bunu yapan yok. Peki, olmas gereken o mu, yoksa bu mu? Mesleinizi ok sevmelisiniz. Siz mesleinizi severseniz herkes sizi dinler, elinin ucuyla anlatrsan kimse dinlemez. Kodlarda da, kodun iinde yayormu gibi ne olduunu anlamalsn. Mustafa Ege Bir mr mutlu olacaksanz, iinizi sevin. in AtaszHacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 11 85

GENELLETRLMLSTELER(GENERALIZEDLISTS)Dorusal liste (linear list); n eleman (n0) olan sonlu bir listedir. A={ 0, 1, , n-1} ile sembolize edilsin. A listesinde i ; i+1 elemanndan nce gelir ( 0 i < n-1 ). Tek balal liste, dizi vb. Bu tr bir listede elerin her biri atomiktir. Tanm: A={ 0, 1, , n-1} biiminde verilen bir listede A, listenin addr. Liste uzunluu ndir. i (0in-1) atomik ya da bir alt liste olabiliyorsa bu tr listeye genelletirilmi liste denir. 0 liste ba (head of A), (1, 2, , n-1) liste kuyruu (tail of A) olarak isimlendirilir. rnekler: D = () A = (a,(b,c)) B = (A,A,()) C = (a,C) bo (empty) liste; uzunluu 0 (sfr) uzunluu 2, ilk eleman atomik, 2. eleman b ve c elemanlarn ieren bir alt liste paylaml alt liste ieren bir liste (list with shared sublist); 3 elemanl, ilk 2 eleman A listesi, 3. eleman bo liste zyineli liste; 2 elemanl

Elimizde yle bir polinom olsun;P(x,y,z) = x10y3z2 + 2x8y3z2 + 3x8y2z2 + x4y4z + 6x3y4z + 2yz

Polinomu gerekletirmek iin ardk yerleim (sequential represent) bir zm olarak dnlebilir:uclu VAR deg y us 0 bag uclu PTR uclu VAR L_bag us 1 us 0 bag NULL bag

3x2y polinomunun gerekletirimiuclu NO kat 3 us 2 bag NULL

katsay x_s y_s z_s ba

deg x

1: typedef enum { VAR, PTR, NO } boolean; 2: typedef struct oge *oge_gost; 3: typedef struct oge { 4: boolean uclu; // l 5: union{ 6: char deg; // deikenin ad 7: oge_gost L_bag; 8: int kat; // katsay 9: }; 10: int us; // s bilgisi 11: oge_gost bag; };

Eer uclu="VAR" ise dm, liste badr. degde deiken ad tutulur. use sfr yerletirilebilir. Eer uclu="PTR" ise katsay, L_bag ile iaret edilen listedir. Eer uclu="NO" ise katsay tamsay bir deerdir, kat deikeninde tutulur. Son iki durumda us deikeninde ilgili deikenin s bilgisi vardr.Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 12 85

z

0

2 y

1 0

n4 x x 0 2 n x 0 3 8 n 2 8 n 1 1 0 4

n2 6 0 3

n n

y

0

3

izimi basitletirmek iin uclu alanlarn izmiyoruz.

x 0

1 1

P(x,y,z) = ((x10 + 2x8)y3 + 3x8y2)z2 + ((x4 + 6x3)y4 + 2y)z Polinomlarn genelletirilmi liste ile gerekletirimi iin bu, tek bir rnek, sadece ilk rnek. Baka ekilde de gerekletirebilirsin. Ama bunu yapan dnm yordamlarn da yazabilmelisin. Bilgisayardaki dosya hiyerarisi, web sitelerinde / programlarda kullanlan popup menler de bunun gibidir. (paylaml alt liste ieren liste) Genelletirilmi listeler iin u yapy kullanmak da mmkndr:isaret veri/L_bag bag 1: typedef enum { FALSE, TRUE } boolean; 2: typedef struct oge *oge_gost; 3: typedef struct oge { 4: boolean isaret; 5: union{ 6: char veri; 7: oge_gost L_bag; 8: } 9: oge_gost bag; };

isaret = FALSE ise e atomiktir.

GenelletirilmiListelerinAvantaj Veriyi aa olarak tutmak da mmkndr, ama textle karlatrlmaz. Ben bitmap saklarm. Aacn bellek grntsn saklarm. Olur, saklayabilirsin. Ama bu ekilde tutarsak daha az yer kaplyor, bir nevi sktrma yapyoruz. Onun buna karlk gelmesi mmkn deil. Genelletirilmi listelerin avantaj bu! Az yer kaplama avantaj. Bu kadar kk bir verinin saklanmasnda bile bilgisayar mhendisi dikkatli olmaldr.A F a T F B C T Fa

nb F Tc

n n

T T

n

n

A = (a,(b,c)) B = (A,A,()) C = (a,C)

Bir verinin baka bir uzaya tanmas Z-transformation ok iyi bildiin, hkim olduun bir uzaya tayorsun. Biz de veriyi aldk, ok iyi bildiimiz algoritma uzayna tadk. SORU: Paylaml alt liste iermeyen zyinelemesiz bir listeyi kopyalayan yordam yaznz.1: oge_gost kopyala( oge_gost L ){ B=(a,((),b,c,(d,e,(f)),k),e) 2: oge_gost q = NULL; 3: if( L ){ // L null deil mi 4: q = ogeal(); // bir e al 5: q->isaret = L->isaret; // iaret bilgisini gnle 6: if(!L->isaret) //e atomik mi? 7: q->veri=L->veri; 8: else q->L_bag=kopyala(L->L_bag); // paylaml alt listeyi kopyala 9: q->bag = kopyala(L->bag); // bag alann gnle 10: } 11: return q; 12: }Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 13 85

Yandaki liste ile yordam test ediniz. Alrken batan sona, gnlerken sondan baa Hocam ben zyineli yazmycam. diyen var m hala? Ben onu kuyrua koyarm. diyen arkada varsa artk bir ey diyemeyeceim

L

Tk s

T at

null Fv e d

F

F

b

n

r

Tu w

n n

L = ((a,b),((c,d),e))

F

c

x

F

zyineli bir listede bu kod, sonu gelmeyen zyineli arlar sebebiyle aklrd. Paylaml listeden iki kez geerdi. rnein; B=(A,A,()) listesini kopyalamaya altmz dnn. O yzden Bu yordam, paylamsz listeyi baaryla kopyalar. diyoruz. Listeyi meydana getiren yordam, quizlik soru! Listeyi kuran yordam nasl yazarm, kopyalayan nasl yazarm diye srekli dnn! Ustalatnzda zyineli olarak yazabilirsiniz. SORU: Paylamsz ve zyinelemesiz iki listenin eit olup olmadn bulan yordam yaznz.1: boolean esitmi( oge_gost T, oge_gost L ){ // T ve L zyinelemesiz listeler 2: boolean x = TRUE; 3: if( !T && !L ) return TRUE; 4: if( T && L && ( T->isaret == L->isaret ) ) { 5: if( !T->isaret ){ // e atomik midir? 6: if( T->veri == L->veri ) x = TRUE; else x = FALSE; 7: } else // e atomik deil, alt listeler eitmi 8: x = esitmi( T->L_bag, L->L_bag ); 9: // verilen alt listeler eitse dier eler eitmi 10: if( x==TRUE ) return esitmi( T->bag, L->bag ); 11: } return FALSE; }

Bu kod, ustaca yazlm bir kod deil. Daha nitelikli kod yazabilirsiniz. Bir de sonsuz arlar sebebiyle zyineli listeler karlatrlamaz. Bakn, programn diren noktasn tespit ediyorum. Tua bastn, alt; yetmez! O, 100 admdan bir tanesi Tabii doru alacak, yanl alacak hali yok! Matematikte yaptnz ispatlar gibi; 2 irrasyonel saydr, ispatlaynz. Hocam ne gerek var ispatlamaya? Biz zaten biliyoruz onun irrasyonel olduunu demek gibidir. Hlbuki ispat yaparken daha geni bir bilgi sahasna hkim olduunu gsterirsin. yle olmasayd bilgisayar bilimleri algoritmadan ibaret olurdu. Aadaki algoritma bunu bulur, yukardaki unu bulur Hibir ispat yok, diren noktas yokA B E F K

null nullL C G D H I M J

null

A(B(E(K,L),F),C(G),D(H(M),I,J))

SORU: zyinelemesiz ve paylaml iki listenin eit olup olmadn bulan yordam yaznz. SORU: zyinelemesiz ve paylamsz bir genelletirilmi listeyi dolap, atomik dmlerdeki deerleri yazan void dolas_yaz(oge_gost L) yordamn yazn.1: void dolas_yaz( oge_gost L ){ 2: if(L) 3: if(!L->isaret) 4: printf("%c", L->veri); // e atomikse yaz 5: else 6: dolas(L->L_bag); 7: dolas( L->bag ); 8: }

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

14

85

SORU: zyinelemesiz bir listenin derinliini bulan yordam zyineli olarak yaznz.1: int derinlik( oge_gost L ){ 2: oge_gost p = L; 3: int m=0; // max 4: if(!L) return 0; // zyineli 5: else{ 6: while(p){ 7: if(p->isaret){ 8: int n = derinlik( p->L_bag ); 9: if( mbag; 11: } 12: return m+1; }}

SORU: zyinelemesiz bir listenin derinliini bulan yordam dngsel olarak yaznz. renci zm:1: int derinlik( agac_gost L ){ 2: agac_gost yigit_al(); 3: void yigit_ekle(agac_gost); 4: int max = 0; 5: for( int current = 1, p = L 6: if( p->isaret ){ // alt 7: yigit_ekle(p); 8: p = p -> L_bag; 9: current++; 10: } 11: if( !p->bag ){ // liste 12: p = yigit_al(); 13: if( max < current ) 14: current--; 15: } 16: } 17: return max; 18: }

; p ; p->bag ){ listeye gir, derinlik artar

sonu, ste k max = current;

zyineli Dnme: Bu dersi alyorsan, bu kodu current, max deikenleri tutarak dngsel olarak yazmayacaksn. Onu 1. snf rencisi yazar. Sen 2. snf rencisisin. zyineli algoritmalarda mant kavrayabilirseniz bu kadar ksa kodla problemi zmek mmkn. teratif de zn, neririm. Ama global deiken kullanmak yasak! inde yt kullan, kuyruk kullan, local deiken kullan, ne istersen kullan. Ama global deiken yok! Sana bir component verirler. unu yap. derler. O bir network securityde bir paradr ya da iletim sisteminin bir parasdr. Onu sen bilmezsin. Bana kalsayd zyineli dnme altyapsn vermek iin bu derse 3 deil 15 kredi nerirdim. Bu altyapy vermek iin Bizim eski bir rencimiz Siemenste ie girmi. Anlatyor; Bir soru vard hocam,

ODT matematik mezunu birine sordum. Kalemini bir u yana oynatt, bir bu yana oynatt. Sonra; Bu rekrsif! dedi. diyor. Biz niye bunu yapamyoruz, hemen gremiyoruz? demek istiyor.Yemek yerken, yrrken, televizyon izlerken zaten siz televizyon izlemiyorsunuzdur da- srekli dnmelisin. Onu ne yaparsam ne dndrrm? Probleme ancak bu ekilde tm hislerinle ynelebilirsin. Ltfen debug yaparak da nereye ne dnyor, grn, zyineli algoritma yazma becerinizi gelitirin. Benim burada anlattm siz kod yazarken grebilmelisiniz. Doru alan kod: Bir de sadece verilen rnek zerinde doru alan kod yazyorsunuz. Nasl beceriyorsunuz, bilmiyorum. Yani; verilen rnek zerinde doru alan, baka rneklerde aklan kod yazma becerisine sahipsiniz. Vallahi bravo! Hlbuki farkl rnekler zerinde, u rnekler zerinde kodunuz doru almaldr. Orijinal Kitap Almak: Her dersten 23 kitabnz olmal. Para verip alrsanz okursunuz. Fotokopi ektirirseniz okumazsnz. Ders notlarn ders bitince atarsnz. Fakat 8090$ verip aldnz kitab atmazsnz. Bu alkanl bu yalarda renin. Son derece nemlidir. e girdiinizde hocann anlatmad ya da anlatt halde sizin anlamadnz bir konuyu oradan alrsnz. Google soru gruplarn karmayn, oralardan soru zn. Muhtemelen i teklifi iin bir deerlendirme yapyorlar.Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 15 85

SORU: Paylamsz zyinelemesiz listenin devriini alan yordam yaznz. r: L=(a,(b,c)) -> L=((c,b),a) Bu problemle gerek yaamda ok karlayoruz. r: Image Processingde saa bakan resmi sola evirmek. Textten evirsek? Hayr, onu istemiyoruz. Grld gibi Veri Yaplar 1 dersinde yazdmz matris devrii alan yordama sadece bir ekleme yaptk. O yordam iyi ki biliyoruz! Yoksa Ya, bunun devriini nasl alrm ki? diye dnecektik. Liste ba deiebilecei iin adresle gnderdik. 7. satrdaki L_bag alannn zyineli arlardan dnmeden nce 13. satrda *L = q; ifadesiyle gnlendiine dikkat edin.1: void devrik_al( oge_gost *L ){ 2: oge_gost r, 3: p=*L, 4: q=NULL; 5: while(p){ 6: if( p->isaret )//atomik deilse 7: devrik_al(&p->L_bag); 8: r=q; 9: q=p; 10: p=p->bag; 11: q->bag=r; 12: } 13: *L = q; 14: }

Bir kii recursive mant bilmiyorsa ne yapard? Matriste mi tutard, i ie ytta m tutard Kolay kolay da bir yerde tutamazd. devrik_al yordamn iyi ki biliyoruz. Byle zmezsek brute brute force olurdu. Sonuta o da devrik alyor, ama amlar devirip devirip gidiyor. e baladnzda amirinizle aranzda yle bir diyalog gemesi muhtemeldir: Veri yaplar dersini aldn m? Siz de; Evet, aldm. diyeceksiniz. Bunun zerine;Ben de aldm. u list, tree falan deil mi? diye soracak. Evet; list, tree falan diyeceksiniz. Ayn unun gibi; Beyin cerrahisi? Ha, u damar deil mi? Ha ite o, tamam ya! Sanki o kadar basitti. Veri yaplar, bilgisayar bilimlerinin bel kemiidir. Listi treeyi bilmek, veri yapsn renmi olmak deil. Bunu yapan yordam yazabilmelisiniz.1: void serbest_birak( list_gost *list ){ 2: oge_gost p = *list; 3: if( *list ){ 4: p = *list->bag; 5: free(*list); 6: serbest_birak(&p); 7: }} 1: void serbest_birak( list_gost *list ){ 2: oge_gost p = *list; 3: if( p ){ 4: *list = p->bag; 5: free(p); 6: serbest_birak(list); 7: }}

Bu ne kodu? Ne abuk unuttunuz ya! Final sorusu. Tek balal bir listenin elerini teker teker serbest brakan yordam deil mi? Soldaki kodu incelemeniz isteniyordu. Call by reference ile aktarldna gre ana yordamdaki list ierii deimeliydi. Bunu aran yordama list, NULL dnmyor. Ana yordamdaki adam hala nnde bir liste gryor. Kodu yazdn, ok eminsin. Ama o kadar emin olma! Soldaki gibi deil, sadaki gibi yazlmaldr.

OKUMA PARASI: Teorik Arka Plan ve MatematikMaalesef teorik derslere zaman ayrlmyor. Hlbuki baz yabanc niversitelerdeki bilgisayar mhendislii benzeri blmlerde tam 2 yl boyunca klavyeye dokundurmuyorlar bile renciye teorik arkaplan kazandryorlar, onu yetitiriyorlar. Programlama zerine ise daha sonra eiliyorlar. Bizde ise renci 1. snfa balar balamaz programlama devleri veriliyor. Bizim programlamaya arlk vermemizin avantaj hzl kod yazabilme ve hzl i bulabilme olarak ortaya kyor. Ama dezavantaj da var; teoriklere nem verilmiyor, oras zayf kalyor. Yneylem, Saysal Analiz gibi derslerin kalkm olmas da sizin, matematiksel olarak zayf kalmanza sebep oluyor. Oysa ok iyi matematiksel arka plan gerekiyor. Discrete, istatistik, stokastik sreler Doktora yapp hoca olduktan sonra bile satr satr Discrete Mathematics dersine alyorlar. Richard Jhonsonbaugh Discrete Mathematics: Aln okuyun. Okumazsanz derslerden geersiniz, ama bu ii renemezsiniz. Programlama metotlarn okuyun, nerelerde kullanldn renin. rnein Vezir yerletirme problemi backtracking yntemiyle zlyor. gibi Yaz deerlendirin, aln. Blm kstldr, her eyi veremez! renci daha 2. snftayken bunu kendisi fark edip matematik blmnden, istatistik blmnden, hatta ODTden Bilkentten ders almal Eskiden yle asistanlar vard; saatine bakyor, Bilkentte dersim var, 10 dakika var. deyip, ormandan koa koa derse gidiyordu. Mustafa EgeHacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 16 85

AAYAPISININGENELLETRLMLSTEYAPISIYLAKURULMASI Aac yorum farkyla genelletirilmi liste yapsyla kuracaz. yle bir notasyon kullanabiliriz; C(G) C, Gnin atasdr.A(B...,C...,D...) A; B, C, Dnin atasdr.A-B-E | | | F | C-G | D-H-M | I | J

Esneklii grn, notasyonu size kalm. Deiik bir notasyonla da lineer formu elde edebilirdiniz. Bundan ona, ondan buna geebiliyorsan tamamdr; senin ierdeki yapn kimse bilemez. Oturup o yapnn ne kadar gl olduunu birisiyle tartmadysan, senin 3 gn, 1 hafta harcadn o yapn kimse bilemez.

Ben virglden hi haz etmiyorum, nokta kullansam? Olur. Benim bu deil de hani o kal parantez var ya, o houma gidiyor. Olur.E K L

A B F C G M H D I J

1 2

3 4

A(B(E(K,L),F),C(G),D(H(M),I,J))

Bu kadar veriyi tutmak iin sadece 1 satrlk text yeterlidir. Kullancnn insert & delete hakk varsa, oynuyorsa bunu saklamalym. Bu tr projeler aldnzda avantajn belki greceksiniz. 342de (Yazlm Mhendislii Lab.) sorduk, anlayan anlad. Ama dev olsun diye yazan, brute brute force ile yazd. 8 Puzzle probleminde koca grnt 1 byteta tutulabiliyor. Buna karlk gelen bir ifreleme yapyoruz. Sonra deifre ediyoruz. nk bilgisayar bilimlerinde depolama sorunu nemlidir. AacnGenelletirilmiBirListeileGerekletirilmesininDezavantaj ekildeki aacn da lineer formlar aynA A A dr. Sa-sol ayrm yoktur. Ama sol - sa ilikisiB B B nin verilememesine zm olarak dmlerin C C yannda L-R diye ek bir bilgi tutulabilir, bu sorun bu ekilde alabilir. D G D G DE I E I E

C G I

dev1: Verilen listenin bellek grnmn ve aa yapsn iziniz: A(B(E(H,I(J,K)),F),C(G),D) dev2: ekildeki gibi aa yaplar verildiinde liste yazmn kt veren yordam yaznz.

KILAVUZLUKLAA(THREADEDBINARYTREE)A year spent in artificial intelligence is enough to make one believe in God. [Alan Jay Perlis] n elemanl bir ikili aata bulunan gstergelerin ou NULL durumunda bulunur. SPATI: nk her dmn sa ve sol ocuk olmak zere 2 gsterge alan vardr, yani aata toplam 2n gsterge bulunur. Kk dndaki her dmn babasndan kendisine bir gsterge vardr, yani n1 tane gsterge doludur. Bu durumda geri kalan n+1 adet gsterge botur (NULL deerini iermektedir). [wiki]Sussex)

n = 4 NULL = 5

n = 4 NULL = 5

n = 11 NULL = 12

Alan Jay Perlis [w](19221990, Carnegie Mellon Universirty & Yale University) ve Chris Thornton (University of bo gstergelerin aataki dier dmler iin kullanlabileceini gstermilerdir. Bu gstergelere klavuzlu gsterge adn vermilerdir. simle ararsanz makalesine ulamanz mmkndr.

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

17 85

KlavuzlukiliAaKurmaKurallar p gstergesi ikili aata bir eyi gstersin. 1) Eer p->solcocuk == NULL ise p->solcocuk gstergesi, kk-ortada dolamda pden nce ziyaret edilmesi gereken eyi gsterecek biimde kurulur. Dier bir deyile, NULL deerini pnin kk-ortada nceli ile (inorder predecessor) deitirmi oluruz. 2) Eer p->sagcocuk == NULL ise p->sagcocuk gstergesi, kk-ortada dolamda pden sonra ziyaret edilmesi gereken eyi gsterecek biimde kurulur. Dier bir deyile, NULL deerini pnin kk-ortada ardl ile (inorder successor) deitirmi oluruz.A B D H I E F C G

Klavuzlar, normal gstergelerden ayrt edebilmek iin krmz renkli noktal ok kullandk. Siz hep siyah pointer kullanmtnz. Derleyicide krmz pointer var m? Onlarn krmz olduunu nerden anlayacaz? Fazladan iki bilgi tutmak gerekir. Eer p->solKilavuz bilgisi TRUE ise p->solcocuk gstergesi bir klavuzdur, yoksa p->solcocuk sol ocuu gsterir. Benzer ekilde p->sagKilavuz bilgisi TRUE ise p>sagcocuk gstergesi bir klavuzdur. Peki, fazladan bilgi tuttuk, bellek karmakl artmaz m? Artsn, zaman karmakl bellek karmaklndan daha nemlidir. Kald ki, bunu 1erden 2 bitle bile halledebilirim, ok cz bir bellek kullanm olur. Ama biz kolay olsun diye short int tanmlayacaz.

1: typedef struct kilavuz_agac *kilavuz_gost; 2: typedef struct kilavuz_agac { 3: short int solKilavuz; // TRUE ise solCocuk bir klavuzdur 4: kilavuz_gost solCocuk; 5: char veri; 6: kilavuz_gost sagCocuk; 7: short int sagKilavuz; // TRUE ise sagCocuk bir klavuzdur 8: }

Buraya dek sylenenlere gre ekildeki aa olutu, ama iki klavuz F A F havada asl kald. imdi, bir balk F B F F C F esi sayesinde asl kalan gstergeT E T T F T T G T F D F lerden de kurtulacaz. Eer L, klavuzlu ikili aata balk dmn T H T T I T gsteriyorsa ve L->solcocuk ile gerek ikili aacn ilk esine (Aya) eriilecekse bo SolKilavuz SolCocuk veri SagCocuk SagKilavuz klavuzlu aac yandaki tablodaki gibi tanmlayabiliriz. TRUE - FALSE Aa boken sa ve sol gstergeler baln kendisini gsterir. Sa klavuz FALSEtur. Sol klavuz TRUEdur, e eklenince FALSE yaplacaktr. Dikkat! kili aac inorder dolama gre oluturuyoruz. Preorder dolama gre zaten kuramazsn. in-order : HDIBEAFCG pre-order : ABDHIECFG post-order : HIDEBFGCAF F T H T D F T I T B F T E T T F T F F A F F F C F T G T

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

18 85

KlavuzlukiliAataKkOrtadaDolam p, ikili aata bir eyi gstersin. Aac kk-ortada dolaabilmek iin her bir enin kk-ortada ardln bilmek gerekir. Ardl, u ekilde bulunur:

ii) Eer p->sagKilavuz ii) Eer

== TRUE

ise p->sagCocuk (klavuz olduu iin) zaten pnin ardldr.

p->sagKilavuz == FALSE ise p->sagCocuktan balanp solCocuk balar ilenerek solKilavuz bilgisi TRUE oluncaya kadar ilerlenir. Yani solu olmayan bir dme varana dek sa o-

cuun sol bandan itibaren sola gidilir.

SORU: Kk-ortada dolama gre L ile iaret edilen enin ardln bulan kilavuz_gost kokortada_ardil_bul( kilavuz_gost L ) yordamn yaznz.1: kilavuz_gost kokortada_ardil_bul( kilavuz_gost L ){ 2: // L ile iaret edilen (NULL olmayan) enin ardln bulur 3: kilavuz_gost p = L->sagCocuk;; // Ardln iaret edecek olan gsterge 4: if( !L->sagKilavuz ) // Sa Klavuz FALSE mu 5: while( !p->solKilavuz ) // Sol Klavuz TRUE oluncaya dek 6: p = p->solCocuk; // Sol ocuk sandan ilerle 7: return p; 8: }

Kodu test edelim: -HDIBEAFCG-

1: void kilavuz_kokortada_dolas( kilavuz_gost L ){ 2: kilavuz_gost kokortada_ardil_bul( kilavuz_gost L ); // prototip 3: kilavuz_gost p = L; 4: for(;;){ 5: p = kokortada_ardil_bul(p); 6: if( p == L ) break; // aa dolalp bala dnld m 7: printf("%c ", p->veri); 8: } 9: }

Bu iki zt diyor ki; Kk-ortada dolama gre kurduum bu aac dngsel olarak hem postorder hem de preorder dolaabilirim. Preorder siz yazabilirsiniz, postorder yazmak nceki sorduumdan zordur. Bir problemin zmne ynelik makaleleri okudun, O(n2)de zlebilmi. Oturdun, altn ve O(n1.89)a dren bir algoritma yazdn. Byk i yaptn! Literatre senin algoritman geer.

PUCU: Kod paralarnn bandaki satr numaralarn hzlca silmek iin MinGWde ya da Microsoft Officede ALT tuuna basl tutarak silmek istediiniz alan seebilir ve DEL tuuyla silebilirsiniz. Bylece farkl satrlarda olmasna baklmaksnz sadece setiiniz alan silinecek, satr dzeni bozulmayacaktr.

Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar

19 85

KlavuzlukiliAacaDmEkleme Ekleme yordam tek bana kolayca ekleme yapabilecek bir yordam deildir, biraz girifttir. Saa ve sola ekleme biimi farkl olduundan dolay iki ayr yordam yazlmaldr. imdi saa ekleme yordamn nasl yazabileceimizi dnelim. 1- Baba ile iaret edilen enin sa alt aac olmasn. ocuk ile iaret edilen eyi baba ile iaret edilen enin sa ocuu olarak klavuzlu ikili aaca nasl ekleriz?kk5

A B C D1: 2: 3: 4: 5: 6: cocuk->sagCocuk cocuk->sagKilavuz cocuk->solCocuk cocuk->solKilavuz baba ->sagCocuk baba ->sagKilavuz = = = = = =baba cocuk

A B C4 1 6

D2 3

1 Ok siyah yapld 2 Ok krmz yapld 3 Ok krmz yapld 4 Gsterge ayarland 5 Gsterge ayarland 6 Gsterge ayarland

OCUU OLMAYAN DME EKLEME

baba->sagCocuk; TRUE; // babann alt aac yoktu, ocuun da olamaz baba; TRUE; cocuk; FALSE; // TRUE idi

6 aktarma komutuyla klavuzlu bir biimde ekleme yapabiliriz. 1. aktarma komutunda babann sa ocuu ile iaret edilenin header olup olmadn bilmiyoruz, bizi zaten ilgilendirmiyor. 2- Baba ile iaret edilen enin sa alt aac var ise ocuk ile iaret edilen eyi babann sa tarafna yerletirmek, biraz daha dikkatli gsterge deiimini gerektirir. kili arama aalarnda en az bir ocuu olmayan dmlere ekleme yaplabilirdi. ocuk olmayan noktaya eklediimizden dolay bir atama ile bunu baarabiliyorduk. Peki, burada yaplmas istenen ey nedir? D, Bnin ocuu iken Xi Bnin ocuu haline getir; ama D alt aac da kaybolmasn, klavuzlu aa yaps bozulmasn, krmz gstergeler yine doru yerleri gstersin. yleyse Xin nceli B oldu. Dnin eski nceli olan E, Xin imdiki ardl oldu. Bu durumda ocuk ile iaret edilen e babann eski ardlnn nceli yaplmaldr. Bunu kefettikten sonra yordam rahatlkla yazabiliriz.A B C E D Fkk baba cocuk

A B 1 64

X

C

X 3 2 5 D E F

1 Ok siyah yapld 2 Ok krmz yapld 3 Ok siyah yapld 4 Gsterge ayarland 5 Gsterge ayarland 6 Gsterge ayarland

OCUU OLAN DME EKLEME

1: 2: 3: 4: 5: 6:

cocuk->sagCocuk cocuk->sagKilavuz cocuk->solCocuk cocuk->solKilavuz baba ->sagCocuk baba ->sagKilavuz

= = = = = =

baba->sagCocuk; FALSE; // babann alt aac imdi ocuun alt aac baba; TRUE; cocuk; FALSE; // zaten FALSE idi, bu atamaya gerek yok

SONU: Saa ekleme yaparken sa ocuun olup olmamasna gre iki durum olutu. 2. durum iin babann eski ardlnn ncel bilgisini gnlemek ve 2 numaral aktarmay da uygun ekilde yazmak suretiyle her iki durumun da stesinden gelebilecek tek bir yordam yazmak mmkndr.Hacettepe niversitesi Bilgisayar Mhendislii Blm Veri Yaplar ve Algoritmalar 2 - Mustafa EGE Ders Notlar 20 85

1: void saga_ekle( kilavuz_gost baba, kilavuz_gost cocuk ){ 2: // ocukla iaret edilen eyi babann sa oc. olacak biimde kl. 2li aaca ekler 3: kilavuz_gost p; 4: cocuk->sagCocuk = baba->SagCocuk; 5: cocuk->sagKilavuz = baba->SagKilavuz; 6: cocuk->solCocuk = baba; 7: cocuk->solKilavuz = TRUE; 8: baba ->sagCocuk = cocuk; 9: baba ->sagKilavuz = FALSE; 10: if( !cocuk->sagKilavuz ){ // babayla iaret edilen enin alt aac var m 11: p = kokortada_ardil_bul(cocuk); 12: p->solCocuk = cocuk; 13: }}

[1:] Bakn, yordammz aka tanmlanmtr. Ad belli, giden parametreler belli, dn deeri belli. [2:] Aklama satrlarn unutmuyorsunuz, yeterince ak ve net olmal. Kodun giri ksmnda baba ve/veya ocuk NULL m diye test edilmiyor. Bunu durumu da aklamada belirtebilirsiniz. NULL m kontrol: saga_ekle yordam, mstakil olarak kullanlmayp, baka bir yordam iinde kullanlaca iin NULL m kontroln burada yapmaya gerek yoktur. rnein, ikili arama aacna ekleme yaparken saa m, yoksa sola m ekleneceini bulunca, tam o noktada ekleme yapan aktarmann yerine saga_ekle ya da sola_ekle yordamn aracaz. Bu kontrol, saga_ekle yordamn kullanan yordamda yapmak gerekir. Ama saga_ekle yordamn mstakil olarak birisi kullanacaksa o zaman bunu da kontrol etmeliyiz. [5:] ocuun sa ocuk bilgisi babann sa ocuk bilgisinden alnd. Bylece NULL da gelse deer korundu. [6:] ocuun sa klavuz bilgisi babann sa klavuz bilgisinden alnd. Bylece 1. durum iin krmzlk (TRUE), 2. durum iin siyahlk (FALSE) korunmu oldu. [7:] ocuun kk-ortada ncl baba olaca iin sol ocuk gstergesi babaya ayarland ve [8:] sol klavuz bilgisi de TRUE (krmz) yapld. [10:] Babann sa klavuz bilgisine FALSE atamak 2. durum iin gereksizdi, zaten FALSE idi. Ama ilk durum iin gerekiyordu. Bu atamay her iki durumda da yapmak, kodu yanl alr hale getirmez. Fakat bu satrdan sonra kodun doru altna hemen karar vermeyin. Daha iletilecek bir if blou var. [11:] ocuun sagKilavuz bilgisi (ki 5. satrdaki atamayla babann sagKilavuz bilgisinden alnmt) FALSE ise if blouna giriliyor. Yani babann sa ocuu varsa (2. durum) yaplmas gereken ilem yaplacak. Babann sol ocuu yoksa (1. durum) sadece fazladan bu test yaplr ve yordamdan dnlr. Aklama satr: Satrn aklamasnda yaplmak isteneni yazdk. Buraya babann sa ocuu FALSE mu diye yazmayn sakn! Senden sonra gelen adam; Ulan, ben onu zaten biliyorum. demesin.cocuk->sagKilavuz

farkl eyler de sylesin.

Yapmak istedii doru, ama kodu yanl yazm. diyebilsin. Aklama satrlar, kodda sylenenden

belli, nlemi de biliyordur her halde yle aklama yazmalsn ki, gerektiinde

Tek yordama indirmek: Dersimizin bandan beri sylemeye alyorum; fonksiyon, aka tanmlanm olmaldr. ncelikle 35 farkl durum olduunu analiz ettikten sonra yordam isimleri, dn deerleri, parametreleri vs. belirlenecek. Her duruma ayr ayr yordam yazsak, iin tad kaacak; cocukYok_sagaEkle, cocukVar_sagaEkle, cocukYok_solaEkle, cocukVar_solaEkle. Karmakl artrmadan bunlar tek yordama indirebilirsek, iyi! Burada yaptmz gibi yaplacak ileri ortak ekilde tanmlayarak birletirmeliyiz. Yoksa ie if if deriz, tm durumlar tek yordamda yazabiliriz. Ondan kann. yle olacana ayr ayr yordamlar olsun. Yazlm Mhendislii Kavramlar: Bakn, kod blk prk deil; cocukVar_sagaEkle, cocukYok_sagaEkle diye dalmadk; sade ve okunabilir, bakm kolay. Bunlar yazlm mhendislii

kavramlardr. Yazlm mhendisl