28  Dinamik Programlama 4: Pseudopolinom, Subset Sum

DP finali — tamsayı alt problemler, rod cutting, OR-recurrence ile subset sum, pseudopolinom hiyerarşisi ve dört dersin toparlanması

NotOturum bilgisi

Bu, DP ünitesinin dördüncü ve son dersidir. Ders 26 (L17) subproblem expansion’ı (Floyd-Warshall, parantezleme, parmaklama) derinleştirdi; bu ders tamsayı (integer) alt problemleri ele alır: Fibonacci’deki gibi bir tamsayı girdinin daha küçük sürümlerine bakmak. İki örnek — rod cutting (\(O(L^2)\), gerçek polinom) ve subset sum (\(O(n \cdot T)\), pseudopolinom) — ile yeni bir kavrama varırız: pseudopolinom zaman. Subset sum ayrıca bir karar problemidir: recurrence’da min/max yerine OR kullanılır, “evet” certificate ile kolay kanıtlanır, “hayır” zordur — sonraki dersin (P/NP) habercisi. Ders dört DP dersinin diagonal (teknik-bazlı) toparlanmasıyla kapanır.

28.1 Bu Derste Ne Var?

DP serisinin finali (4/4, Erik Demaine). Odak: tamsayı (integer) alt problemler — Fibonacci’deki gibi, bir tamsayı girdinin daha küçük sürümlerine bakmak. Bu, yeni bir kavrama götürür: pseudopolinom zaman.

“pseudopolynomial is a pretty good running time.” — Demaine, 0:40

İki örnek (rod cutting, subset sum) + tüm DP’lerin diagonal (teknik-bazlı) toparlanması. Üç ana fikir:

  1. Tamsayı alt problem — integer girdiyi \(0 \ldots n\) arası daha küçük tamsayılara böl (rod cutting, subset sum).
  2. Karar problemi — “evet/hayır” çıktısı; recurrence’da min/max yerine OR.
  3. Pseudopolinom\(n \cdot T\) gibi süre: girdi boyutuna değil girdi sayılarına polinom; “polinom değil ama yeterince iyi”.
flowchart TD
    A["Ders 27 (L18): Dinamik Programlama 4 — Pseudopolinom, Subset Sum"] --> RC["Rod cutting — tamsayı alt problem"]
    RC --> RCa["x(ℓ) = max{ v(p) + x(ℓ−p) }<br/>L alt problem × O(L) → O(L²); örnek 3+2+2 = 33"]
    A --> RP["Rod cutting polinom mu? — EVET (gerçek)"]
    RP --> RPa["polinom = girdi BOYUTUNA polinom<br/>girdi L+1 kelime; O(L²) → polinom zaman"]
    A --> SS["Subset sum — KARAR problemi"]
    SS --> SSa["x(i,t) = x(i+1,t) OR x(i+1,t−aᵢ)<br/>min/max DEĞİL OR; n·T × O(1) → O(n·T); evet kolay hayır zor"]
    A --> PS["Pseudopolinom — poli DEĞİL"]
    PS --> PSa["T ≤ 2ʷ, w üst sınırı YOK → T = 2ⁿ → n·2ⁿ üstel<br/>strongly > weakly (log) > pseudo (sayı); T ≤ poly(n) → poli (radix)"]

    classDef root fill:#fef3c7,stroke:#b45309,stroke-width:3px,color:#1f2937
    classDef branch fill:#f3f4f6,stroke:#374151,stroke-width:2px,color:#1f2937
    classDef leaf fill:#ffffff,stroke:#9ca3af,stroke-width:1px,color:#1f2937
    class A root
    class RC,RP,SS,PS branch
    class RCa,RPa,SSa,PSa leaf
