Veri Yapıları ve Programlama

Bu kitap, Python ile temel programlama becerilerini edinmiş öğrenciler için hazırlanmıştır. Burada Python sözdizimini baştan öğrenmek yerine veriyi nasıl düzenlediğimizin, bir işlem için hangi yapıyı seçtiğimizin ve aynı problemi çözen iki yaklaşımın neden farklı maliyetlere sahip olabildiğinin üzerinde duracağız.

Amaç veri yapılarını yalnızca adları ve tanımlarıyla ezberlemek değildir. Bir problemle karşılaştığınızda şu soruları sorabilmeniz önemlidir:

  • Veriyi hangi biçimde tutmalıyım?
  • Sıra önemli mi?
  • Tekrar eden değerleri korumalı mıyım?
  • Bir anahtar üzerinden hızlı erişime ihtiyacım var mı?
  • Elemanlar hangi sırayla eklenip çıkarılmalı?
  • Arama ya da sıralama için hangi yaklaşım daha uygun?
  • Çözüm veri büyüdükçe nasıl davranır?

Kitabı nasıl kullanmalısınız?

Bölümlerde yeni kavramlar mümkün olduğunca şu akışla işlenir:

Tahmin Et → Çalıştır → Gözle → Karşılaştır → Değiştir → Gerekçelendir

Web sürümündeki Python hücreleri tarayıcı içinde çalışır. Kodları Run Code ile çalıştırabilir, uygun hücrelerde kodu değiştirebilir, bazı alıştırmalarda ipucu ve çözüm açabilir ve otomatik geri bildirim alabilirsiniz.

ImportantKodun çalışması tek başına yeterli değildir

İki farklı çözüm aynı doğru sonucu verebilir. Asıl soru çoğu zaman hangi çözümün hangi koşulda daha uygun olduğudur. 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üler, fonksiyonlar, string’ler, listeler, sözlükler, kümeler, temel dosya işlemleri ve hata ayıklama konularını başlangıç düzeyinde biliyor olmanız beklenir. Gerekli yerlerde kısa hatırlatmalar yapılır; ancak bu konular yeniden baştan anlatılmaz.

Kullanıcı tanımlı sınıfları bilmeniz gerekmez. Yığın ve kuyruk gibi soyut veri türlerini öğrenirken önce Python’ın yerleşik koleksiyonlarından ve standart kütüphanesinden yararlanacağız.

Haftalar

Aşağıdaki sıra dönem boyunca izleyeceğimiz öğrenme yolunu gösterir. Bir bölümü tamamladıktan sonra bölüm başlığının üstündeki gezinme çubuğuyla önceki haftaya, sonraki haftaya veya bu sayfaya dönebilirsiniz.

Hafta 1

Veri yapısı, soyut veri türü ve maliyet sezgisi

Veri yapısı ile ADT ayrımı; işlem maliyetlerini karşılaştırmak için temel büyüme sezgisi.

Hafta 2

Listeler, demetler, mutability ve aliasing

Liste ve demetlerin davranışı; değiştirilebilirlik, referans paylaşımı ve kopyalama etkileri.

Hafta 3

Sözlükler, kümeler, hash sezgisi ve yapı seçimi

Anahtar tabanlı erişim, benzersizlik, hash sezgisi ve probleme uygun koleksiyon seçimi.

Hafta 4

Kayıtlar ve iç içe veri yapıları

Birden fazla alanı ve koleksiyonu birlikte kullanarak daha düzenli veri modelleri kurma.

Hafta 5

Yığın veri modeli

LIFO davranışı, push/pop işlemleri ve yığın mantığının tipik kullanım alanları.

Hafta 6

Kuyruk ve deque

FIFO davranışı, çift uçlu kuyruk ve sıraya dayalı işlem problemleri.

Hafta 7

Doğrusal arama ve arama kalıpları

Elemanları sırayla inceleme, arama koşulları ve erken sonlandırma kalıpları.

Hafta 8

İkili arama

Sıralı veri üzerinde arama aralığını yarıya indirerek daha verimli arama yapma.

Hafta 9

Temel sıralama tasarımı

Basit sıralama fikirlerini adım adım kurma, izleme ve maliyetlerini karşılaştırma.

Hafta 10

Python ile pratik sıralama

sorted, list.sort, key ve gerçek problemlerde sıralama ölçütü tasarlama.

Hafta 11

İşlem maliyetini ölçme ve yorumlama

Teorik maliyet sezgisini küçük ölçümlerle ilişkilendirme ve sonuçları doğru yorumlama.

Hafta 12

Veri işleme uygulaması

Koleksiyon, arama, sıralama ve özetleme işlemlerini tek bir veri işleme akışında birleştirme.

Hafta 13

Uygun veri yapısı ve algoritma seçimi

Aynı probleme alternatif çözümler üretme ve seçimleri gereksinimlere göre gerekçelendirme.

Hafta 14

Bütünleştirme ve genel tekrar

Dönem boyunca kullanılan veri yapıları, algoritmalar ve maliyet sezgisini birlikte uygulama.

İlk bölümde veri yapısı ile algoritma arasındaki farkı ve O(1), O(n), O(n²) gibi ifadelerin çözüm seçeneklerini karşılaştırırken nasıl kullanılabileceğini inceleyeceğiz.

Back to top