{"id":33892,"date":"2025-11-08T14:01:18","date_gmt":"2025-11-08T11:01:18","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/"},"modified":"2025-11-08T14:01:18","modified_gmt":"2025-11-08T11:01:18","slug":"python-ile-veri-yapilari-ve-algoritmalar-cheatsheet","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/","title":{"rendered":"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet"},"content":{"rendered":"<p>Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken ve projelerinizde en iyi performans\u0131 ararken size yol g\u00f6sterecek.<\/p>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, \u00f6zellikle de Python gibi y\u00fcksek seviyeli ve \u00e7ok y\u00f6nl\u00fc bir dille \u00e7al\u0131\u015f\u0131yorsan\u0131z, veri yap\u0131lar\u0131 ve algoritmalar (DSA) konusundaki yetkinli\u011finiz, sadece teorik bilginin \u00f6tesinde bir rekabet avantaj\u0131 sa\u011flar. Peki, neden bu kadar \u00f6nemli? Diyelim ki bir e-ticaret platformunda \u00e7al\u0131\u015f\u0131yorsunuz ve milyonlarca \u00fcr\u00fcn verisiyle u\u011fra\u015f\u0131yorsunuz. M\u00fc\u015fterilerin arama sorgular\u0131na saniyeler i\u00e7inde yan\u0131t vermek, stok seviyelerini anl\u0131k olarak g\u00fcncellemek ve \u00f6neri sistemlerini verimli bir \u015fekilde \u00e7al\u0131\u015ft\u0131rmak zorundas\u0131n\u0131z. \u0130\u015fte bu noktada, do\u011fru veri yap\u0131s\u0131n\u0131 se\u00e7mek ve en uygun algoritmay\u0131 uygulamak, uygulaman\u0131z\u0131n performans\u0131n\u0131, \u00f6l\u00e7eklenebilirli\u011fini ve kullan\u0131c\u0131 deneyimini do\u011frudan etkiler.<\/p>\n<p>Yanl\u0131\u015f bir veri yap\u0131s\u0131 se\u00e7imi, basit bir arama i\u015fleminin bile uygulaman\u0131z\u0131 yava\u015flatmas\u0131na veya a\u015f\u0131r\u0131 bellek t\u00fcketmesine neden olabilir. \u00d6rne\u011fin, s\u0131kl\u0131kla eleman ekleyip \u00e7\u0131kard\u0131\u011f\u0131n\u0131z ve ortadan eri\u015fim yapt\u0131\u011f\u0131n\u0131z bir senaryoda ba\u011fl\u0131 liste yerine dinamik bir dizi (Python listesi) kullanmak, her operasyonda gereksiz bellek kopyalamalar\u0131na ve performans d\u00fc\u015f\u00fc\u015flerine yol a\u00e7abilir. Bu nedenle, sadece kod yazmay\u0131 bilmek yeterli de\u011fildir; ayn\u0131 zamanda yazd\u0131\u011f\u0131n\u0131z kodun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, ne kadar kaynak t\u00fcketti\u011fini ve farkl\u0131 senaryolarda nas\u0131l performans g\u00f6sterece\u011fini de anlaman\u0131z gerekir. Bu anlay\u0131\u015f, sizi basit bir kod yaz\u0131c\u0131s\u0131ndan, problemleri verimli bir \u015fekilde \u00e7\u00f6zen ve \u00f6l\u00e7eklenebilir sistemler tasarlayan bir m\u00fchendise d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Python&#8217;\u0131n esnekli\u011fi ve zengin k\u00fct\u00fcphane ekosistemi, DSA&#8217;y\u0131 \u00f6\u011frenmeyi ve uygulamay\u0131 son derece eri\u015filebilir k\u0131lar, ancak bu ara\u00e7lar\u0131 etkili kullanabilmek i\u00e7in temel prensipleri kavramak \u015fartt\u0131r.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: \u0130yi bir algoritma ve do\u011fru veri yap\u0131s\u0131 se\u00e7imi, sadece performans\u0131 de\u011fil, ayn\u0131 zamanda kodunuzun okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 da kolayla\u015ft\u0131r\u0131r. Karma\u015f\u0131k problemleri basit ve zarif \u00e7\u00f6z\u00fcmlerle ele almak, geli\u015ftirici olarak de\u011ferinizi art\u0131r\u0131r.\n<\/div>\n<h2>Temel Veri Yap\u0131lar\u0131 ve Algoritma Kavramlar\u0131 Nelerdir?<\/h2>\n<p>Veri yap\u0131lar\u0131 ve algoritmalar, bilgisayar bilimlerinin temel ta\u015flar\u0131d\u0131r. Veri yap\u0131lar\u0131, verileri bilgisayar belle\u011finde d\u00fczenlemenin ve saklaman\u0131n belirli yollar\u0131yken, algoritmalar bu veriler \u00fczerinde belirli g\u00f6revleri yerine getirmek i\u00e7in ad\u0131m ad\u0131m talimatlar dizisidir. Bu iki kavram birbiriyle ayr\u0131lmaz bir b\u00fct\u00fcnd\u00fcr; \u00e7\u00fcnk\u00fc bir algoritman\u0131n verimli \u00e7al\u0131\u015fmas\u0131, genellikle \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 verilerin nas\u0131l yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131na ba\u011fl\u0131d\u0131r. Ba\u015flang\u0131\u00e7 seviyesindeki bir geli\u015ftirici i\u00e7in bu konular biraz soyut gelebilir, ancak g\u00fcnl\u00fck hayattaki kar\u015f\u0131l\u0131klar\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm\u00fczde anlamas\u0131 kolayla\u015f\u0131r. \u00d6rne\u011fin, bir k\u00fct\u00fcphanede kitaplar\u0131 nas\u0131l d\u00fczenledi\u011finiz bir veri yap\u0131s\u0131d\u0131r; kitaplar\u0131 bulmak i\u00e7in uygulad\u0131\u011f\u0131n\u0131z y\u00f6ntem (alfabetik s\u0131raya g\u00f6re aramak gibi) ise bir algoritmad\u0131r.<\/p>\n<h3>Veri Yap\u0131lar\u0131 Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>Veri yap\u0131lar\u0131, verileri bilgisayar belle\u011finde depolaman\u0131n, organize etmenin ve bunlara eri\u015fmenin belirli yollar\u0131d\u0131r. Amac\u0131, belirli bir ama\u00e7 i\u00e7in veri depolama ve eri\u015fimi optimize etmektir. Bir veri yap\u0131s\u0131 se\u00e7imi, bir uygulaman\u0131n verimlili\u011fini, h\u0131z\u0131n\u0131 ve bellek kullan\u0131m\u0131n\u0131 do\u011frudan etkiler. Yanl\u0131\u015f bir se\u00e7im, gereksiz hesaplama s\u00fcresine veya bellek israf\u0131na yol a\u00e7abilir. \u00d6rne\u011fin, sabit boyutlu bir koleksiyonda h\u0131zl\u0131 eri\u015fim gerektiren durumlarda diziler (listeler), s\u0131k s\u0131k eleman ekleme ve silme i\u015flemlerinin oldu\u011fu ancak s\u0131ral\u0131 eri\u015fimin az oldu\u011fu durumlarda ba\u011fl\u0131 listeler daha uygun olabilir. Veri yap\u0131lar\u0131 sadece depolama mekanizmalar\u0131 de\u011fildir; ayn\u0131 zamanda belirli operasyonlar (arama, ekleme, silme, g\u00fcncelleme) i\u00e7in farkl\u0131 performans karakterleri sunarlar. Bu karakterleri anlamak, kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z problemi en verimli \u015fekilde \u00e7\u00f6zmenizi sa\u011flar.<\/p>\n<h3>Algoritmalar Nas\u0131l \u00c7al\u0131\u015f\u0131r ve Ba\u015far\u0131l\u0131 Uygulamalar \u0130\u00e7in Anahtar Nedir?<\/h3>\n<p>Algoritma, belirli bir problemi \u00e7\u00f6zmek veya belirli bir g\u00f6revi yerine getirmek i\u00e7in tan\u0131mlanm\u0131\u015f, ad\u0131m ad\u0131m talimatlar dizisidir. Algoritmalar, bir input al\u0131r, belirli bir i\u015flem dizisini uygular ve bir output \u00fcretir. \u00d6rne\u011fin, bir say\u0131 listesini s\u0131ralamak (input), belirli bir s\u0131ralama algoritmas\u0131n\u0131 (i\u015flem dizisi) uygulamak ve s\u0131ral\u0131 listeyi (output) elde etmek bir algoritmad\u0131r. Bir algoritman\u0131n &#8220;ba\u015far\u0131l\u0131&#8221; kabul edilmesi i\u00e7in sadece do\u011fru sonu\u00e7 \u00fcretmesi yetmez; ayn\u0131 zamanda verimli olmas\u0131, yani minimum zaman ve bellek kaynaklar\u0131 kullanarak \u00e7al\u0131\u015fmas\u0131 gerekir. Bu verimlilik genellikle &#8220;Big O Notasyonu&#8221; ile ifade edilir, ki bu konuyu ileri d\u00fczey b\u00f6l\u00fcmde detayl\u0131ca ele alaca\u011f\u0131z. Ba\u015far\u0131l\u0131 bir algoritma uygulamas\u0131 i\u00e7in anahtar, problemi iyi anlamak, farkl\u0131 \u00e7\u00f6z\u00fcm yakla\u015f\u0131mlar\u0131n\u0131 de\u011ferlendirmek ve en uygun algoritmay\u0131 se\u00e7mektir. Bu, genellikle deneme-yan\u0131lma, problem par\u00e7alama ve soyutlama becerisi gerektiren bir s\u00fcre\u00e7tir.<\/p>\n<h3>Python Neden DSA \u0130\u00e7in M\u00fckemmel Bir Se\u00e7imdir?<\/h3>\n<p>Python, veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek ve uygulamak i\u00e7in harika bir dildir. Bunun birka\u00e7 temel nedeni vard\u0131r:<\/p>\n<ul>\n<li><b>Basit ve Okunabilir S\u00f6zdizimi:<\/b> Python&#8217;\u0131n temiz ve sezgisel s\u00f6zdizimi, algoritma mant\u0131\u011f\u0131n\u0131 karma\u015f\u0131k dil yap\u0131lar\u0131yla u\u011fra\u015fmadan ifade etmenize olanak tan\u0131r. Bu, \u00f6zellikle yeni ba\u015flayanlar i\u00e7in \u00f6\u011frenme e\u011frisini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/li>\n<li><b>Zengin Dahili Veri Yap\u0131lar\u0131:<\/b> Python, listeler (dinamik diziler), s\u00f6zl\u00fckler (hash tablolar\u0131), k\u00fcmeler ve demetler gibi g\u00fc\u00e7l\u00fc ve verimli dahili veri yap\u0131lar\u0131 sunar. Bu yap\u0131lar, bir\u00e7ok temel DSA problemini h\u0131zl\u0131ca \u00e7\u00f6zmenizi sa\u011flar.<\/li>\n<li><b>Y\u00fcksek Seviye Soyutlama:<\/b> Bellek y\u00f6netimi gibi d\u00fc\u015f\u00fck seviye detaylarla u\u011fra\u015fman\u0131za gerek kalmaz. Bu, algoritmalar\u0131n \u00e7ekirdek mant\u0131\u011f\u0131na odaklanman\u0131z\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><b>Geni\u015f K\u00fct\u00fcphane Deste\u011fi:<\/b> <code>collections<\/code> (<code>deque<\/code>, <code>Counter<\/code>), <code>heapq<\/code> (min-heap), <code>functools<\/code> gibi mod\u00fcller, daha karma\u015f\u0131k veri yap\u0131lar\u0131 ve algoritmalar i\u00e7in haz\u0131r ara\u00e7lar sunar.<\/li>\n<li><b>H\u0131zl\u0131 Prototipleme:<\/b> Python&#8217;\u0131n yorumlay\u0131c\u0131 tabanl\u0131 yap\u0131s\u0131 ve dinamik yaz\u0131m\u0131, fikirleri ve algoritmalar\u0131 h\u0131zla test etmenize ve prototiplere d\u00f6n\u00fc\u015ft\u00fcrmenize olanak tan\u0131r.<\/li>\n<\/ul>\n<p>Bu \u00f6zellikler, Python&#8217;\u0131 hem teorik DSA kavramlar\u0131n\u0131 anlamak hem de bu kavramlar\u0131 ger\u00e7ek d\u00fcnya problemlerine uygulamak i\u00e7in ideal bir ara\u00e7 haline getirir.<\/p>\n<h2>Uygulamal\u0131 K\u0131s\u0131m: Temel Veri Yap\u0131lar\u0131 Python ile Nas\u0131l Uygulan\u0131r?<\/h2>\n<p>\u015eimdi s\u0131ra geldi teorik bilgileri prati\u011fe d\u00f6kmeye. Python&#8217;\u0131n yerle\u015fik yeteneklerini kullanarak en yayg\u0131n veri yap\u0131lar\u0131n\u0131 nas\u0131l olu\u015fturaca\u011f\u0131m\u0131za ve y\u00f6netece\u011fimize bakal\u0131m. Bu b\u00f6l\u00fcm, her bir veri yap\u0131s\u0131n\u0131n temel mant\u0131\u011f\u0131n\u0131, Python&#8217;daki kar\u015f\u0131l\u0131\u011f\u0131n\u0131 ve yayg\u0131n kullan\u0131m senaryolar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Unutmay\u0131n, do\u011fru veri yap\u0131s\u0131 se\u00e7imi, algoritman\u0131z\u0131n genel performans\u0131n\u0131 belirleyen kritik bir ad\u0131md\u0131r.<\/p>\n<h3>Diziler (Listeler) ve Temel \u0130\u015flemler: H\u0131zl\u0131 Eri\u015fim \u0130\u00e7in Ne Bilmelisiniz?<\/h3>\n<p>Python&#8217;da dizilerin kar\u015f\u0131l\u0131\u011f\u0131 <\/p>\n<pre><code>list<\/pre>\n<p><\/code> veri yap\u0131s\u0131d\u0131r. Python listeleri dinamiktir, yani boyutlar\u0131 \u00e7al\u0131\u015fma zaman\u0131nda de\u011fi\u015febilir. Bellekte biti\u015fik bir blok olarak tutulur ve elemanlara indeksleri arac\u0131l\u0131\u011f\u0131yla <\/p>\n<pre><code>O(1)<\/pre>\n<p><\/code> zaman karma\u015f\u0131kl\u0131\u011f\u0131nda eri\u015filebilir. Ancak, listenin ba\u015f\u0131na veya ortas\u0131na eleman eklemek\/\u00e7\u0131karmak <\/p>\n<pre><code>O(n)<\/pre>\n<p><\/code> zaman alabilir, \u00e7\u00fcnk\u00fc di\u011fer elemanlar\u0131n kayd\u0131r\u0131lmas\u0131 gerekir.<\/p>\n<p><b>Temel \u0130\u015flemler:<\/b><\/p>\n<ul>\n<li><b>Olu\u015fturma:<\/b><\/li>\n<pre><code>\nmy_list = [1, 2, 3, 4, 5]\nempty_list = []\n    <\/pre>\n<p><\/code><\/p>\n<li><b>Eri\u015fim:<\/b><\/li>\n<pre><code>\nprint(my_list[0]) # \u00c7\u0131kt\u0131: 1 (O(1))\nprint(my_list[len(my_list) - 1]) # \u00c7\u0131kt\u0131: 5\n    <\/pre>\n<p><\/code><\/p>\n<li><b>Eleman Ekleme:<\/b><\/li>\n<pre><code>\nmy_list.append(6) # Listenin sonuna ekler (amortized O(1))\nmy_list.insert(0, 0) # Belirtilen indekse ekler (O(n))\nprint(my_list) # \u00c7\u0131kt\u0131: [0, 1, 2, 3, 4, 5, 6]\n    <\/pre>\n<p><\/code><\/p>\n<li><b>Eleman Silme:<\/b><\/li>\n<pre><code>\nmy_list.pop() # Sondan eleman siler ve d\u00f6nd\u00fcr\u00fcr (O(1))\nmy_list.pop(0) # Belirtilen indeksteki eleman\u0131 siler ve d\u00f6nd\u00fcr\u00fcr (O(n))\nmy_list.remove(3) # De\u011feri 3 olan ilk eleman\u0131 siler (O(n))\nprint(my_list) # \u00c7\u0131kt\u0131: [1, 2, 4, 5] (\u00f6rne\u011fe g\u00f6re de\u011fi\u015fir)\n    <\/pre>\n<p><\/code><\/p>\n<li><b>Dilimleme (Slicing):<\/b><\/li>\n<pre><code>\nsub_list = my_list[1:3] # \u0130ndeks 1'den 3'e kadar (3 dahil de\u011fil)\nprint(sub_list) # \u00c7\u0131kt\u0131: [2, 4] (my_list'in son haline g\u00f6re)\n    <\/pre>\n<p><\/code>\n<\/ul>\n<p>Python listeleri, bir\u00e7ok senaryoda ilk tercihiniz olmal\u0131d\u0131r. Ancak \u00e7ok s\u0131k ba\u015fa veya ortas\u0131na eleman ekleyip \u00e7\u0131karmak durumunda kal\u0131rsan\u0131z, <\/p>\n<pre><code>collections.deque<\/pre>\n<p><\/code> gibi \u00e7ift u\u00e7lu bir kuyruk yap\u0131s\u0131 daha performansl\u0131 olabilir.<\/p>\n<h3>Ba\u011fl\u0131 Listeler (Linked Lists): Dinamik Bellek Y\u00f6netimi Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Ba\u011fl\u0131 liste, elemanlar\u0131n bellekte biti\u015fik olarak saklanmad\u0131\u011f\u0131, bunun yerine her bir eleman\u0131n (d\u00fc\u011f\u00fcm\u00fcn) hem kendi verisini hem de bir sonraki eleman\u0131n referans\u0131n\u0131 (pointer\u0131n\u0131) i\u00e7erdi\u011fi bir veri yap\u0131s\u0131d\u0131r. Bu yap\u0131, dizilere g\u00f6re ekleme ve silme i\u015flemlerini <\/p>\n<pre><code>O(1)<\/pre>\n<p><\/code> zaman karma\u015f\u0131kl\u0131\u011f\u0131nda yapabilme avantaj\u0131 sunar (d\u00fc\u011f\u00fcm\u00fcn konumunu bildi\u011finiz s\u00fcrece), ancak elemanlara eri\u015fim <\/p>\n<pre><code>O(n)<\/pre>\n<p><\/code> zaman al\u0131r \u00e7\u00fcnk\u00fc ba\u015ftan itibaren her d\u00fc\u011f\u00fcm\u00fc tek tek gezmeniz gerekir.<\/p>\n<pre><code>\nclass Node:\n    def __init__(self, data):\n        self.data = data\n        self.next = None\n\nclass LinkedList:\n    def __init__(self):\n        self.head = None\n\n    def append(self, data):\n        new_node = Node(data)\n        if not self.head:\n            self.head = new_node\n            return\n        last_node = self.head\n        while last_node.next:\n            last_node = last_node.next\n        last_node.next = new_node\n\n    def prepend(self, data):\n        new_node = Node(data)\n        new_node.next = self.head\n        self.head = new_node\n\n    def delete_node(self, key):\n        current_node = self.head\n        if current_node and current_node.data == key:\n            self.head = current_node.next\n            current_node = None\n            return\n\n        prev = None\n        while current_node and current_node.data != key:\n            prev = current_node\n            current_node = current_node.next\n\n        if not current_node:\n            print(f\"'{key}' listede bulunamad\u0131.\")\n            return\n\n        prev.next = current_node.next\n        current_node = None\n\n    def print_list(self):\n        current = self.head\n        while current:\n            print(current.data, end=\" -> \")\n            current = current.next\n        print(\"None\")\n\n# Kullan\u0131m \u00f6rne\u011fi\nmy_linked_list = LinkedList()\nmy_linked_list.append(1)\nmy_linked_list.append(2)\nmy_linked_list.prepend(0)\nmy_linked_list.print_list() # \u00c7\u0131kt\u0131: 0 -> 1 -> 2 -> None\nmy_linked_list.delete_node(1)\nmy_linked_list.print_list() # \u00c7\u0131kt\u0131: 0 -> 2 -> None\n    <\/pre>\n<p><\/code><\/p>\n<p>Ba\u011fl\u0131 listeler, \u00f6zellikle dinamik bellek gerektiren durumlarda, \u00f6rne\u011fin bir metin d\u00fczenleyicide geri alma\/ileri alma (undo\/redo) i\u015flevleri veya oyunlardaki karakter envanteri gibi senaryolarda tercih edilebilir.<\/p>\n<h3>Y\u0131\u011f\u0131nlar (Stacks) ve Kuyruklar (Queues): LIFO ve FIFO Prensipleriyle \u00c7al\u0131\u015fmak<\/h3>\n<p>Y\u0131\u011f\u0131nlar (Stacks) ve kuyruklar (Queues), belirli eri\u015fim kurallar\u0131na sahip \u00f6zel t\u00fcrde listelerdir.<\/p>\n<h4>Y\u0131\u011f\u0131nlar (Stacks - LIFO)<\/h4>\n<p>Y\u0131\u011f\u0131n, Last-In, First-Out (LIFO) prensibiyle \u00e7al\u0131\u015fan bir veri yap\u0131s\u0131d\u0131r. Son eklenen eleman, ilk \u00e7\u0131kar\u0131lan elemand\u0131r. G\u00fcnl\u00fck hayatta \u00fcst \u00fcste y\u0131\u011f\u0131lm\u0131\u015f tabaklar iyi bir \u00f6rnektir. Python'da y\u0131\u011f\u0131nlar\u0131 genellikle bir liste kullanarak implemente ederiz.<\/p>\n<pre><code>\nstack = []\nstack.append('A') # Ekleme (push)\nstack.append('B')\nstack.append('C')\nprint(stack) # \u00c7\u0131kt\u0131: ['A', 'B', 'C']\nprint(stack.pop()) # \u00c7\u0131kt\u0131: C (\u00c7\u0131karma - pop)\nprint(stack.pop()) # \u00c7\u0131kt\u0131: B\nprint(stack) # \u00c7\u0131kt\u0131: ['A']\n    <\/pre>\n<p><\/code><\/p>\n<p>Y\u0131\u011f\u0131nlar, fonksiyon \u00e7a\u011fr\u0131 y\u0131\u011f\u0131nlar\u0131nda, parantez denetiminde veya bir web taray\u0131c\u0131s\u0131n\u0131n geri tu\u015fu i\u015flevselli\u011finde kullan\u0131l\u0131r.<\/p>\n<h4>Kuyruklar (Queues - FIFO)<\/h4>\n<p>Kuyruk, First-In, First-Out (FIFO) prensibiyle \u00e7al\u0131\u015fan bir veri yap\u0131s\u0131d\u0131r. \u0130lk eklenen eleman, ilk \u00e7\u0131kar\u0131lan elemand\u0131r. S\u00fcpermarket kasas\u0131 s\u0131ras\u0131 bunun en iyi \u00f6rne\u011fidir. Python'da kuyruklar\u0131 <\/p>\n<pre><code>collections.deque<\/pre>\n<p><\/code> kullanarak verimli bir \u015fekilde implemente edebiliriz.<\/p>\n<pre><code>\nfrom collections import deque\n\nqueue = deque()\nqueue.append('A') # Ekleme (enqueue)\nqueue.append('B')\nqueue.append('C')\nprint(queue) # \u00c7\u0131kt\u0131: deque(['A', 'B', 'C'])\nprint(queue.popleft()) # \u00c7\u0131kt\u0131: A (\u00c7\u0131karma - dequeue)\nprint(queue) # \u00c7\u0131kt\u0131: deque(['B', 'C'])\n    <\/pre>\n<p><\/code><\/p>\n<p>Kuyruklar, yazd\u0131rma kuyruklar\u0131nda, i\u015flem zamanlay\u0131c\u0131larda veya a\u011f paketi iletiminde kullan\u0131l\u0131r.<\/p>\n<h3>Hash Tablolar\u0131 (Dictionaries): O(1) Ortalama S\u00fcrede Eri\u015fim Nas\u0131l Elde Edilir?<\/h3>\n<p>Python'da s\u00f6zl\u00fckler (dictionaries), hash tablolar\u0131n\u0131n bir implementasyonudur. Anahtar-de\u011fer \u00e7iftlerini depolayan bu yap\u0131lar, anahtarlara g\u00f6re elemanlara ortalama <\/p>\n<pre><code>O(1)<\/pre>\n<p><\/code> zamanda eri\u015fim, ekleme ve silme imkan\u0131 sunar. Bu inan\u0131lmaz verimlilik, hash fonksiyonlar\u0131 sayesinde sa\u011flan\u0131r; her anahtar, bellekteki benzersiz bir konuma e\u015flenir.<\/p>\n<pre><code>\nmy_dict = {\"elma\": 1, \"armut\": 2, \"kiraz\": 3}\n\n# Eleman ekleme\/g\u00fcncelleme (O(1) ortalama)\nmy_dict[\"muz\"] = 4\nprint(my_dict) # \u00c7\u0131kt\u0131: {'elma': 1, 'armut': 2, 'kiraz': 3, 'muz': 4}\n\n# Elemana eri\u015fim (O(1) ortalama)\nprint(my_dict[\"elma\"]) # \u00c7\u0131kt\u0131: 1\n\n# Eleman silme (O(1) ortalama)\ndel my_dict[\"armut\"]\nprint(my_dict) # \u00c7\u0131kt\u0131: {'elma': 1, 'kiraz': 3, 'muz': 4}\n\n# Anahtar\u0131n varl\u0131\u011f\u0131n\u0131 kontrol etme (O(1) ortalama)\nif \"kiraz\" in my_dict:\n    print(\"Kiraz var.\")\n    <\/pre>\n<p><\/code><\/p>\n<p>Hash tablolar\u0131, veritaban\u0131 indekslemede, \u00f6nbelleklemede, frekans say\u0131m\u0131nda veya telefon rehberleri gibi anahtar-de\u011fer ili\u015fkisi olan bir\u00e7ok uygulamada temel bir bile\u015fendir. Python'\u0131n yerle\u015fik s\u00f6zl\u00fckleri o kadar iyi optimize edilmi\u015ftir ki, \u00e7o\u011fu durumda \u00f6zel bir hash tablosu implementasyonuna ihtiya\u00e7 duymazs\u0131n\u0131z.<\/p>\n<h2>Algoritma Temelleri: Python ile Etkili \u00c7\u00f6z\u00fcmler Geli\u015ftirmek<\/h2>\n<p>Veri yap\u0131lar\u0131n\u0131 anlad\u0131ktan sonra, s\u0131ra bu yap\u0131lar \u00fczerinde \u00e7al\u0131\u015fan algoritmalar\u0131 \u00f6\u011frenmeye gelir. Algoritmalar, problemleri \u00e7\u00f6zmek i\u00e7in izledi\u011fimiz tariflerdir. Bir problemi \u00e7\u00f6zmenin birden fazla yolu olabilir, ancak en iyi algoritma, hem do\u011fru sonucu veren hem de bunu en verimli \u015fekilde (en az zaman ve kaynakla) yapan algoritmad\u0131r. Bu b\u00f6l\u00fcmde, s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan baz\u0131 temel algoritma t\u00fcrlerini ve Python'da nas\u0131l uygulanabileceklerini inceleyece\u011fiz.<\/p>\n<h3>S\u0131ralama Algoritmalar\u0131: Verileri D\u00fczenlemenin En Pop\u00fcler Yollar\u0131 Nelerdir?<\/h3>\n<p>S\u0131ralama algoritmalar\u0131, bir veri koleksiyonundaki elemanlar\u0131 belirli bir d\u00fczene (artana veya azalana) g\u00f6re yerle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Bu algoritmalar, veri analizi, veritabanlar\u0131 ve arama i\u015flemleri gibi bir\u00e7ok alanda temel bir rol oynar. Python'\u0131n kendi <\/p>\n<pre><code>sort()<\/pre>\n<p><\/code> metodu (listeler i\u00e7in) ve <\/p>\n<pre><code>sorted()<\/pre>\n<p><\/code> fonksiyonu (herhangi bir yinelenebilir nesne i\u00e7in) TimSort ad\u0131 verilen hibrit bir algoritma kullan\u0131r ve \u00e7o\u011fu durumda olduk\u00e7a verimlidir (<\/p>\n<pre><code>O(n log n)<\/pre>\n<p><\/code> ortalama ve en k\u00f6t\u00fc durum). Ancak, i\u00e7 \u00e7al\u0131\u015fma mekanizmalar\u0131n\u0131 anlamak i\u00e7in baz\u0131 temel s\u0131ralama algoritmalar\u0131na g\u00f6z atal\u0131m.<\/p>\n<h4>Kabarc\u0131k S\u0131ralamas\u0131 (Bubble Sort)<\/h4>\n<p>Basit ama verimsiz bir algoritmad\u0131r (<\/p>\n<pre><code>O(n^2)<\/pre>\n<p><\/code>). Tekrarlayan ge\u00e7i\u015flerle yan yana duran elemanlar\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131r ve e\u011fer yanl\u0131\u015f s\u0131radalarsa yerlerini de\u011fi\u015ftirir.<\/p>\n<pre><code>\ndef bubble_sort(arr):\n    n = len(arr)\n    for i in range(n):\n        swapped = False\n        for j in range(0, n - i - 1):\n            if arr[j] > arr[j + 1]:\n                arr[j], arr[j + 1] = arr[j + 1], arr[j] # Takas\n                swapped = True\n        if not swapped: # E\u011fer bu ge\u00e7i\u015fte hi\u00e7bir takas yap\u0131lmad\u0131ysa, dizi s\u0131ralanm\u0131\u015ft\u0131r.\n            break\n    return arr\n\n# Kullan\u0131m \u00f6rne\u011fi\nmy_arr = [64, 34, 25, 12, 22, 11, 90]\nprint(f\"Kabarc\u0131k S\u0131ralamas\u0131: {bubble_sort(list(my_arr))}\")\n    <\/pre>\n<p><\/code><\/p>\n<p>Kabarc\u0131k s\u0131ralamas\u0131, k\u00fc\u00e7\u00fck diziler i\u00e7in anla\u015f\u0131lmas\u0131 kolayd\u0131r ancak b\u00fcy\u00fck veri setlerinde asla kullan\u0131lmamal\u0131d\u0131r.<\/p>\n<h4>Birle\u015ftirme S\u0131ralamas\u0131 (Merge Sort)<\/h4>\n<p>Daha verimli, Divide and Conquer (B\u00f6l ve Y\u00f6net) prensibine dayal\u0131 bir s\u0131ralama algoritmas\u0131d\u0131r (<\/p>\n<pre><code>O(n log n)<\/pre>\n<p><\/code>). Diziyi s\u00fcrekli ikiye b\u00f6ler, her par\u00e7ay\u0131 ayr\u0131 ayr\u0131 s\u0131ralar ve sonra s\u0131ralanm\u0131\u015f par\u00e7alar\u0131 birle\u015ftirir.<\/p>\n<pre><code>\ndef merge_sort(arr):\n    if len(arr) > 1:\n        mid = len(arr) \/\/ 2\n        left_half = arr[:mid]\n        right_half = arr[mid:]\n\n        merge_sort(left_half)\n        merge_sort(right_half)\n\n        i = j = k = 0\n\n        while i < len(left_half) and j < len(right_half):\n            if left_half[i] < right_half[j]:\n                arr[k] = left_half[i]\n                i += 1\n            else:\n                arr[k] = right_half[j]\n                j += 1\n            k += 1\n\n        while i < len(left_half):\n            arr[k] = left_half[i]\n            i += 1\n            k += 1\n\n        while j < len(right_half):\n            arr[k] = right_half[j]\n            j += 1\n            k += 1\n    return arr\n\n# Kullan\u0131m \u00f6rne\u011fi\nprint(f\"Birle\u015ftirme S\u0131ralamas\u0131: {merge_sort(list(my_arr))}\")\n    <\/pre>\n<p><\/code><\/p>\n<p>Birle\u015ftirme s\u0131ralamas\u0131, b\u00fcy\u00fck veri setleri i\u00e7in stabil ve verimlidir, ancak ek bellek gerektirir.<\/p>\n<h3>Arama Algoritmalar\u0131: Hedefi H\u0131zl\u0131ca Bulmak \u0130\u00e7in Hangi Y\u00f6ntemleri Kullanmal\u0131y\u0131z?<\/h3>\n<p>Arama algoritmalar\u0131, bir veri koleksiyonunda belirli bir \u00f6\u011fenin varl\u0131\u011f\u0131n\u0131 kontrol etmek veya konumunu bulmak i\u00e7in kullan\u0131l\u0131r. Veri yap\u0131lar\u0131 ile birlikte, bu algoritmalar herhangi bir veri odakl\u0131 uygulaman\u0131n temelini olu\u015fturur.<\/p>\n<h4>Do\u011frusal Arama (Linear Search)<\/h4>\n<p>En basit arama algoritmas\u0131d\u0131r (<\/p>\n<pre><code>O(n)<\/pre>\n<p><\/code>). Dizideki her eleman\u0131 tek tek kontrol ederek hedefi bulmaya \u00e7al\u0131\u015f\u0131r. Dizi s\u0131ral\u0131 olsun veya olmas\u0131n kullan\u0131labilir.<\/p>\n<pre><code>\ndef linear_search(arr, target):\n    for i in range(len(arr)):\n        if arr[i] == target:\n            return i # Hedef bulundu, indeksi d\u00f6nd\u00fcr\n    return -1 # Hedef bulunamad\u0131\n\n# Kullan\u0131m \u00f6rne\u011fi\nprint(f\"Do\u011frusal Arama (22): {linear_search(my_arr, 22)}\") # \u00c7\u0131kt\u0131: 4 (my_arr s\u0131ralanmam\u0131\u015f hali)\nprint(f\"Do\u011frusal Arama (100): {linear_search(my_arr, 100)}\") # \u00c7\u0131kt\u0131: -1\n    <\/pre>\n<p><\/code><\/p>\n<h4>\u0130kili Arama (Binary Search)<\/h4>\n<p>Daha verimli bir arama algoritmas\u0131d\u0131r (<\/p>\n<pre><code>O(log n)<\/pre>\n<p><\/code>), ancak <strong>sadece s\u0131ral\u0131 dizilerde<\/strong> \u00e7al\u0131\u015f\u0131r. Diziyi s\u00fcrekli ikiye b\u00f6lerek hedefin hangi yar\u0131da oldu\u011funu kontrol eder ve arama alan\u0131n\u0131 daralt\u0131r.<\/p>\n<pre><code>\ndef binary_search(arr, target):\n    low = 0\n    high = len(arr) - 1\n\n    while low <= high:\n        mid = (low + high) \/\/ 2\n        if arr[mid] == target:\n            return mid\n        elif arr[mid] < target:\n            low = mid + 1\n        else:\n            high = mid - 1\n    return -1\n\n# Kullan\u0131m \u00f6rne\u011fi (dizi s\u0131ral\u0131 olmal\u0131!)\nsorted_arr = sorted(my_arr) # my_arr'\u0131 s\u0131ralayal\u0131m\nprint(f\"\u0130kili Arama (22, s\u0131ral\u0131): {binary_search(sorted_arr, 22)}\")\nprint(f\"\u0130kili Arama (100, s\u0131ral\u0131): {binary_search(sorted_arr, 100)}\")\n    <\/pre>\n<p><\/code><\/p>\n<p>\u0130kili arama, b\u00fcy\u00fck s\u0131ral\u0131 veri setlerinde h\u0131zl\u0131 arama gerekti\u011finde vazge\u00e7ilmezdir. Telefon rehberleri, s\u00f6zl\u00fck uygulamalar\u0131 gibi yerlerde yayg\u0131n olarak kullan\u0131l\u0131r.<\/p>\n<h3>Tekrarlamal\u0131 (Recursion) ve \u0130teratif (Iteration) Yakla\u015f\u0131mlar: Ne Zaman Hangisi Tercih Edilmeli?<\/h3>\n<p>Bir problemi \u00e7\u00f6zmek i\u00e7in iki ana programlama yakla\u015f\u0131m\u0131 vard\u0131r: tekrarlamal\u0131 (recursion) ve iteratif (iteration). Her ikisinin de avantajlar\u0131 ve dezavantajlar\u0131 bulunur.<\/p>\n<h4>Tekrarlamal\u0131 (Recursion)<\/h4>\n<p>Bir fonksiyonun kendi kendini \u00e7a\u011f\u0131rmas\u0131d\u0131r. Problemi daha k\u00fc\u00e7\u00fck, benzer alt problemlere b\u00f6lerek \u00e7\u00f6zer. Temel bir durum (base case) tan\u0131mlanana kadar bu i\u015flem devam eder. Okunabilirli\u011fi y\u00fcksek, \u00f6zellikle a\u011fa\u00e7 ve grafik gibi do\u011fal olarak \u00f6zyinelemeli veri yap\u0131lar\u0131nda zarif \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<pre><code>\ndef factorial_recursive(n):\n    if n == 0: # Temel durum\n        return 1\n    else:\n        return n * factorial_recursive(n - 1) # \u00d6zyinelemeli \u00e7a\u011fr\u0131\n\nprint(f\"Fakt\u00f6riyel (\u00d6zyinelemeli): {factorial_recursive(5)}\") # \u00c7\u0131kt\u0131: 120\n    <\/pre>\n<p><\/code><\/p>\n<p>Dezavantajlar\u0131 aras\u0131nda artan bellek kullan\u0131m\u0131 (her fonksiyon \u00e7a\u011fr\u0131s\u0131 y\u0131\u011f\u0131nda yer kaplar) ve potansiyel y\u0131\u011f\u0131n ta\u015fmas\u0131 (stack overflow) riski bulunur.<\/p>\n<h4>\u0130teratif (Iteration)<\/h4>\n<p><pre><code>for<\/pre>\n<p><\/code> veya <\/p>\n<pre><code>while<\/pre>\n<p><\/code> d\u00f6ng\u00fcleri kullanarak bir i\u015flemi tekrarlamakt\u0131r. Genellikle daha az bellek kullan\u0131r ve y\u0131\u011f\u0131n ta\u015fmas\u0131 riski ta\u015f\u0131maz.<\/p>\n<pre><code>\ndef factorial_iterative(n):\n    res = 1\n    for i in range(1, n + 1):\n        res *= i\n    return res\n\nprint(f\"Fakt\u00f6riyel (\u0130teratif): {factorial_iterative(5)}\") # \u00c7\u0131kt\u0131: 120\n    <\/pre>\n<p><\/code><\/p>\n<p>Se\u00e7im, problemin do\u011fas\u0131na ve ki\u015fisel tercihe ba\u011fl\u0131d\u0131r. Baz\u0131 problemler \u00f6zyinelemeyle daha do\u011fal ve anla\u015f\u0131l\u0131r bir \u015fekilde ifade edilirken, di\u011ferleri i\u00e7in d\u00f6ng\u00fc tabanl\u0131 bir \u00e7\u00f6z\u00fcm daha verimli veya g\u00fcvenli olabilir. Genellikle, m\u00fcmk\u00fcnse iteratif \u00e7\u00f6z\u00fcmler tercih edilir, ancak \u00f6zyinelemeli \u00e7\u00f6z\u00fcmlerin g\u00fczelli\u011fi ve sadeli\u011fi yads\u0131namaz.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Recursion kullan\u0131rken her zaman bir temel durum (base case) tan\u0131mlad\u0131\u011f\u0131n\u0131zdan emin olun. Aksi takdirde sonsuz d\u00f6ng\u00fcye girer ve \"RecursionError: maximum recursion depth exceeded\" hatas\u0131 al\u0131rs\u0131n\u0131z.\n<\/div>\n<h2>\u0130leri D\u00fczey Konular ve Optimizasyon Stratejileri<\/h2>\n<p>Temel veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frendikten sonra, s\u0131ra daha karma\u015f\u0131k konulara ve performans\u0131 optimize etme yollar\u0131na gelir. B\u00fcy\u00fck \u00f6l\u00e7ekli sistemler ve rekabet\u00e7i programlama ortamlar\u0131, sadece do\u011fru sonucu veren de\u011fil, ayn\u0131 zamanda bunu en h\u0131zl\u0131 ve en az kaynakla yapan \u00e7\u00f6z\u00fcmleri gerektirir. Bu b\u00f6l\u00fcmde, daha geli\u015fmi\u015f veri yap\u0131lar\u0131n\u0131, algoritmalar\u0131n performans\u0131n\u0131 \u00f6l\u00e7me y\u00f6ntemlerini ve Python'da optimizasyon i\u00e7in baz\u0131 pratik ipu\u00e7lar\u0131n\u0131 ke\u015ffedece\u011fiz.<\/p>\n<h3>A\u011fa\u00e7lar (Trees) ve Graflar (Graphs): Karma\u015f\u0131k \u0130li\u015fkileri Modellemek<\/h3>\n<p>A\u011fa\u00e7lar ve graflar, elemanlar aras\u0131ndaki karma\u015f\u0131k, do\u011frusal olmayan ili\u015fkileri modellemek i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc veri yap\u0131lar\u0131d\u0131r. \u0130nternet, sosyal a\u011flar, yol a\u011flar\u0131 gibi bir\u00e7ok ger\u00e7ek d\u00fcnya senaryosu bu yap\u0131larla temsil edilebilir.<\/p>\n<h4>A\u011fa\u00e7lar (Trees)<\/h4>\n<p>A\u011fa\u00e7, hiyerar\u015fik bir yap\u0131y\u0131 temsil eden, k\u00f6k (root) d\u00fc\u011f\u00fcmden ba\u015flayan ve her d\u00fc\u011f\u00fcm\u00fcn s\u0131f\u0131r veya daha fazla \u00e7ocuk d\u00fc\u011f\u00fcme sahip oldu\u011fu do\u011frusal olmayan bir veri yap\u0131s\u0131d\u0131r. En yayg\u0131n t\u00fcrlerinden biri \u0130kili Arama A\u011fac\u0131 (Binary Search Tree - BST) olup, elemanlar\u0131n s\u0131ral\u0131 bir \u015fekilde yerle\u015ftirilmesini sa\u011flar, b\u00f6ylece arama, ekleme ve silme i\u015flemleri ortalama <\/p>\n<pre><code>O(log n)<\/pre>\n<p><\/code> zamanda ger\u00e7ekle\u015febilir.<\/p>\n<pre><code>\nclass TreeNode:\n    def __init__(self, key):\n        self.left = None\n        self.right = None\n        self.val = key\n\nclass BST:\n    def __init__(self):\n        self.root = None\n\n    def insert(self, root, key):\n        if root is None:\n            return TreeNode(key)\n        else:\n            if root.val < key:\n                root.right = self.insert(root.right, key)\n            else:\n                root.left = self.insert(root.left, key)\n        return root\n\n    def search(self, root, key):\n        if root is None or root.val == key:\n            return root\n        if root.val < key:\n            return self.search(root.right, key)\n        return self.search(root.left, key)\n\n    def inorder_traversal(self, root):\n        if root:\n            self.inorder_traversal(root.left)\n            print(root.val, end=\" \")\n            self.inorder_traversal(root.right)\n\n# Kullan\u0131m \u00f6rne\u011fi\nbst = BST()\nroot = None\nkeys = [50, 30, 70, 20, 40, 60, 80]\nfor key in keys:\n    root = bst.insert(root, key)\n\nprint(\"Inorder Dola\u015f\u0131m:\", end=\" \")\nbst.inorder_traversal(root) # \u00c7\u0131kt\u0131: 20 30 40 50 60 70 80\nprint(\"\\n50 bulundu mu?\", bst.search(root, 50) is not None)\n    <\/pre>\n<p><\/code><\/p>\n<p>A\u011fa\u00e7lar, dosya sistemlerinde, veritaban\u0131 indekslemede ve \u00f6ncelik kuyruklar\u0131nda (heap) kullan\u0131l\u0131r.<\/p>\n<h4>Graflar (Graphs)<\/h4>\n<p>Graf, d\u00fc\u011f\u00fcmler (vertices) ve bu d\u00fc\u011f\u00fcmler aras\u0131ndaki ba\u011flant\u0131lar (edges) k\u00fcmesinden olu\u015fan daha genel bir veri yap\u0131s\u0131d\u0131r. Y\u00f6nl\u00fc veya y\u00f6ns\u00fcz, a\u011f\u0131rl\u0131kl\u0131 veya a\u011f\u0131rl\u0131ks\u0131z olabilirler. Sosyal a\u011flar, haritalar ve ileti\u015fim a\u011flar\u0131 gibi bir\u00e7ok ger\u00e7ek d\u00fcnya a\u011f\u0131, graflar kullan\u0131larak modellenebilir.<\/p>\n<pre><code>\ngraph = {\n    'A': ['B', 'C'],\n    'B': ['D', 'E'],\n    'C': ['F'],\n    'D': [],\n    'E': ['F'],\n    'F': []\n}\n\n# Geni\u015flik \u00d6ncelikli Arama (BFS)\nfrom collections import deque\n\ndef bfs(graph, start_node):\n    visited = set()\n    queue = deque([start_node])\n    visited.add(start_node)\n\n    while queue:\n        node = queue.popleft()\n        print(node, end=\" \")\n        for neighbor in graph[node]:\n            if neighbor not in visited:\n                visited.add(neighbor)\n                queue.append(neighbor)\n\nprint(\"BFS Dola\u015f\u0131m\u0131:\", end=\" \")\nbfs(graph, 'A') # \u00c7\u0131kt\u0131: A B C D E F\nprint()\n\n# Derinlik \u00d6ncelikli Arama (DFS)\ndef dfs(graph, start_node, visited=None):\n    if visited is None:\n        visited = set()\n    visited.add(start_node)\n    print(start_node, end=\" \")\n    for neighbor in graph[start_node]:\n        if neighbor not in visited:\n            dfs(graph, neighbor, visited)\n\nprint(\"DFS Dola\u015f\u0131m\u0131:\", end=\" \")\ndfs(graph, 'A') # \u00c7\u0131kt\u0131: A B D E F C\nprint()\n    <\/pre>\n<p><\/code><\/p>\n<p>Graflar, yol bulma algoritmalar\u0131nda (Dijkstra, A*), sosyal a\u011f analizinde ve a\u011f g\u00fcvenli\u011finde kilit rol oynar.<\/p>\n<h3>Zaman ve Alan Karma\u015f\u0131kl\u0131\u011f\u0131 Analizi (Big O Notasyonu): Kodunuz Ne Kadar Verimli?<\/h3>\n<p>Bir algoritman\u0131n verimlili\u011fini de\u011ferlendirmek i\u00e7in Zaman Karma\u015f\u0131kl\u0131\u011f\u0131 (Time Complexity) ve Alan Karma\u015f\u0131kl\u0131\u011f\u0131 (Space Complexity) analizi yapar\u0131z. Bu analizler genellikle \"Big O Notasyonu\" kullan\u0131larak ifade edilir. Big O, algoritman\u0131n girdi boyutu b\u00fcy\u00fcd\u00fck\u00e7e \u00e7al\u0131\u015fma s\u00fcresinin veya bellek kullan\u0131m\u0131n\u0131n nas\u0131l artt\u0131\u011f\u0131n\u0131 matematiksel olarak tan\u0131mlayan bir notasyondur.<\/p>\n<ul>\n<li>\n<pre><code>O(1)<\/pre>\n<p><\/code> (Sabit Zaman): Girdi boyutundan ba\u011f\u0131ms\u0131z. \u00d6r: Bir listede belirli bir indekse eri\u015fim.<\/li>\n<li>\n<pre><code>O(log n)<\/pre>\n<p><\/code> (Logaritmik Zaman): Girdi boyutu artt\u0131k\u00e7a \u00e7al\u0131\u015fma s\u00fcresi yava\u015f\u00e7a artar. \u00d6r: \u0130kili arama.<\/li>\n<li>\n<pre><code>O(n)<\/pre>\n<p><\/code> (Do\u011frusal Zaman): Girdi boyutuyla do\u011fru orant\u0131l\u0131 olarak artar. \u00d6r: Do\u011frusal arama.<\/li>\n<li>\n<pre><code>O(n log n)<\/pre>\n<p><\/code> (Do\u011frusal-Logaritmik Zaman): Verimli s\u0131ralama algoritmalar\u0131 (Merge Sort, Quick Sort).<\/li>\n<li>\n<pre><code>O(n^2)<\/pre>\n<p><\/code> (Karesel Zaman): Girdi boyutunun karesiyle artar. \u00c7ok verimsizdir. \u00d6r: Bubble Sort.<\/li>\n<li>\n<pre><code>O(2^n)<\/pre>\n<p><\/code> (\u00dcstel Zaman): Girdi boyutundaki k\u00fc\u00e7\u00fck art\u0131\u015flar bile devasa s\u00fcre art\u0131\u015flar\u0131na neden olur. \u00c7ok nadiren kabul edilebilir. \u00d6r: Baz\u0131 brute-force \u00e7\u00f6z\u00fcmler.<\/li>\n<\/ul>\n<p>Bir algoritmay\u0131 optimize ederken, genellikle zaman karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcrmeye \u00e7al\u0131\u015f\u0131r\u0131z. Ancak bazen zaman kazanmak i\u00e7in daha fazla bellek kullanmam\u0131z gerekebilir (zaman-alan takas\u0131). \u0130yi bir m\u00fchendis, bu takaslar\u0131 do\u011fru bir \u015fekilde de\u011ferlendirebilmelidir.<\/p>\n<h3>Dinamik Programlama: Tekrar Eden Problemleri Ak\u0131ll\u0131ca \u00c7\u00f6zme<\/h3>\n<p>Dinamik programlama (DP), genellikle \u00fcst \u00fcste binen alt problemlere ve optimal alt yap\u0131ya sahip karma\u015f\u0131k problemleri \u00e7\u00f6zmek i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc bir tekniktir. Temel fikir, ayn\u0131 alt problemleri tekrar tekrar \u00e7\u00f6zmekten ka\u00e7\u0131nmak i\u00e7in ara sonu\u00e7lar\u0131 depolamak ve yeniden kullanmakt\u0131r. Bu, genellikle memoization (\u00fcstten a\u015fa\u011f\u0131) veya tabulation (alttan yukar\u0131) yakla\u015f\u0131mlar\u0131yla yap\u0131l\u0131r.<\/p>\n<p><b>\u00d6rnek: Fibonacci Serisi<\/b><\/p>\n<pre><code>\n# \u00d6zyinelemeli (Memoization ile Dinamik Programlama)\ndef fib_dp(n, memo={}):\n    if n in memo:\n        return memo[n]\n    if n <= 2:\n        return 1\n    memo[n] = fib_dp(n - 1, memo) + fib_dp(n - 2, memo)\n    return memo[n]\n\nprint(f\"Fibonacci (DP): {fib_dp(10)}\") # \u00c7\u0131kt\u0131: 55\n\n# \u0130teratif (Tabulation ile Dinamik Programlama)\ndef fib_tab(n):\n    if n <= 2:\n        return 1\n    fib = [0] * (n + 1)\n    fib[1] = 1\n    fib[2] = 1\n    for i in range(3, n + 1):\n        fib[i] = fib[i - 1] + fib[i - 2]\n    return fib[n]\n\nprint(f\"Fibonacci (Tabulation): {fib_tab(10)}\") # \u00c7\u0131kt\u0131: 55\n    <\/pre>\n<p><\/code><\/p>\n<p>Dinamik programlama, s\u0131rt \u00e7antas\u0131 problemi, en uzun ortak alt dizi ve yol bulma problemleri gibi bir\u00e7ok karma\u015f\u0131k optimizasyon probleminde hayati \u00f6neme sahiptir.<\/p>\n<h3>Python Performans \u0130pu\u00e7lar\u0131: Kodunuzu Nas\u0131l H\u0131zland\u0131rabilirsiniz?<\/h3>\n<p>Python genel olarak h\u0131zl\u0131 bir dil olmasa da, do\u011fru tekniklerle ve veri yap\u0131lar\u0131yla performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirsiniz.<\/p>\n<ol>\n<li><b>Do\u011fru Veri Yap\u0131s\u0131n\u0131 Se\u00e7in:<\/b> Listenin ba\u015f\u0131na s\u0131k\u00e7a ekleme\/silme yap\u0131yorsan\u0131z\n<pre><code>collections.deque<\/pre>\n<p><\/code> kullan\u0131n. H\u0131zl\u0131 anahtar-de\u011fer aramalar\u0131 i\u00e7in <\/p>\n<pre><code>dict<\/pre>\n<p><\/code> kullan\u0131n.<\/li>\n<li><b>Yerle\u015fik Fonksiyonlar\u0131 ve K\u00fct\u00fcphaneleri Kullan\u0131n:<\/b> Python'\u0131n C ile optimize edilmi\u015f yerle\u015fik fonksiyonlar\u0131 ve k\u00fct\u00fcphaneleri (\u00f6rne\u011fin\n<pre><code>sum()<\/pre>\n<p><\/code>, <\/p>\n<pre><code>min()<\/pre>\n<p><\/code>, <\/p>\n<pre><code>max()<\/pre>\n<p><\/code>, <\/p>\n<pre><code>sorted()<\/pre>\n<p><\/code>) genellikle kendi yazd\u0131\u011f\u0131n\u0131z d\u00f6ng\u00fclerden daha h\u0131zl\u0131d\u0131r.<\/li>\n<li><b>List Comprehension Kullan\u0131n:<\/b> D\u00f6ng\u00fc tabanl\u0131 liste olu\u015fturma yerine list comprehension, daha okunakl\u0131 ve genellikle daha h\u0131zl\u0131d\u0131r.<\/li>\n<pre><code>\n# K\u00f6t\u00fc:\nsquares = []\nfor i in range(10):\n    squares.append(i * i)\n\n# \u0130yi:\nsquares_comp = [i * i for i in range(10)]\n    <\/pre>\n<p><\/code><\/p>\n<li><b>JIT Derleyicileri (\u00f6rn. Numba) Kullan\u0131n:<\/b> Yo\u011fun say\u0131sal i\u015flemler i\u00e7eren kod bloklar\u0131 i\u00e7in Numba gibi Just-In-Time (JIT) derleyicileri kullanarak Python kodunuzu neredeyse C h\u0131z\u0131yla \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/li>\n<pre><code>\nfrom numba import jit\n\n@jit(nopython=True)\ndef fast_sum(arr):\n    total = 0\n    for x in arr:\n        total += x\n    return total\n    <\/pre>\n<p><\/code><\/p>\n<li><b>Bellek Kullan\u0131m\u0131n\u0131 Optimize Edin:<\/b> B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken, jenerat\u00f6rler (generators) gibi lazy evaluation tekniklerini kullanarak bellekteki y\u00fck\u00fc azaltabilirsiniz.<\/li>\n<pre><code>\n# Jenerat\u00f6r: Bellekte t\u00fcm listeyi tutmaz\ndef fibonacci_generator(limit):\n    a, b = 0, 1\n    while a < limit:\n        yield a\n        a, b = b, a + b\n\nfor num in fibonacci_generator(10):\n    print(num, end=\" \") # \u00c7\u0131kt\u0131: 0 1 1 2 3 5 8\nprint()\n    <\/pre>\n<p><\/code><\/p>\n<li><b>Profileleme Ara\u00e7lar\u0131 Kullan\u0131n:<\/b> Kodunuzun neresinde zaman harcand\u0131\u011f\u0131n\u0131 anlamak i\u00e7in\n<pre><code>cProfile<\/pre>\n<p><\/code> mod\u00fcl\u00fcn\u00fc kullan\u0131n. \"Erken optimizasyon t\u00fcm k\u00f6t\u00fcl\u00fcklerin anas\u0131d\u0131r\" s\u00f6z\u00fcn\u00fc unutmay\u0131n; \u00f6nce profilleyin, sonra optimize edin.<\/li>\n<\/ol>\n<p><b>Mobil Uyumluluk Notu (CSS Media Query \u00d6rne\u011fi):<\/b> Her ne kadar bu makale sadece <code><body><\/code> i\u00e7eri\u011fini sa\u011flasa da, modern web sayfalar\u0131n\u0131n mobil uyumlu olmas\u0131 esast\u0131r. Yazd\u0131\u011f\u0131n\u0131z kod \u00f6rnekleri veya veri g\u00f6rselle\u015ftirmeleri gibi \u00f6\u011felerin k\u00fc\u00e7\u00fck ekranlarda da d\u00fczg\u00fcn g\u00f6r\u00fcnmesini sa\u011flamak i\u00e7in CSS media query'leri kullanmal\u0131s\u0131n\u0131z. \u00d6rne\u011fin, a\u015fa\u011f\u0131daki CSS kodu, belirli bir ekran geni\u015fli\u011finin alt\u0131nda paragraf yaz\u0131 tipini k\u00fc\u00e7\u00fclt\u00fcr:<\/p>\n<style>\n  \/* Sadece demonstrasyon ama\u00e7l\u0131d\u0131r, normalde <head> i\u00e7inde olur *\/\n  @media (max-width: 600px) {\n    p, li, .expert-tip {\n      font-size: 0.9em;\n      line-height: 1.5;\n    }\n    pre {\n      font-size: 0.8em;\n      overflow-x: auto; \/* K\u00fc\u00e7\u00fck ekranlarda yatay kayd\u0131rma \u00e7ubu\u011fu *\/\n    }\n  }\n<\/style>\n<p>Bu, i\u00e7eri\u011finizin farkl\u0131 cihazlarda kullan\u0131c\u0131 deneyimini art\u0131rman\u0131n kritik bir yoludur. Performans optimizasyonu sadece h\u0131z de\u011fil, ayn\u0131 zamanda eri\u015filebilirlik ve uyumluluk anlam\u0131na da gelir.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve Vaka Analizleri<\/h2>\n<p>Teorik bilgileri ve uygulama \u00f6rneklerini g\u00f6rd\u00fck. \u015eimdi, veri yap\u0131lar\u0131 ve algoritmalar\u0131n ger\u00e7ek d\u00fcnya problemlerinde nas\u0131l kullan\u0131ld\u0131\u011f\u0131na dair somut \u00f6rneklere bakal\u0131m. Bu vaka analizleri, \u00f6\u011frendi\u011finiz kavramlar\u0131n ne kadar \u00e7e\u015fitli ve g\u00fc\u00e7l\u00fc olabilece\u011fini g\u00f6sterecek.<\/p>\n<h3>Sosyal Medya Ak\u0131\u015f\u0131: Graf Veri Yap\u0131s\u0131 ile \u00d6neriler Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Bir sosyal medya platformunda, takip etti\u011finiz ki\u015filerin g\u00f6nderileri ve \"Sizin \u0130\u00e7in \u00d6nerilenler\" b\u00f6l\u00fcm\u00fc gibi ak\u0131\u015flar, arkas\u0131nda yatan g\u00fc\u00e7l\u00fc algoritmalar ve veri yap\u0131lar\u0131 sayesinde \u00e7al\u0131\u015f\u0131r. Bu platformlar, kullan\u0131c\u0131lar\u0131 ve aralar\u0131ndaki ba\u011flant\u0131lar\u0131 bir <b>graf veri yap\u0131s\u0131<\/b> olarak modelleyebilirler. Her kullan\u0131c\u0131 bir d\u00fc\u011f\u00fcm (vertex), her takip ili\u015fkisi veya arkada\u015fl\u0131k bir kenar (edge) olarak d\u00fc\u015f\u00fcn\u00fclebilir. G\u00f6nderiler ise zaman damgalar\u0131 ile birlikte ba\u015fka bir veri yap\u0131s\u0131nda (\u00f6rne\u011fin bir \u00f6ncelik kuyru\u011fu veya s\u0131ral\u0131 liste) tutulabilir.<\/p>\n<p><b>Senaryo:<\/b> Bir kullan\u0131c\u0131 yeni bir g\u00f6nderi payla\u015ft\u0131\u011f\u0131nda, bu g\u00f6nderinin o kullan\u0131c\u0131n\u0131n takip\u00e7ilerinin ak\u0131\u015f\u0131na d\u00fc\u015fmesi gerekir. Bu, basit bir <b>graf dola\u015f\u0131m\u0131 (traversal)<\/b> i\u015flemiyle yap\u0131labilir. \u00d6rne\u011fin, bir Geni\u015flik \u00d6ncelikli Arama (BFS) veya Derinlik \u00d6ncelikli Arama (DFS) algoritmas\u0131 kullanarak belirli bir kullan\u0131c\u0131n\u0131n t\u00fcm do\u011frudan takip\u00e7ilerini bulabilir ve g\u00f6nderiyi onlar\u0131n ak\u0131\u015flar\u0131na ekleyebiliriz.<\/p>\n<p><b>Vaka Analizi: Arkada\u015f \u00d6nerileri<\/b><br \/>\nSosyal medya platformlar\u0131 size \"Tan\u0131yor olabilece\u011finiz ki\u015filer\" \u00f6nerisinde bulunurken, genellikle <b>graf algoritmalar\u0131n\u0131<\/b> kullan\u0131r. \u00d6rne\u011fin, ortak arkada\u015flara sahip ki\u015fileri bulmak i\u00e7in BFS veya DFS tabanl\u0131 algoritmalar \u00e7al\u0131\u015ft\u0131r\u0131labilir. E\u011fer A'n\u0131n B ve C ile, B'nin D ile ortak arkada\u015fl\u0131\u011f\u0131 varsa, sistem D'yi A'ya \u00f6nerebilir. Bu t\u00fcr bir analiz i\u00e7in kom\u015fuluk listesi veya kom\u015fuluk matrisi gibi graf temsilleri kullan\u0131l\u0131r ve \u00fczerinde gezinti algoritmalar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131larak iki ad\u0131m \u00f6tedeki d\u00fc\u011f\u00fcmler (yani arkada\u015flar\u0131n arkada\u015flar\u0131) bulunur. En \u00e7ok ortak arkada\u015fa sahip olanlar, en g\u00fc\u00e7l\u00fc \u00f6neri adaylar\u0131 olur. Bu, asl\u0131nda bir t\u00fcr <b>graf algoritmalar\u0131yla yol bulma<\/b> problemine benzer, ancak burada yol bulmak yerine, belirli bir say\u0131da \"ad\u0131m\" i\u00e7indeki potansiyel ba\u011flant\u0131lar\u0131 ke\u015ffederiz.<\/p>\n<pre><code>\n# Basit bir arkada\u015f \u00f6neri algoritmas\u0131 \u00f6rne\u011fi (iki ad\u0131m \u00f6te)\ndef recommend_friends(graph, user):\n    friends_of_friends = set()\n    direct_friends = set(graph.get(user, []))\n    \n    for friend in direct_friends:\n        for fof in graph.get(friend, []):\n            if fof != user and fof not in direct_friends:\n                friends_of_friends.add(fof)\n    return list(friends_of_friends)\n\nsocial_graph = {\n    'Alice': ['Bob', 'Charlie'],\n    'Bob': ['Alice', 'David'],\n    'Charlie': ['Alice', 'Eve'],\n    'David': ['Bob'],\n    'Eve': ['Charlie', 'Frank'],\n    'Frank': ['Eve']\n}\n\nprint(f\"Alice i\u00e7in arkada\u015f \u00f6nerileri: {recommend_friends(social_graph, 'Alice')}\")\n# \u00c7\u0131kt\u0131: Alice i\u00e7in arkada\u015f \u00f6nerileri: ['David', 'Eve'] (s\u0131ralama farkl\u0131 olabilir)\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu senaryo, graflar\u0131n sadece yollar\u0131 de\u011fil, ayn\u0131 zamanda ili\u015fkileri ve potansiyel ba\u011flant\u0131lar\u0131 analiz etmek i\u00e7in ne kadar g\u00fc\u00e7l\u00fc oldu\u011funu g\u00f6sterir.<\/p>\n<h3>E-ticaret \u00dcr\u00fcn Envanteri: Hash Tablolar\u0131 ve Arama Algoritmalar\u0131<\/h3>\n<p>B\u00fcy\u00fck bir e-ticaret sitesi d\u00fc\u015f\u00fcn\u00fcn. Milyonlarca \u00fcr\u00fcn, anl\u0131k stok takibi, h\u0131zl\u0131 fiyat g\u00fcncellemeleri ve m\u00fc\u015fterilerin saniyeler i\u00e7inde arad\u0131klar\u0131 \u00fcr\u00fcne ula\u015fmas\u0131 gerekiyor. Burada <b>Hash Tablolar\u0131 (Python'da s\u00f6zl\u00fckler)<\/b> ve verimli <b>Arama Algoritmalar\u0131<\/b> devreye girer.<\/p>\n<p><b>Vaka Analizi: H\u0131zl\u0131 \u00dcr\u00fcn Bilgisi Eri\u015fimi ve Stok Y\u00f6netimi<\/b><br \/>\nHer \u00fcr\u00fcn\u00fcn benzersiz bir SKU (Stok Tutma Birimi) kodu veya \u00fcr\u00fcn ID'si bulunur. Bu ID'ler, \u00fcr\u00fcn detaylar\u0131na ve stok bilgilerine h\u0131zl\u0131 eri\u015fim sa\u011flamak i\u00e7in bir hash tablosunun anahtar\u0131 olarak kullan\u0131labilir. \u00dcr\u00fcn ID'sini anahtar, \u00fcr\u00fcn nesnesini (ad, fiyat, a\u00e7\u0131klama, stok adedi gibi bilgileri i\u00e7eren) de\u011fer olarak depolamak, bir \u00fcr\u00fcn\u00fcn bilgilerine <\/p>\n<pre><code>O(1)<\/pre>\n<p><\/code> ortalama zamanda eri\u015fmenizi sa\u011flar.<\/p>\n<pre><code>\nproduct_inventory = {\n    \"SKU123\": {\"name\": \"Ak\u0131ll\u0131 Telefon\", \"price\": 999.99, \"stock\": 50},\n    \"SKU456\": {\"name\": \"Kablosuz Kulakl\u0131k\", \"price\": 149.99, \"stock\": 120},\n    \"SKU789\": {\"name\": \"Ak\u0131ll\u0131 Saat\", \"price\": 299.99, \"stock\": 75}\n}\n\ndef get_product_details(sku):\n    return product_inventory.get(sku, \"\u00dcr\u00fcn bulunamad\u0131.\")\n\ndef update_stock(sku, quantity):\n    if sku in product_inventory:\n        product_inventory[sku][\"stock\"] -= quantity\n        print(f\"{sku} i\u00e7in stok g\u00fcncellendi. Yeni stok: {product_inventory[sku]['stock']}\")\n    else:\n        print(\"\u00dcr\u00fcn bulunamad\u0131.\")\n\nprint(get_product_details(\"SKU123\"))\n# \u00c7\u0131kt\u0131: {'name': 'Ak\u0131ll\u0131 Telefon', 'price': 999.99, 'stock': 50}\nupdate_stock(\"SKU123\", 5)\nprint(get_product_details(\"SKU123\"))\n# \u00c7\u0131kt\u0131: {'name': 'Ak\u0131ll\u0131 Telefon', 'price': 999.99, 'stock': 45}\n    <\/pre>\n<p><\/code><\/p>\n<p>M\u00fc\u015fteriler \u00fcr\u00fcnleri ad\u0131na veya a\u00e7\u0131klamas\u0131na g\u00f6re arad\u0131klar\u0131nda ise, bir <b>ters indeks (inverted index)<\/b> olu\u015fturulabilir. Bu, her kelimeyi bir anahtar olarak al\u0131p, o kelimeyi i\u00e7eren \u00fcr\u00fcnlerin listesini de\u011fer olarak tutan ba\u015fka bir hash tablosudur. Bu sayede, arama sorgusu geldi\u011finde ilgili kelimelerin \u00fcr\u00fcn listeleri h\u0131zl\u0131ca birle\u015ftirilerek sonu\u00e7lar sunulur. \u00d6rne\u011fin, \"Ak\u0131ll\u0131 Telefon\" arand\u0131\u011f\u0131nda, \"Ak\u0131ll\u0131\" kelimesinin ge\u00e7ti\u011fi \u00fcr\u00fcnler ile \"Telefon\" kelimesinin ge\u00e7ti\u011fi \u00fcr\u00fcnler taran\u0131r ve ortak olanlar veya en alakal\u0131lar s\u0131ralanarak m\u00fc\u015fteriye g\u00f6sterilir. Bu, tam metin arama motorlar\u0131n\u0131n temelinde yatan bir prensiptir ve <b>hash tablolar\u0131n\u0131n<\/b> ve <b>listelerin<\/b> birlikte ne kadar g\u00fc\u00e7l\u00fc olabilece\u011fini g\u00f6sterir.<\/p>\n<h3>Yol Bulma Uygulamalar\u0131: Dijkstra Algoritmas\u0131 ve Graf Traversal<\/h3>\n<p>Haritalar ve navigasyon uygulamalar\u0131 (Google Haritalar, Yandex Haritalar vb.) g\u00fcnl\u00fck hayat\u0131m\u0131z\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Bu uygulamalar\u0131n arkas\u0131nda, en k\u0131sa veya en h\u0131zl\u0131 yolu bulmak i\u00e7in karma\u015f\u0131k <b>graf algoritmalar\u0131<\/b> yatar.<\/p>\n<p><b>Vaka Analizi: En K\u0131sa Yol Problemi<\/b><br \/>\n\u015eehirler veya konumlar d\u00fc\u011f\u00fcmler (vertices), yollar ise kenarlar (edges) olarak modellenebilir. Her kenar\u0131n bir a\u011f\u0131rl\u0131\u011f\u0131 olabilir; bu a\u011f\u0131rl\u0131k mesafe, zaman, yak\u0131t maliyeti veya trafik yo\u011funlu\u011fu gibi fakt\u00f6rleri temsil edebilir. Ama\u00e7, ba\u015flang\u0131\u00e7 d\u00fc\u011f\u00fcm\u00fcnden hedef d\u00fc\u011f\u00fcme en d\u00fc\u015f\u00fck a\u011f\u0131rl\u0131kl\u0131 yolu (en k\u0131sa\/h\u0131zl\u0131 yolu) bulmakt\u0131r.<\/p>\n<p>Bu problem i\u00e7in en bilinen algoritmalardan biri <b>Dijkstra Algoritmas\u0131<\/b>'d\u0131r. Dijkstra, tek bir kaynaktan di\u011fer t\u00fcm d\u00fc\u011f\u00fcmlere olan en k\u0131sa yollar\u0131 bulan bir algoritmad\u0131r ve a\u011f\u0131rl\u0131klar\u0131n negatif olmad\u0131\u011f\u0131 durumlarda etkilidir. Algoritma, bir \u00f6ncelik kuyru\u011fu (priority queue) kullanarak ziyaret edilecek bir sonraki d\u00fc\u011f\u00fcm\u00fc verimli bir \u015fekilde se\u00e7er ve her d\u00fc\u011f\u00fcm i\u00e7in en k\u0131sa yolu dinamik olarak g\u00fcnceller.<\/p>\n<pre><code>\nimport heapq\n\ndef dijkstra(graph, start):\n    distances = {vertex: float('infinity') for vertex in graph}\n    distances[start] = 0\n    priority_queue = [(0, start)] # (mesafe, d\u00fc\u011f\u00fcm)\n\n    while priority_queue:\n        current_distance, current_vertex = heapq.heappop(priority_queue)\n\n        if current_distance > distances[current_vertex]:\n            continue\n\n        for neighbor, weight in graph[current_vertex].items():\n            distance = current_distance + weight\n            if distance < distances[neighbor]:\n                distances[neighbor] = distance\n                heapq.heappush(priority_queue, (distance, neighbor))\n    return distances\n\n# \u00d6rnek bir a\u011f\u0131rl\u0131kl\u0131 graf\ncity_graph = {\n    'A': {'B': 1, 'C': 4},\n    'B': {'A': 1, 'D': 2, 'E': 5},\n    'C': {'A': 4, 'F': 1},\n    'D': {'B': 2, 'G': 3},\n    'E': {'B': 5, 'F': 1, 'G': 2},\n    'F': {'C': 1, 'E': 1},\n    'G': {'D': 3, 'E': 2}\n}\n\nstart_city = 'A'\nshortest_paths = dijkstra(city_graph, start_city)\nprint(f\"{start_city} \u015fehrinden di\u011fer \u015fehirlere en k\u0131sa yollar: {shortest_paths}\")\n# \u00c7\u0131kt\u0131: {'A': 0, 'B': 1, 'C': 4, 'D': 3, 'E': 5, 'F': 5, 'G': 6}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnek, ger\u00e7ek d\u00fcnya karma\u015f\u0131k problemlerini \u00e7\u00f6zmek i\u00e7in graf veri yap\u0131lar\u0131 ve algoritmalar\u0131n ne kadar temel oldu\u011funu g\u00f6stermektedir. Yol bulma algoritmalar\u0131 sadece navigasyonda de\u011fil, ayn\u0131 zamanda a\u011f trafi\u011fi optimizasyonunda, lojistikte ve hatta genetik m\u00fchendisli\u011finde bile kullan\u0131lmaktad\u0131r. Bu t\u00fcr algoritmalar\u0131 anlamak, \u00f6l\u00e7eklenebilir ve verimli \u00e7\u00f6z\u00fcmler tasarlaman\u0131n kap\u0131lar\u0131n\u0131 a\u00e7ar.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131n temelden ileri d\u00fczeye kadar bir\u00e7ok y\u00f6n\u00fcn\u00fc ke\u015ffettik. Python'\u0131n basitli\u011fi ve zengin k\u00fct\u00fcphane deste\u011fi sayesinde, karma\u015f\u0131k problemleri zarif ve verimli \u00e7\u00f6z\u00fcmlerle ele alman\u0131n ne kadar kolay oldu\u011funu g\u00f6rd\u00fck. Dizilerden ba\u011fl\u0131 listelere, y\u0131\u011f\u0131nlardan kuyruklara ve hash tablolar\u0131na kadar temel veri yap\u0131lar\u0131n\u0131 Python'da nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frendik. Ard\u0131ndan, s\u0131ralama, arama ve \u00f6zyinelemeli\/iteratif yakla\u015f\u0131mlar gibi temel algoritmalar\u0131 inceledik. \u0130leri d\u00fczey konulara ge\u00e7erek a\u011fa\u00e7lar, graflar, Big O notasyonu ile performans analizi ve dinamik programlama gibi kritik tekniklere de\u011findik. Son olarak, bu kavramlar\u0131n sosyal medya ak\u0131\u015flar\u0131ndan e-ticaret envanter y\u00f6netimine ve yol bulma uygulamalar\u0131na kadar ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 vaka analizleriyle peki\u015ftirdik.<\/p>\n<p>Unutmay\u0131n, veri yap\u0131lar\u0131 ve algoritmalar sadece m\u00fclakat sorular\u0131n\u0131 ge\u00e7mek i\u00e7in de\u011fil, ayn\u0131 zamanda daha iyi, daha h\u0131zl\u0131 ve daha \u00f6l\u00e7eklenebilir yaz\u0131l\u0131mlar tasarlamak i\u00e7in vazge\u00e7ilmez bir temeldir. Python, bu yolculukta size e\u015flik edecek g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7t\u0131r. S\u00fcrekli pratik yaparak, farkl\u0131 problemler \u00fczerinde \u00e7al\u0131\u015farak ve kodunuzun performans\u0131n\u0131 analiz ederek bu alandaki yetkinli\u011finizi geli\u015ftirebilirsiniz. Bu cheat sheet, yolculu\u011funuzda size yard\u0131mc\u0131 olacak bir ba\u015flang\u0131\u00e7 noktas\u0131 ve s\u00fcrekli ba\u015fvurabilece\u011finiz bir kaynak olmay\u0131 hedeflemektedir. \u0130yi kodlamalar!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><b>1. Python DSA \u00f6\u011frenmek ne kadar s\u00fcrer?<\/b><\/p>\n<p>DSA \u00f6\u011frenmek ki\u015fiden ki\u015fiye de\u011fi\u015fir, ancak temel seviyeyi kavramak birka\u00e7 hafta s\u00fcrebilir. \u0130leri d\u00fczey konular ve ustala\u015fmak aylar hatta y\u0131llar alabilir. \u00d6nemli olan s\u00fcrekli pratik yapmak ve farkl\u0131 problem t\u00fcrleriyle kar\u015f\u0131la\u015fmakt\u0131r.<\/p>\n<p><b>2. Hangi veri yap\u0131lar\u0131 ve algoritmalar\u0131 en \u00e7ok \u00f6\u011frenmeliyim?<\/b><\/p>\n<p>Listeler (Diziler), S\u00f6zl\u00fckler (Hash Tablolar\u0131), A\u011fa\u00e7lar (\u00f6zellikle \u0130kili Arama A\u011fa\u00e7lar\u0131), Graflar, Y\u0131\u011f\u0131nlar ve Kuyruklar temel veri yap\u0131lar\u0131d\u0131r. Algoritma taraf\u0131nda ise S\u0131ralama (Merge\/Quick Sort), Arama (\u0130kili Arama), Graf Dola\u015f\u0131m\u0131 (BFS\/DFS) ve Dinamik Programlama s\u0131k\u00e7a kar\u015f\u0131n\u0131za \u00e7\u0131kacakt\u0131r.<\/p>\n<p><b>3. Python'da \u00f6zel veri yap\u0131lar\u0131 olu\u015fturmak yerine neden yerle\u015fik olanlar\u0131 kullanmal\u0131y\u0131m?<\/b><\/p>\n<p>Python'\u0131n yerle\u015fik veri yap\u0131lar\u0131 (list, dict, set) C ile optimize edilmi\u015ftir ve genellikle kendi implementasyonlar\u0131n\u0131zdan \u00e7ok daha h\u0131zl\u0131 ve g\u00fcvenilirdir. \u00d6zel implementasyonlar genellikle e\u011fitim ama\u00e7l\u0131 veya \u00e7ok spesifik performans gereksinimleri olan ni\u015f durumlar i\u00e7in gereklidir.<\/p>\n<p><b>4. DSA bilgisini geli\u015ftirmek i\u00e7in en iyi kaynaklar nelerdir?<\/b><\/p>\n<p>LeetCode, HackerRank gibi platformlarda problem \u00e7\u00f6zme prati\u011fi yap\u0131n. Coursera, edX gibi online platformlarda ilgili dersleri takip edin. \"Cracking the Coding Interview\" veya \"Grokking Algorithms\" gibi kitaplar\u0131 okuyun. Ayr\u0131ca, aktif olarak a\u00e7\u0131k kaynak projelerde yer almak da deneyim kazand\u0131r\u0131r.<\/p>\n<p><b>5. Big O Notasyonu neden bu kadar \u00f6nemli?<\/b><\/p>\n<p>Big O Notasyonu, algoritman\u0131z\u0131n girdi boyutu b\u00fcy\u00fcd\u00fck\u00e7e performans\u0131n\u0131n nas\u0131l \u00f6l\u00e7eklendi\u011fini anlaman\u0131z\u0131 sa\u011flar. Bu, \u00f6zellikle b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015fan veya y\u00fcksek performans gerektiren sistemler tasarlayan yaz\u0131l\u0131mc\u0131lar i\u00e7in kritik \u00f6neme sahiptir. Kodunuzun sadece \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 de\u011fil, ne kadar verimli \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 da g\u00f6sterir.<\/p>\n","protected":false},"excerpt":{"rendered":"Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-33892","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet<\/title>\n<meta name=\"description\" content=\"Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken ve projelerinizde en iyi performans\u0131 ararken size yol g\u00f6sterecek.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet\" \/>\n<meta property=\"og:description\" content=\"Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken ve projelerinizde en iyi performans\u0131 ararken size yol g\u00f6sterecek.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-08T11:01:18+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet\",\"datePublished\":\"2025-11-08T11:01:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/\"},\"wordCount\":4928,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/\",\"name\":\"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-08T11:01:18+00:00\",\"description\":\"Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken ve projelerinizde en iyi performans\u0131 ararken size yol g\u00f6sterecek.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet","description":"Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken ve projelerinizde en iyi performans\u0131 ararken size yol g\u00f6sterecek.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/","og_locale":"tr_TR","og_type":"article","og_title":"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet","og_description":"Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken ve projelerinizde en iyi performans\u0131 ararken size yol g\u00f6sterecek.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-08T11:01:18+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet","datePublished":"2025-11-08T11:01:18+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/"},"wordCount":4928,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/","url":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/","name":"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-08T11:01:18+00:00","description":"Python ile veri yap\u0131lar\u0131 ve algoritmalar\u0131 \u00f6\u011frenmek hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131! Bu kapsaml\u0131 rehber, DSA m\u00fclakatlar\u0131na haz\u0131rlan\u0131rken ve projelerinizde en iyi performans\u0131 ararken size yol g\u00f6sterecek.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-veri-yapilari-ve-algoritmalar-cheatsheet\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python ile Veri Yap\u0131lar\u0131 ve Algoritmalar: CheatSheet"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33892"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33892\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}