Şekil 28.1: Ders 27’nin (L18) kavram haritası: kök = Dinamik Programlama 4 (Demaine) — DP serisinin FİNALİ 4/4; tek tema TAMSAYI ALT PROBLEM, yani integer girdiyi 0 ile n arası daha küçük tamsayılara bölmek (Fibonacci’nin genellemesi). Dört dal — (1) Rod cutting tamsayı alt problem: L uzunluk çubuğu tamsayı parçalara böl, ilk parçanın boyu p tahmin et, x(ell) eşittir max p için v(p) artı x(ell eksi p), L alt problem çarpı O(L) seçim eşittir O(L kare); örnek L eşittir 7 değerler bir on onuc onsekiz yirmi otuzbir otuziki optimal uc arti iki arti iki eşittir onuc arti on arti on eşittir otuzuc. (2) Rod cutting polinom mu evet GERÇEK polinom: polinom zaman demek sürenin girdi BOYUTUNA polinom olması, girdi boyutu kelime cinsinden, rod girdisi L arti bir kelime, O(L kare) L arti bire polinom yani polinom zaman. (3) Subset sum KARAR problemi: n tamsayılık coklu küme A arti hedef T, herhangi alt küme T’ye toplanır mı, cıktı tek bit evet hayır, recurrence x(i,t) eşittir x(i arti bir, t) OR x(i arti bir, t eksi a-i) yani min max DEĞİL OR cünkü herhangi bir secenek evet verirse evet, n çarpı T alt problem çarpı O(bir) eşittir O(n çarpı T); evet’i kanıtlamak KOLAY certificate göster, hayır’ı kanıtlamak ZOR kısa yol yok NP habercisi. (4) Pseudopolinom poli DEĞİL: O(n çarpı T) girdi boyutu n arti bir kelime ama süre hem n hem T’ye bağlı, T bir kelimeye sığar w bit yani T küçük eşit iki üzeri w, w’nin üst sınırı YOK yani T eşittir iki üzeri n olabilir yani n çarpı T eşittir n çarpı iki üzeri n ÜSTEL; hiyerarşi strongly polinom sayıdan bağımsız büyük weakly polinom sayının LOG’una radix sort büyük pseudo polinom sayının KENDİSİNE subset sum; özel durum T küçük eşit poly(n) ise pseudo gerçek polinoma iner bu radix sort doğrusal koşulu. Birleştirici tema: dört DP dersi teknikleri kademeli tanıttı basit alt problem sonra coklu girdi ve kısıt sonra subproblem expansion sonra tamsayı alt problem ve pseudopolinom, DP ne bilsem işim biterdi sorusunu yerel kaba kuvvetle çözen güçlü bir tasarım çatısıdır.
İpucuBuilder Notu — subset sum = knapsack / bütçe-dağıtımının temeli

Subset sum, sırt çantası (knapsack), bütçe-dağıtım ve kaynak-tahsis problemlerinin çekirdeğidir: “verilen bir kapasite/hedefe hangi öğe alt kümesi sığar?” sorusu her yerde karşına çıkar. Aynı \(O(n \cdot T)\) DP tablosu, hedef yerine kapasite koyduğunda 0/1 knapsack’e dönüşür. Ama dikkat: bu süre pseudopolinomdur — \(T\) (veya kapasite) büyükse patlar.

  • İleriye → knapsack/bütçe: subset sum, knapsack ve bütçe-dağıtımının temelidir; çok boyutlu DP tablolarında kapasite/bütçe bir koordinattır.
  • İleriye → NP-tamlık: subset sum bir karar problemidir; “evet”i kanıtlamak kolay (certificate), “hayır”ı zor — sonraki dersin (P/NP) habercisi.
  • Geriye → radix sort (Ders 7, L5): pseudopolinom’un “poli olma” koşulu (\(T \le \text{poly}(n)\)), radix sort’un doğrusal çalışma koşuluyla aynıdır (sayılar poli-sınırlı) — aynı kavram iki yerde.
  • İleriye → OMSCS CS 6515: “sayılar küçükse hızlı” bilinci; pseudopolinom algoritmaların hangi durumda pratik olduğunu (T küçük) ayırt etmek graduate algoritmalarının temel refleksidir.

Tek cümle: Tamsayı girdiyi küçük sürümlerine bölerek DP yaparız; rod cutting \(O(L^2)\) gerçek polinom, ama subset sum \(O(n \cdot T)\) yalnız “pseudopolinom”dur (\(T = 2^n\) olabilir) — yine de sayılar küçükse mükemmel.

28.2 1. DP 4/4: Tamsayı Alt Problemler

İlk üç DP dersi sequence (prefix/suffix/substring), çoklu girdi (çarpım) ve subproblem expansion’ı kurdu. Bu ders, tamsayı girdi alt problemini derinleştirir: Fibonacci’de \(n\) verildi, \(0 \ldots n\) için çözdük. Aynı teknik rod cutting ve subset sum’da. SRTBOT aynı kalır; yeni soru: “bu süre polinom mu?”

28.3 2. Rod Cutting: Tamsayı Alt Problem

Problem. \(L\) uzunluğunda çubuk; \(v(\ell) = \ell\) uzunluğunda parçanın satış değeri. Çubuğu tamsayı parçalara bölüp toplam değeri maksimize et. Örnek: \(L = 7\), değerler \([1, 10, 13, 18, 20, 31, 32] \to\) optimal \(3 + 2 + 2 = 13 + 10 + 10 = 33\).

Çalışılan Örnek. S: \(x(\ell) = \ell\) uzunluk çubuğunun maksimum-değer bölünmesi, \(\ell = 0 \ldots L\). R: ilk kesilecek parçanın boyu \(p\)’yi tahmin et:

\[x(\ell) = \max\{\, v(p) + x(\ell - p) : p = 1 \ldots \ell \,\}\]

T: \(\ell\) artan. B: \(x(0) = 0\). O: \(x(L)\). Süre: \(L\) alt problem \(\times\, O(L)\) (\(p\) seçimi) \(= O(L^2)\). (DAG-en-uzun-yol olarak da görülebilir: değerleri negatifleyip en kısa yol.)

