COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

Problem, matematik ve analiz · 03 / 53

Toplamlar, recurrence ve Master teoremi

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

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

Özyinelemeli kodu analiz ederken çağrı sayısını, alt problem boyutunu ve çağrı dışındaki işi ayır. Merge sort için T(n)=2T(n/2)+Θ(n): iki yarı çözülür, birleştirme doğrusal iştir. Çağrı ağacının her seviyesinde toplam Θ(n), yaklaşık log₂n seviye vardır; sonuç Θ(n log n).

Master teoremi T(n)=aT(n/b)+f(n) biçimindeki dengeli bölmelere uygulanır. f(n)'yi n^(log_b a) ile karşılaştır; yalnız uygun koşullarda üç klasik durumu kullan. Eşitsiz alt problemler, n−1 küçülmesi veya salınımlı maliyetler için teoremi zorlamak yerine açılım, yerine koyma ve indüksiyon kullan.

T(n)=T(n−1)+n açıldığında n+(n−1)+…+1 olur. T(n)=T(n/2)+1 ise her seviyede sabit iş yapar. Recurrence'ın sınır koşulunu belirt: T(1)=Θ(1). Kesirli boyutlar floor/ceil ile ele alınır; çoğu büyüme sonucunda bunlar sabit fark oluşturur fakat doğruluk kodunda ihmal edilmez.

Adım adım iz sürme

T(8)=2T(4)+8: seviyelerin iş toplamları 8,8,8; 8 yaprakta sabit iş. Bölmek hızlı görünse de birleştirme hesaba katılmalıdır.

Maliyet ve varsayımlar

2T(n/2)+n: Θ(n log n); T(n−1)+1: Θ(n); T(n/2)+n: Θ(n).

Ç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 halving_depth(n):
    if n < 1:
        raise ValueError("n must be positive")
    depth = 0
    while n > 1:
        n //= 2
        depth += 1
    return depth
assert halving_depth(8) == 3

KAVRADIĞINI KONTROL ET

Sıra sende

T(n)=3T(n/2)+n için hangi terim baskın?

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

n^(log₂3) yaklaşık n^1,585; doğrusal birleştirme bundan polinom derecede küçüktür. Klasik Master ilk durum: Θ(n^log₂3).

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.046J · Design and Analysis ↗Jeff Erickson · Algorithms ↗
İlerlemeden önce alıştırmayı çöz.