Kayıtlar

CP #44: Queue Problemleri

Resim
 Kisa bir queue hatirlatmasinin ardindan problemlere gececegiz. Queue Neydi? Queue iki basit operasyon icin vardir: enqueue (yani kuyruga ekleme) ve dequeue (kuyruktan cikarma). Bu operasyonlar ilk giren ilk cikar prensibi uzerinden sonuc verir. Queue'nun en sonundaki elemana genelde tail ve basindaki elemana da head adi verilir.  Linked list ile implemente edilebilir. Bu durumda enqueue ve dequeue islemleri O(1) maliyet ile yapilabilir. Array ile de implemente edilebilir ancak maliyetler daha yuksek olacaktir (buna gelecegiz). Ayrica queue yapisindan, head ve tail elemanlari koparmadan da gozatmak icin metodlar bulunur.  Ayrica python standart kutuphanesinde bulunan bir doubly-linked-list yapisi olan  dequeue ile de queue davranisi elde edilebilir. En basa ekleme cikarma ve de en sona ekleme cikarma islemleri O(1) ile yapilabilir. Siralamanin korunmasi gereken problemlerde queue yapisi one cikmaktadir. Python Dequeue Class : q.append(e) ile queue'nun en sonuna eleman ekleyebil

CP #43: Stack Problemleri

Cok kisa bir stack hatirlatmasi yapalim sonra problemlere gecegiz. Stack neydi? Bir stack uzerinde yapilacak iki temel operasyon vardir: push ve pop. Yani eleman ekleme ve eleman cikarma. Bu islemler de, last-in first-out siralamasi ile olur, yani son giren ilk cikar.  Eger stack linked list ile implemente edilmisse, push ve pop islemleri her zaman O(1) maliyete sahiptir. Eger array ile implemente edilmisse, belirli bir eleman sayisina kadar O(1) maliyete sahip olur. Ancak bir yerden sonra array resize edilmek zorunda kalir ve pup, pop islemleri bu sefer amortized O(1) maliyete sahip hale gelir.  Ayrica stack'ten koparmadan (pop etmeden) en ustteki elemani gormek icin genellikle bir  peek metodu bulunur.  Son-giren-ilk-cikar seklindeki davranis, reverse-iteration durumlarinda, yani bir listi geriye dogru itere etme problemlerinde cok kullanisli olur. Su ornekte bir singly-linked listi stack kullanarak tersinden yazdirma goruluyor:      def print_linked_list_reversed(head):     dat

CP #42: String Problemleri 4

Write A String Sinusoidally Verilen bir stringi su sekilde sinuzoidal olarak yazdiriyoruz: string: "Hello World!"                 e               _                    l H      l       o          W     r          d               l                     o                   ! Daha sonra ustten baslayarak sola dogru okudugumuzda sonuc "e_lHloWrdlo!" seklinde olmaktadir. (Alt cizgi boslugu temsil ediyor). Bu gosterime snake-string adini verelim. Verilen bir stringi bu sekilde snake-string haline getiren bir program yaziniz. Cozum Benim aklima ilk gelen, uc farkli array tutarak her bir harfi olmasi gerektigi arrayin icine atip, sonda da bunlari birlestirmek. Arraylara da kolay ulasabilmek icin bir dictionary icerisinde level indexi ile ulasilacak sekilde koyabiliriz. Yani H sifir seviyesi, bir yukarisi +1, en asagisi ise -1 olacak.  Bu durumda seviye sifirdan basliyor, yukari gidiyor. +1 oldugu zaman seviye dusmeye basliyor: sirasi ile 0 ve son olarak -1. -1'den itibare