Şekil 28.2 bu örneği motor üzerinde somutlaştırır: optimal bölünme \(3 + 2 + 2\) (parça değerleri \(v(3) = 13\), iki kez \(v(2) = 10\)), toplam \(33\)rod_plan ve üstel brute_rod birebir aynı sonucu verir. Alt tablo \(x(\ell)\)’ı \(\ell = 0 \ldots 7\) için ve her hücrenin kazanan ilk parçasını (\(\text{first}(\ell)\)) gösterir; \(L\) alt problem \(\times\, O(L)\) rozeti \(O(L^2)\)’nin gerçek polinom olduğunu (girdi \(L + 1\) kelime) vurgular.

Şekil 28.2: Rod cutting: tamsayı alt problem DP (Demaine L18 §2-3 İMZA, 19:22). ÜST panel: 7-birim çubuk + optimal 3+2+2 kesim (amber ayraçlar), her parça v(p) değeriyle etiketli (v(3)=13, v(2)=10, v(2)=10), sağ kutuda toplam = 13+10+10 = 33; altta uzunluk-değer çizelgesi v(1..7) (kullanılan p=2,3 amber vurgulu). ALT panel: x(ℓ) DP tablosu ℓ=0..7 + kazanan ilk parça first(ℓ) satırı; taban x(0)=0 soluk, hedef x(7)=33 amber; recurrence kutusu x(ℓ) = max{ v(p) + x(ℓ−p) : p=1..ℓ }; O(L²) rozeti ‘L alt problem × O(L) = O(L²), GERÇEK polinom (girdi L+1 kelime · Demaine 19:22)’. Veri MOTORDAN (assert): build_rod_example == (7, [0,1,10,13,18,20,31,32]); rod_plan == ([3,2,2], 33); brute_rod == 33; x == [0,1,10,13,20,23,31,33]; first == [0,1,2,3,2,2,6,2]; parça değerleri [13,10,10] toplam 33.

28.4 3. Rod Cutting Polinom mu?

Evet — gerçek polinom (strongly polynomial). “Polinom zaman” = sürenin girdi boyutuna polinom olması. Girdi boyutu kelime (word) cinsinden ölçülür.

“polynomial time means that the running time is polynomial in the size of the input.” — Demaine, 19:22

Rod cutting girdisi: bir sayı \(L\) + \(L\) sayılık değer dizisi \(= L + 1\) kelime. \(O(L^2)\), \(L + 1\)’e polinomdur \(\to\) polinom zaman. ✓ ( Şekil 28.2’in \(O(L^2)\) rozeti bu sonucu birebir taşır: \(L\) alt problem \(\times\, O(L)\) seçim.)

28.5 4. Subset Sum: Karar Problemi

Problem. \(n\) tamsayılık çoklu-küme (multiset) \(A\) + hedef \(T\). Herhangi bir alt küme \(T\)’ye toplanır mı? Bu bir karar problemi — çıktı tek bit: evet/hayır. Örnek: \(A = \{2, 5, 7, 8, 9\}\), \(T = 21 \to\) evet (\(5 + 7 + 9\)); \(T = 25 \to\) hayır.

“this is what we call a decision problem… we’re just interested in a yes or no answer.” — Demaine, 27:10

İlginç: “evet”i kanıtlamak kolay — alt kümeyi göster; “hayır”ı kanıtlamak için bilinen kısa bir yol yok. Sonraki dersin habercisi.

“there’s no succinct way as far as we know to prove to someone that the answer is no.” — Demaine, 26:49

Şekil 28.3 bu asimetriyi motor üzerinde gösterir: \(T = 21\) için subset_sum_certificate certificate \(\{5, 7, 9\}\) döndürür (\(5 + 7 + 9 = 21\)); bir doğrulayıcı bunu polinom zamanda kontrol eder (verify_subset_certificate \(\to\) True). Yanlış bir certificate \(\{5, 7, 8\}\) (\(= 20 \neq 21\)) de hızla reddedilir. Ama \(T = 25\) için certificate None’dır — hiçbir alt küme \(25\) vermez ve bunu kısa yoldan kanıtlamanın bilinen yolu yok, tek kesinlik \(2^5 = 32\) alt kümenin hepsini taramak. Bu asimetri, Ders 28’in (L19) NP sınıfının habercisidir.

Şekil 28.3: Karar problemi asimetrisi: «EVET»i doğrulamak kolay, «HAYIR»ı zor (Demaine L18 §4, 27:10 + 26:49; NP habercisi → Ders 28/L19). SOL panel ‘EVET kanıtı KOLAY’: A = {2,5,7,8,9} 5 madalyon, certificate {5,7,9} amber seçili; doğrulayıcı kutusu ‘5+7+9 = 21 ✓ → polinom zamanda KONTROL (Demaine 27:10)’; yanlış-cert {5,7,8} → 20 ≠ 21 kırmızı REDDET (doğrulayıcı yine hızlı yakalar). SAĞ panel ‘HAYIR kanıtı YOK’: T=25 büyük kırmızı soru kutusu ‘hiçbir alt küme 25 vermez, kısa ispat yok, certificate = None (Demaine 26:49)’; 2⁵ = 32 alt kümenin mini-ızgarası (hepsi ✗); alt rozet → Ders 28 (L19): NP — EVET doğrulanabilir, HAYIR değil. Veri MOTORDAN (assert): build_subset_example == ([2,5,7,8,9], 21, 25); subset_sum(A,21)[0] is True, certificate == [5,7,9] (toplam 21); subset_sum(A,25)[0] is False, certificate is None; verify_subset_certificate(A,21,[5,7,9]) is True; verify_subset_certificate(A,21,[5,7,8]) is False (5+7+8=20); 2⁵ = 32.

