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.

ImportantKod çalışıyor, peki doğru yapıyı mı seçtiniz?

Öğ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.

Back to top