COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

Problem, matematik ve analiz · 01 / 53

Algoritma düşüncesi: Ne çözüyoruz?

Anla → iz sür → uygula → gerekçelendir

2 dk okuma · uygulama için ayrıca zaman ayır

Bir algoritma, izin verilen her girdi için tanımlı bir çıktı üreten sonlu bir işlem tarifidir. “Çalışıyor” demek birkaç örnekte doğru sonuç almak değildir. Önce girdi sözleşmesini yaz: negatif sayılar var mı, anahtarlar tekrarlanabilir mi, veri belleğe sığıyor mu, girdi sıralı mı? Sonra çıktının ne anlama geldiğini tanımla. En kısa yol dediğinde kenar sayısını mı, ağırlık toplamını mı küçültüyorsun?

Veri yapısı veriyi nasıl temsil ettiğini; soyut veri tipi (ADT) ise hangi işlemleri sunduğunu anlatır. Stack bir ADT'dir; dizi veya bağlı listeyle uygulanabilir. Uygulama tercihi davranış sözleşmesini değiştirmemeli ama maliyeti değiştirir. Algoritma ile temsil birlikte tasarlanır: aynı BFS, komşuluk matrisiyle ve listeyle farklı tarama maliyetine sahiptir.

Bu eğitimde Python 3 örnekleri yürütülebilir mantığı görünür kılar. Bellek dersinde C/C# farkları ayrıca belirtilir. Önce elle iz sür, sonra kodu çalıştır, en son maliyeti gerekçelendir. Okundu işareti yeterlilik belgesi değildir. Temel üniversite konuları ile ileri araştırma başlıklarını ayırıyoruz; tek bir kurs bütün bilgisayar bilimini veya mülakat başarısını garanti edemez.

Adım adım iz sürme

Sipariş kimlikleri [8, 3, 8] için “benzersizleri döndür” sözleşmesi sıra korunuyor mu sorusunu gerektirir. Küme {3,8} ile ilk görülme sırasındaki [8,3] aynı çıktı değildir.

Maliyet ve varsayımlar

Maliyet her zaman girdi büyüklüğü ve hesaplama modeliyle birlikte yazılır. Sayı adedi n ile sayının bit uzunluğu b aynı şey değildir.

Çalıştırılabilir örnek

Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.

Python 3
def unique_in_order(values):
    seen, result = set(), []
    for value in values:
        if value not in seen:
            seen.add(value)
            result.append(value)
    return result
assert unique_in_order([8, 3, 8]) == [8, 3]

İNTERAKTİF LABORATUVAR

Her kararı gör.

Gerçek algoritmayı adım adım incele. İkili arama için girdi önce sıralanır; vurgulanan indeksler sıralı diziye aittir.

30
71
112
183
244
305
426

Aralık [0, 6], orta 3: 18 ile 24 karşılaştırılıyor.

1 / 4

KAVRADIĞINI KONTROL ET

Sıra sende

Bu fonksiyon için boş girdi, tekrar ve hash edilemeyen girdiye ilişkin sözleşme yaz.

Çözümün mantığını göster

Boş girdi [] döner; ilk görülme sırası korunur. Elemanların hash edilebilir olması gerekir. Liste gibi hash edilemeyen elemanlar TypeError üretir. “Her nesneyle çalışır” sözleşmesi verilmemeli.

Bir adım ileri

  1. Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
  2. Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
  3. Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.

Temel kaynaklar ve ders notları

Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.

MIT 6.006 · Introduction to Algorithms ↗Pat Morin · Open Data Structures ↗
İlerlemeden önce alıştırmayı çöz.