28.6 5. Subset Sum Recurrence: OR

Çalışılan Örnek. S: \(x(i, t) = A[i:]\) sonekinin herhangi bir alt kümesi \(t\)’ye toplanır mı? (\(0 \le i \le n\), \(0 \le t \le T\)). \(a_i\)’yi kümeye koy ya da koyma — iki seçenek:

\[x(i, t) = x(i+1, t) \;\textbf{ OR }\; \bigl( x(i+1, t - a_i) \;:\; a_i \le t \bigr)\]

(İkinci terim yalnız \(a_i \le t\) ise geçerlidir.)

İlk: \(a_i\) dışarıda. İkinci: \(a_i\) içeride \(\to\) kalan \(t - a_i\)’ye toplanmalı; \(a_i \le t\) koşulu negatif \(t\)’yi önler. Optimizasyon değil \(\to\) min/max değil, OR. T: \(i\) azalan. B: $x(n, 0) = $ evet; $x(n, t ) = $ hayır. O: \(x(0, T)\). \(2^n\) alt kümeyi, yerel ikili seçimlerle ve memoization ile tararız (alt problemler “toplamı \(t\) olan” tüm alt kümeleri tek değere çöker).

Süre: \(n \cdot T\) alt problem \(\times\, O(1) = O(n \cdot T)\). (“Evet” durumunda ebeveyn işaretçileriyle alt küme de bulunur.)

Şekil 28.4 bu recurrence’ın özünü, bir optimizasyon DP’siyle (bowling) yan yana koyar: yapı aynı (yerel ikili seçim + memoize), değişen yalnız birleştiricidir — bowling max ile sayı (motor: \(B(0) = 109\)), subset sum OR ile tek bit (\(x(0, 6) = x(1, 6)\) False \(\text{OR}\ x(1, 3)\) True \(=\) True) üretir.

Şekil 28.4: Karar vs optimizasyon recurrence: subset sum OR-birleştirici tek bit, bowling max-birleştirici sayı (Demaine L18 §5). SOL sütun ‘OPTİMİZASYON (çoğu DP)’: bowling B(i) = max(atla, tek, çift); çıktı SAYI 109; min/max SAYILARI birleştirir. SAĞ sütun ‘KARAR (subset sum)’: gerçek hücre x(0,6) = x(1,6)=HAYIR OR x(1,3)=EVET; çıktı TEK BİT EVET; OR BOOLEANLARI birleştirir (Python any). ORTA köprü rozeti ‘yapı AYNI: yerel ikili seçim + memoize; değişen yalnız BİRLEŞTİRİCİ’. Alt not: EVET’te ebeveyn iziyle alt küme de çıkar → certificate [3,3] (toplam 6 = T). Veri MOTORDAN (assert): build_subset_small_example == ([3,4,3,1], 6); subset_sum(A,6)[0] is True; x(0,6) = x(1,6)=False OR x(1,3)=True = True; a₀=3, t−a₀=3; certificate == [3,3] toplam 6; build_bowling_example == [1,9,9,2,−5,−5]; bowling_bottom_up B[0] == 109.

Şekil 28.5 aynı DP’yi build_subset_small_example (\(A = \{3, 4, 3, 1\}\), \(T = 6\)) üzerinde tam tabloyla gösterir: satırlar \(i = 0 \ldots 4\), sütunlar \(t = 0 \ldots 6\). Kritik detay — yalnız memoization’ın gerçekten sorduğu hücreler doludur (motor memo’sundan): \(16\) hücre, \(n \cdot T = 4 \cdot 6 = 24\) olası alt problemin ve \(6 \times 22\) üst-sınırın çok altında — memoization yalnız gerekeni çözer (pseudopolinom tanığı). Certificate yolu \([3, 3]\) kalın amber “koy” / soluk “koyma” oklarıyla izlenir.

Şekil 28.5: Subset Sum: x(i,t) OR-recurrence memoization tablosu (Demaine L18 §5 İMZA). A = {3,4,3,1}, T = 6. Satırlar i=0..4 (taban i=4 EN ALTTA, satır etiketi A[i:] soneki), sütunlar t=0..6. SADECE memoization’ın gerçekten sorduğu hücreler dolu (motor memo’sundan, 16 hücre); kalanlar soluk kesik ‘hiç sorulmadı’ — memoization yalnız gerekeni çözer (pseudopolinom tanığı). True = amber ✓, False = slate ✗. Cevap x(0,6) büyük amber çerçeve = EVET. Certificate yolu [3,3]: koy adımları kalın amber ok (koy a₀=3 t:6→3, koy a₂=3 t:3→0), koyma adımları soluk slate ok (koyma a₁=4, koyma a₃=1). Recurrence kutusu: x(i,t) = x(i+1,t) OR x(i+1,t−aᵢ) [aᵢ≤t] — karar problemi → min/max DEĞİL OR. Alt rozet: n·T = 4·6 = 24 alt problem × O(1) = O(n·T) pseudopolinom. Veri MOTORDAN (assert): build_subset_small_example == ([3,4,3,1], 6); subset_sum True, memo[(0,6)] True, memo[(4,0)] True; certificate == [3,3] toplam 6; yol [(0,6)PUT3,(1,3)skip4,(2,3)PUT3,(3,0)skip1]; memo hücre sayısı 16.

