Veri Yapıları ve Programlama
Bu kitap Programlama Temelleri dersinde Python öğrenmiş öğrenciler için yazıldı. Python söz dizimini yeniden anlatmıyor. Bu derste veriyi nasıl düzenleyeceğinizi, bir iş için hangi yapıyı seçeceğinizi ve aynı işi yapan iki programdan birinin neden daha yavaş olabildiğini öğreneceksiniz.
Bir örnekle başlayalım. Bir okulda 10.000 öğrenci var. Öğrenci numarası verilince öğrencinin adını bulan bir program yazacaksınız. Öğrencileri bir listede tutup numarayı baştan sona ararsanız program çalışır, ama her aramada binlerce kayda bakabilir. Aynı öğrencileri, numarayı anahtar yapan bir sözlükte tutarsanız aradığınız öğrenciye neredeyse tek adımda ulaşırsınız. İki program da doğru cevabı verir. Aradaki fark, öğrenci sayısı ve arama sayısı arttıkça büyür.
Dönem boyunca bir problemle karşılaştığınızda şu soruları sormayı öğreneceksiniz:
- Veriyi hangi biçimde tutmalıyım?
- Sıra önemli mi?
- Tekrar eden değerleri korumalı mıyım?
- Bir anahtarla (ör. öğrenci numarasıyla) kayda hızlı ulaşmam gerekiyor mu?
- Elemanlar hangi sırayla eklenip çıkarılmalı?
- Arama ya da sıralama için hangi yaklaşım daha uygun?
- Veri büyüdükçe çözüm ne kadar yavaşlar?
Kitabı nasıl kullanmalısınız?
Bölümlerde yeni kavramlar çoğunlukla şu sırayla işlenir:
Tahmin Et → Çalıştır → Gözle → Karşılaştır → Değiştir → Gerekçelendir
Önce kodun ne yapacağını tahmin eder, sonra çalıştırıp sonucu tahmininizle karşılaştırırsınız. Ardından kodu değiştirir ve seçiminizi gerekçelendirirsiniz.
Web sürümündeki bazı kod kutularında Run Code düğmesi bulunur. Bu kutulara kod hücresi denir. Hücredeki kod tarayıcıda çalışır, bilgisayarınıza bir şey kurmanız gerekmez. Kodu Run Code düğmesiyle çalıştırırsınız. Bazı hücrelerde kodu değiştirebilirsiniz. Alıştırmalarda ipucu ve çözüm açabilir, kodunuzun doğru olup olmadığını otomatik olarak görebilirsiniz.
Öğrenci numarası örneğindeki gibi iki çözüm aynı doğru sonucu verebilir. Hangisinin daha uygun olduğu veriye ve yapılacak işe bağlıdır. Kodu çalıştırdıktan sonra seçtiğiniz veri yapısının ve algoritmanın neden uygun olduğunu açıklamaya çalışın.
Başlamadan önce
Koşulları, döngüleri, fonksiyonları, string’leri, listeleri, sözlükleri, kümeleri, temel dosya işlemlerini ve hata ayıklamayı başlangıç düzeyinde bildiğinizi varsayıyoruz. Gereken yerlerde kısa hatırlatmalar var, ama bu konular baştan anlatılmıyor.
Kendi sınıfınızı (class) yazmayı bilmeniz gerekmez. Yığın ve kuyruk gibi yapıları Python’ın hazır koleksiyonlarıyla ve standart kütüphanesiyle (ör. list, collections.deque) kullanacağız.
Haftalar
Aşağıda dönemin haftalık sırası var. Her bölümün başlığının üstündeki gezinme çubuğuyla önceki ya da sonraki haftaya geçebilir, bu sayfaya dönebilirsiniz.
Hafta 1
Veri yapısı, soyut veri türü ve maliyet sezgisi
Veri yapısı ile soyut veri türü (ADT) arasındaki fark. Veri büyüdükçe işlemlerin ne kadar yavaşladığını karşılaştırmak.
Hafta 2
Listeler, demetler, mutability ve aliasing
Liste ve demetlerin davranışı. Değiştirilebilirlik, iki değişkenin aynı listeyi göstermesi ve kopyalama.
Hafta 3
Sözlükler, kümeler, hash sezgisi ve yapı seçimi
Anahtarla erişim, benzersizlik, hash’in kabaca nasıl çalıştığı ve probleme uygun koleksiyonu seçmek.
Hafta 4
Kayıtlar ve iç içe veri yapıları
Alanları ve koleksiyonları bir arada kullanarak kayıtları düzenli tutmak.
Hafta 5
Yığın veri modeli
Son giren önce çıkar (LIFO), push/pop işlemleri ve yığının sık kullanıldığı yerler.
Hafta 6
Kuyruk ve deque
İlk giren önce çıkar (FIFO), çift uçlu kuyruk ve işlerin sırayla yapıldığı problemler.
Hafta 7
Doğrusal arama ve arama kalıpları
Elemanlara tek tek bakmak, arama koşulları ve aranan bulununca aramayı durdurmak.
Hafta 8
İkili arama
Sıralı veride arama alanını her adımda yarıya indirerek daha hızlı aramak.
Hafta 9
Temel sıralama tasarımı
Basit sıralama algoritmalarını adım adım yazmak, izlemek ve maliyetlerini karşılaştırmak.
Hafta 10
Python ile pratik sıralama
sorted, list.sort, key ve gerçek problemlerde neye göre sıralanacağını belirlemek.
Hafta 11
İşlem maliyetini ölçme ve yorumlama
Kâğıt üzerindeki maliyet hesabını küçük ölçümlerle karşılaştırmak ve sonuçları doğru yorumlamak.
Hafta 12
Veri işleme uygulaması
Bir CSV dosyasını okuyup filtrelemek, gruplamak, aramak, sıralamak ve özetlemek.
Hafta 13
Uygun veri yapısı ve algoritma seçimi
Aynı probleme farklı çözümler düşünmek ve seçimi gereksinimlere göre gerekçelendirmek.
Hafta 14
Bütünleştirme ve genel tekrar
Dönemde gördüğümüz veri yapılarını, algoritmaları ve maliyet hesabını tek bir problemde birlikte kullanmak.
İlk bölümde veri yapısı ile algoritma arasındaki farkı göreceğiz. O(1), O(n), O(n²) gibi gösterimlerle iki çözümü nasıl karşılaştıracağımızı da öğreneceğiz.