28.7 6. Subset Sum Polinom Değil: Pseudopolinom

\(O(n \cdot T)\) polinom değildir. Girdi boyutu \(= n + 1\) kelime, ama süre hem \(n\)’e hem \(T\)’ye bağlı. \(T\) bir kelimeye sığar (\(w\) bit) \(\to T \le 2^w\). Word-RAM’de \(w \ge \log n\) garantilidir ama \(w\)’nin üst sınırı yoktur\(w = n\) bile makul (\(n\) sayı, her biri \(n\)-bit). O zaman \(T = 2^n \to n \cdot T = n \cdot 2^n\) üstel.

Yine de “yeterince iyi”: pseudopolinom.

28.8 7. Pseudopolinom Tanımı ve Hiyerarşi

Pseudopolinom zaman: girdi boyutuna ve girdi sayılarına polinom (sabit dereceli). \(O(n \cdot T)\) böyledir: $n T = $ boyut \(\times T\), sabit derece. Pseudopoli ama poli değil.

Önemli özel durum: girdi sayıları boyutun polinomu ise (örn. \(T \le \text{poly}(n)\)) \(\to\) pseudopoli polinoma iner. Bu, radix sort’un doğrusal çalışma koşuluyla aynıdır.

“this is the condition when radix sort runs in linear time.” — Demaine, 50:50

Hiyerarşi (iyiden kötüye): strongly polynomial (girdi sayılarından bağımsız) \(\to\) weakly polynomial (sayıların log’una polinom — radix sort) \(\to\) pseudopolynomial (sayıların kendisine polinom — subset sum). “log of an exponential is polynomial” olduğundan weakly poli neredeyse poli kadar iyidir.

“log of an exponential is polynomial.” — Demaine, 53:41

Şekil 28.6 bu üç kademeyi hem merdiven şemasıyla hem de büyüme grafiğiyle gösterir: \(n = 20\), \(T = 2^{20}\) için strongly (\(n^2 = 400\)), weakly (\(n \cdot \log_2 T = 400\)) ve pseudo (\(n \cdot T \approx 2{,}1 \times 10^7\)) — pseudo, weakly/strongly’den \(\sim 52\) bin kat büyük. Sağ panel \(w\) (bit) arttıkça pseudo’nun \(n \cdot 2^w\) üstel patlamasını (\(T \le 2^w\), \(w\)’nin üst sınırı yok \(\to T = 2^n\)), strongly’nin sabit ve weakly’nin doğrusal kaldığını çizer; radix koşulu (\(T \le \text{poly}(n)\)) rozetiyle.

Şekil 28.6: Polinom hiyerarşisi: sayılar nasıl ölçülür? — strongly · weakly · pseudo (Demaine L18 §7 İMZA, 53:41 + 50:50). SOL panel üç-kademe merdiven (sayılara bağımlılık artar ↑): (1) STRONGLY polynomial — sayıların DEĞERİNDEN bağımsız, yalnız girdi kelime sayısının polinomu; merge sort · BFS · rod cutting O(L²); n² = 400. (2) WEAKLY polynomial — sayıların LOG’una (bit uzunluğu w) doğrusal; radix sort · ağırlıklı Dijkstra; n·log₂T = 20·20 = 400; yan not ‘log of an exponential is polynomial, log(2ⁿ)=n’ (Demaine 53:41). (3) PSEUDOpolynomial — sayıların KENDİSİNE doğrusal → bit uzunluğuna ÜSTEL; subset sum O(n·T) · knapsack; n·T = 20·1.048.576 = 20.971.520. SAĞ panel T büyüdükçe süre (log-y), x = w (bit) 8..24: strongly n² sabit, weakly n·w doğrusal, pseudo n·2ʷ ÜSTEL patlama (amber); ‘T ≤ 2ʷ, w üst sınırı YOK → T = 2ⁿ → n·2ⁿ üstel’ kutusu + alt rozet ‘T ≤ poly(n) ise pseudo → gerçek polinom (radix koşulu, Demaine 50:50)’. Veri FORMÜLDEN (assert): n=20, T=2²⁰=1.048.576; strongly=400, weakly=400, pseudo=20.971.520; pseudo/weakly=52428.8; her w için pseudo=n·2ʷ üstel.

28.9 8. DP Karakterizasyonu: Alt Problem Tipleri

Dört dersteki tüm DP’ler, alt problem tipine göre:

  • Prefix/Suffix: bowling, LCS (iki sonek), LIS.
  • Substring: değişen para oyunu (iki uçtan), parantezleme (ortadan).
  • Tamsayı: Fibonacci, rod cutting, subset sum (+ Floyd-Warshall, vertex-prefix olarak).
  • Vertex: DAG SP, Bellman-Ford, Floyd-Warshall (en kısa yol DP’leri).

Pseudopoli olanlar: rod cutting (aslında poli), subset sum (pseudopoli) — tamsayı alt problemli olanlar.

28.10 9. DP Karakterizasyonu: Constraint / Branching / Combination

  • Constraint/expansion: non-expansive (LIS: kısıt ekledi ama alt problem sayısı sabit); expansive (para oyunu \(\times 2\), parmaklama \(\times F\), Bellman-Ford \(\times V\)).
  • Branching (özyineleme-dışı iş): sabit (Fibonacci, bowling, LCS, para oyunu, Floyd-Warshall, subset sum); derece-bazlı (DAG SP, Bellman-Ford \(\to E\) terimi); doğrusal (LIS, parantezleme, rod cutting).
  • Combination: tek-en-iyi (çoğu \(\to\) DAG en kısa yol); çoklu-birleştirme (Fibonacci toplar, Floyd-Warshall yol birleştirir, parantezleme iki parçayı çarpar/toplar).
  • Original problem: tek alt problem (çoğu) vs çoklu (DAG SP, LIS, Bellman-Ford, Floyd-Warshall’da hepsinin min/max’ı).

Şekil 28.7 bu iki bölümün (\(\S 8\) alt problem + \(\S 9\) constraint/branching/combination) diagonal toparlanmasını tek tabloda dizer: \(11\) DP örneği satır, dört sınıflama ekseni sütun. Pseudopoli satırlar (rod cutting, subset sum) amber vurgulu; alt şerit dört dersin kademeli tanıtımını (DP1 = Ders 23 \(\to\) DP4 = Ders 27) gösterir.

Şekil 28.7: DP taksonomisi: dört dersin diagonal toparlanması — her örnek alt problem × constraint × branching × combination ekseninde (Demaine L18 §8-9 İMZA, 1:03:02). 11 DP örneği satır; 4 sınıflama sütunu. Alt problem tipi renk kodlu (prefix/suffix · substring · tamsayı amber · vertex yeşil); constraint (non-exp vs expansive ×k amber); branching (sabit · derece · doğrusal); combination (tek-en-iyi · çoklu amber). Pseudopoli satırlar AMBER vurgu: rod cutting (GERÇEK poli O(L²), girdi L+1 kelime) ve subset sum (PSEUDO poli O(n·T), T=2ⁿ olabilir) — ikisi de tamsayı. Ders rozetleri DP1=Ders 23, DP2=Ders 24, DP3=Ders 26, DP4=Ders 27 (araya Ders 25 = PS8). Alt şerit: dört ders KADEMELİ tanıttı — DP1 temel → DP2 çoklu+kısıt → DP3 expansion → DP4 tamsayı+pseudo (Demaine 1:03:02). Veri L18 §8-9 BİREBİR (assert): 11 örnek; pseudopoli = {rod cutting, subset sum}; expansive = {para oyunu, parantezleme, Floyd-Warshall, Bellman-Ford}; çoklu-birleştirme = {Fibonacci, Floyd-Warshall, parantezleme}; derece = {DAG SP, Bellman-Ford}.

28.11 10. Dört Dersin Özeti

Dört DP dersi, teknikleri kademeli tanıttı: basit alt problemler (DP1) \(\to\) çoklu girdi + kısıt (DP2) \(\to\) subproblem expansion (DP3) \(\to\) tamsayı alt problem + pseudopolinom (DP4). Her ders bir önceki üzerine yeni bir araç ekledi — basit branching’ten karmaşık birleştirmeye.

“these four dp lectures were all about showing you these main techniques of dynamic programming.” — Demaine, 1:03:02

Özü: alt problemleri (sequence/integer/vertex) tanımla, kısıt/expansion ile state hatırla, “ne bilsem işim biterdi?” sorusunu yerel kaba kuvvetle dene, memoize et — DP çok güçlü bir tasarım çatısıdır. ( Şekil 28.7 bu kademeli yolculuğu DP1 \(\to\) DP4 alt şeridinde özetler.)

28.12 Bu Dersin Özeti

  1. Tamsayı alt problem: integer girdiyi \(0 \ldots n\)’ye böl (Fibonacci, rod cutting, subset sum).
  2. Rod cutting: \(x(\ell) = \max\{v(p) + x(\ell - p)\}\); \(O(L^2)\), gerçek polinom (girdi \(L + 1\) kelime).
  3. Subset sum: karar problemi; \(x(i, t) = \text{OR}(\text{koyma}, \text{koy})\); \(O(n \cdot T)\).
  4. Karar problemi: min/max yerine OR; “evet” kolay kanıt, “hayır” zor.
  5. Pseudopolinom: girdi boyutu \(\times\) sayılara polinom; \(T = 2^n\) olabilir \(\to\) poli değil.
  6. Hiyerarşi: strongly \(>\) weakly (log sayı, radix sort) \(>\) pseudopoly (sayı, subset sum).
  7. DP karakterizasyonu: alt problem (prefix/substring/integer/vertex) \(\times\) constraint \(\times\) branching \(\times\) combination.
ÖnemliTek Bir Cümle

DP’nin son aracı tamsayı alt problemdir: integer girdiyi küçük sürümlerine böleriz; rod cutting \(O(L^2)\) gerçek polinom ama subset sum \(O(n \cdot T)\) yalnız pseudopolinomdur (\(T = 2^n\) olabilir) — yine de sayılar küçükse mükemmel, tıpkı radix sort gibi.

28.13 Kontrol Soruları

Cevap: Çoğu DP optimizasyon problemidir (min/max) — recurrence’ın dışına min veya max koyarız. Subset sum ise karar problemi: çıktı tek bit (evet/hayır), bir değer değil. \(a_i\)’yi koyma (\(x(i+1, t)\)) ya da koy (\(x(i+1, t - a_i)\)) seçeneklerinden herhangi biri “evet” verirse cevap “evet”tir \(\to\) birleştirici OR (Python’da any). Min/max sayıları, OR ise booleanları birleştirir. (Yine de yapı aynı: alt problemleri tanımla, yerel ikili seçimi kaba kuvvetle dene, memoize et.)

Cevap: Polinom zaman \(=\) sürenin girdi boyutuna (kelime sayısı) polinom olması. Rod cutting girdisi \(L + 1\) kelime; \(O(L^2)\), \(L\)’ye polinom \(\to\) polinom. Subset sum girdisi \(n + 1\) kelime; süre \(O(n \cdot T)\) hem \(n\)’e hem \(T\)’ye bağlı. \(T\) bir kelimeye sığar (\(w\) bit) \(\to T \le 2^w\); \(w\)’nin üst sınırı yoktur (\(w = n\) bile olabilir) \(\to T = 2^n \to n \cdot T = n \cdot 2^n\) üstel. Yani \(T\) girdi boyutuyla sınırlı değil; süre girdi boyutuna polinom değil. (Fark: \(L\) hem girdi boyutu hem süre parametresi; \(T\) yalnız bir girdi sayısı, boyut değil.)

Cevap: Pseudopolinom \(=\) sürenin girdi boyutuna ve girdideki sayıların kendisine polinom olması (sabit derece). \(O(n \cdot T)\) böyledir: \(n\) (boyut) \(\times T\) (sayı). Gerçek polinom değildir çünkü \(T\) üstel büyüyebilir. Özel durum: girdi sayıları boyutun polinomuysa (\(T \le \text{poly}(n)\)), pseudopolinom polinoma iner. Bu, radix sort’un doğrusal çalıştığı koşulla aynıdır (sayılar poli-sınırlı). Hiyerarşi: strongly poly (sayıdan bağımsız) \(>\) weakly poly (sayının log’u, radix sort) \(>\) pseudopoly (sayının kendisi, subset sum). “Sayılar küçükse hızlı” — pratikte çoğu zaman yeterince iyi.

Cevap: DP1 (SRTBOT + memoization): temel çerçeve, basit alt problemler (Fibonacci, bowling), prefix/suffix/substring. DP2: çoklu girdi (alt problem çarpımı, LCS), alt problem kısıtı (LIS), oyunlarda min/max (para oyunu). DP3: subproblem expansion (Floyd-Warshall vertex-prefix, parantezleme min+max, parmaklama state). DP4: tamsayı alt problem + pseudopolinom (rod cutting, subset sum). Her ders bir öncekine yeni bir araç ekledi: basit branching’ten derece/doğrusal branching’e, tek-en-iyi birleştirmeden çoklu birleştirmeye. Sıra, DP’nin tüm ana tekniklerini metodik biçimde göstermek için seçildi.

28.14 Egzersizler

Egzersiz 1. Rod cutting’i \(L = 7\), \([1, 10, 13, 18, 20, 31, 32]\) üzerinde \(x(\ell)\) tablosuyla elle çöz; optimal bölünmeyi (\(33\)) bul.

Egzersiz 2. Subset sum’ı Python’da yaz (\(x(i, t)\), OR recurrence); \(A = \{3, 4, 3, 1\}\), \(T = 6\) için tabloyu doldur ve ebeveyn izinden alt kümeyi çıkar.

Egzersiz 3. Subset sum’ın neden \(O(n \cdot T)\) olduğunu ve \(T = 2^n\) durumunda neden üstel olduğunu input-size argümanıyla açıkla.

Egzersiz 4. Counting sort ve direct-access-array’in de neden pseudopolinom olduğunu (\(u\)’ya bağımlılık) yaz; radix sort’un neden weakly polynomial olduğunu açıkla.

Egzersiz 5. Gördüğün her DP dersi örneğini (Fibonacci, bowling, LCS, LIS, para oyunu, parantezleme, Floyd-Warshall, rod cutting, subset sum) alt problem tipine (prefix/suffix/substring/integer/vertex) göre sınıfla.

28.15 Sonraki Ders İçin Hazırlık

UyarıSonraki: Ders 28 (L19) — Hesaplama Karmaşıklığı (P, NP, indirgemeler)

Ders 28 (L19): Hesaplama Karmaşıklığı (P, NP, indirgemeler). Erik Demaine ile, “hangi problemler verimli çözülebilir?” sorusuna geçiyoruz: P (polinom-zaman çözülebilir), NP (çözümü polinom-zamanda doğrulanabilir), NP-tamlık ve indirgeme. Subset sum’ın “evet kolay, hayır zor” gözlemi tam buraya bağlanır. (L19, Ders 30 = Quiz 3 Gözden Geçirme kapsamında değil; tanımlarını final sınavında kullanırsın.)

Ders 28 Öncesi Yapılacak:

  • Bu dersin egzersizlerini, özellikle Egzersiz 2 (subset sum) ve 5 (DP sınıflama) çöz.
  • Pseudopolinom hiyerarşisini (strongly/weakly/pseudo) ezberden anlat.
  • Ana cümleyi tekrar oku: “Sayılar küçükse pseudopolinom mükemmeldir; \(T = 2^n\) olabileceğinden poli değildir.”

28.16 Anahtar Kavramlar (Cheat Sheet)

Kavram Tanım Sayfada
Tamsayı alt problem Integer girdiyi \(0 \ldots n\)’ye böl (Fibonacci, rod, subset) Böl. 1
Rod cutting \(x(\ell) = \max\{v(p) + x(\ell - p)\}\); \(O(L^2)\) Böl. 2
Polinom zaman Süre girdi boyutuna (kelime) polinom Böl. 3
Karar problemi Evet/hayır çıktı; recurrence’da OR Böl. 4-5
Subset sum \(x(i, t) = \text{OR}(\text{koyma}, \text{koy})\); \(O(n \cdot T)\) Böl. 5
Pseudopolinom Boyut \(\times\) sayılara polinom; \(T = 2^n\) olabilir Böl. 6-7
Hiyerarşi strongly \(>\) weakly (log) \(>\) pseudo (sayı) Böl. 7
DP karakterizasyonu alt problem \(\times\) constraint \(\times\) branching \(\times\) combination Böl. 8-9

28.17 Builder ve OMSCS Bağlantıları

İpucu6 köprü

Bu dersin iki örneği — tamsayı alt problemli rod cutting ve subset sum — ve pseudopolinom kavramı, sistem mühendisliği, kriptografi ve graduate algoritmalarındaki çok sayıda araca bağlanır; köprülerin özeti:

  1. Subset sum \(\to\) knapsack, bütçe-dağıtım, kaynak tahsisi; NP-tamlık (kriptografi — subset-sum tabanlı şifreleme tarihçesi).
  2. Karar problemi + sertifika \(\to\) NP tanımı; “evet kolay, hayır zor” \(\to\) sonraki ders (P/NP). Certificate verifier (verify_subset_certificate) NP Tanım-2’nin ta kendisidir.
  3. Pseudopolinom \(\to\) “sayılar küçükse hızlı”; gerçek sistemde \(T\) sınırlıysa pratik — kapasite/bütçe küçük tutulduğunda DP tablosu patlamaz.
  4. Pseudopoli \(=\) radix sort koşulu \(\to\) sayı-sınırı bilinci; pseudopolinom’un poli-olma koşulu (\(T \le \text{poly}(n)\)), radix sort’un doğrusal koşuluyla aynı kavramdır — iki yerde çift-kayıt aynı fikrin.
  5. DP diagonal review \(\to\) tasarım deseni kütüphanesi; OMSCS CS 6515’in DP omurgası — alt problem \(\times\) constraint \(\times\) branching \(\times\) combination ekseni graduate algoritmalarında tekrar tekrar karşına çıkar.
  6. Tamsayı alt problem \(\to\) çok boyutlu DP tabloları; bütçe/kapasite parametreleri bir koordinat olarak eklenir (state \(=\) kapasite). OMSCS pseudo-bilinç: bir DP’nin pseudopolinom mu gerçek polinom mu olduğunu ayırt etmek — graduate seviyede “bu algoritma büyük girdide patlar mı?” refleksinin temelidir.

ÖnemliTek bir şey alıp gideceksen

DP’nin son aracı tamsayı alt problemdir — integer girdiyi küçük sürümlerine böl. Ama dikkat: rod cutting \(O(L^2)\) gerçek polinomken, subset sum \(O(n \cdot T)\) yalnız pseudopolinomdur, çünkü \(T\) bir kelimeye sığsa da \(2^n\) kadar büyük olabilir. Pseudopolinom “polinom değil ama yeterince iyi”: sayılar küçükse (radix sort koşulu) gerçek polinoma iner. Karar problemlerinde min/max yerine OR kullanırsın. Dört DP dersi, basit alt problemlerden pseudopolinoma uzanan tüm tasarım tekniklerini kademeli öğretti — DP, “ne bilsem işim biterdi?” sorusunu yerel kaba kuvvetle çözen güçlü bir çatıdır.