18  Problem Oturumu 5

Ders 13-15’in uygulaması: beş çizge problemi BFS/DFS’e iner — yarıçap ve 2-yaklaşım, süpernode router gecikmesi, büyülü kapılar bileşen sayımı, sabitten yararlanan 3-şehir turu, durum-uzayı ve ortada buluşma

NotOturum bilgisi

18.1 Bu Problem Oturumu Ne Hakkında?

Beşinci problem oturumu (Justin Solomon) BFS ve DFS üzerine kurulu beş çizge problemini çözer (Şekil 33.1). Hepsinin ortak teması şudur: problem ilk bakışta “ağırlıklı en kısa yol” veya “gezgin satıcı” gibi zor görünür, ama doğru indirgeme ile ağırlıksız BFS/DFS’e veya basit bir sayıma iner.

“we’re going to cover some problems in graph theory related to depth-first search and breadth-first search.” — Solomon, 0:20

Solomon’un tekrarladığı meta-ders üç adımda toplanır:

  • Süslemeyi soy. 6.006 problemleri basit hesaplama problemlerini bol metinle süsler; ilk iş paragrafı madde madde ayıklamaktır.
  • Asıl soruyu çıkar. “Asıl ne soruluyor?” — en kısa yol mu, sadece bir sayım mı, yoksa bir min-maks mı?
  • Verilen sabitleri çıkar. “Verilen sabitler neler?” — “tam 3 şehir”, “tel ≤ 100r”, “derece ≤ 4” gibi sabitler indirgemenin anahtarıdır.

Her problem bu ayıklamadan sonra “İfade → Yaklaşım → Çözüm → Karmaşıklık” akışıyla işlenir.

flowchart TD
    R["Problem Oturumu 5<br/>(Ders 13-15 uygulaması)"] --> P1["Problem 1<br/>Yarıçap + 2-yaklaşım<br/>(eksantriklik, üçgen eşitsizliği)"]
    R --> P2["Problem 2<br/>Router gecikmesi<br/>(zincir-açma + süpernode)"]
    R --> P3["Problem 3<br/>Büyülü kapılar<br/>(bağlı bileşen − 1)"]
    R --> P4["Problem 4<br/>Üç-şehir turu<br/>(sabitten yararlan)"]
    R --> P5["Problem 5<br/>Cep küpü<br/>(durum-uzayı + ortada buluşma)"]
    CORE["Ortak tema:<br/>zor görünen problemi<br/>DOĞRU İNDİRGEMEYLE<br/>ağırlıksız BFS/DFS'e indir"]
    CORE -.-> P1
    CORE -.-> P2
    CORE -.-> P3
    CORE -.-> P4
    CORE -.-> P5

    classDef root fill:#fef3c7,stroke:#b45309,stroke-width:3px,color:#1f2937
    classDef prob fill:#f3f4f6,stroke:#374151,stroke-width:2px,color:#1f2937
    classDef core fill:#fcd34d,stroke:#b45309,stroke-width:2px,color:#1f2937
    class R root
    class P1,P2,P3,P4,P5 prob
    class CORE core
Şekil 18.1: Problem Oturumu 5’in kavram haritası: kök (PS5) beş probleme dallanır ve ortadaki ortak tema düğümü beşini birden yönlendirir. Problem 1 yarıçabı eksantriklikle hesaplar, sonra üçgen eşitsizliğiyle tek BFS’lik 2-yaklaşıma iner; Problem 2 ağırlıklı router hattını zincir-açmayla ağırlıksızlaştırıp süpernode ile tek BFS’e indirger; Problem 3 büyülü kapı problemini bedava-kapı çizgesinin bağlı bileşen sayısı eksi bir olarak çözer; Problem 4 üç-şehir turunu sabit sayıda BFS ve permütasyona indirir; Problem 5 cep küpünü durum-uzayı çizgesi olarak modelleyip ortada buluşmayla arar. Ortak tema — zor görünen problemi doğru indirgemeyle ağırlıksız BFS/DFS’e veya basit sayıma çevir — Solomon’un her probleme aynı kapıdan girmesini sağlar.
İpucuYaklaşım — ortak strateji: zoru kolaya indirgemek

Beş problemin tamamı aynı refleksle başlar: önce metni soyup “asıl ne soruluyor” ve “hangi sabitler verildi” diye çıkar; sonra problemi bildiğin bir araca (ağırlıksız BFS, full DFS/bağlı bileşenler, bir sayım) indirge. Bu oturumun beş indirgeme tekniği — eksantriklik + üçgen eşitsizliği, zincir-açma + süpernode, bedava-kapı bileşenleri, sabit-sayıda BFS, ortada buluşma — algoritma tasarımının “tanıdık alt-yapıya yönlendir” kasını çalıştırır.

18.2 Problem 1: Çizge Yarıçapı ve Eksantriklik

İfade. Bağlı bir yönsüz çizge \(G\) verilir. Bir düğümün eksantrikliği \(\varepsilon(v) = \max_w \operatorname{dist}(v, w)\) (en uzaktaki düğüme mesafe); çizgenin yarıçapı \(R(G) = \min_u \varepsilon(u)\). (a) \(R(G)\)’yi \(O(V \cdot E)\)’de hesapla. (b) \(R\)’yi daha hızlı (\(O(E)\)) 2-yaklaşımla tahmin et: \(R \le R^* \le 2R\).

İpucuYaklaşım — min-maks: merkezi bul, sonra üçgen eşitsizliğiyle gevşet

Bu bir min-maks problemidir: metrik geometride bir dairenin merkezini bulmak gibi — her noktanın en uzak noktaya mesafesi minimumda merkezde gerçekleşir. (a) şıkkında tanımı doğrudan kodla: her düğümden BFS, en uzak mesafe = eksantriklik, bunların minimumu = yarıçap. (b) şıkkında ise tek bir düğümün eksantrikliğinin yeterli bir tahmin olduğunu üçgen eşitsizliğiyle göster — kesin merkezi bulmak zorunda kalmadan.

“the radius… is the min over all of the different vertices, u, of the eccentricity of u.” — Solomon, 3:25

Çözüm.

(a) Kesin yarıçap. Her \(v\) için BFS ile tüm mesafeleri bul, maksimumunu al (= \(\varepsilon(v)\)), bunların minimumunu tut.

def radius_exact(adj):                       # (a) kesin R — O(V·E)
    best, center = None, None
    for u in adj:                            # V kez BFS
        e = max(bfs(adj, u)[0].values())     # ε(u) = en uzak mesafe
        if best is None or e < best:
            best, center = e, u
    return best, center                      # (R, merkez)

(b) 2-yaklaşım. Herhangi bir \(u\) seç, \(R^* = \varepsilon(u)\) döndür (tek BFS). İki sınır:

  • Alt sınır. \(R = \min_u \varepsilon(u) \le \varepsilon(u) = R^*\) (minimum, herhangi bir değerden küçük-eşittir).
  • Üst sınır. \(u_0 = \arg\min \varepsilon\) gerçek merkez, \(\bar{v}\) ise \(u\)’dan en uzak düğüm olsun. Üçgen eşitsizliği: \(R^* = \operatorname{dist}(u, \bar{v}) \le \operatorname{dist}(u, u_0) + \operatorname{dist}(u_0, \bar{v}) \le R + R = 2R\).
def radius_2approx(adj, u=None):             # (b) 2-yaklaşım — O(E)
    if u is None:
        u = next(iter(adj))                  # HERHANGİ bir düğüm
    return max(bfs(adj, u)[0].values())      # R* = ε(u);  R ≤ R* ≤ 2R

“Justin’s favorite inequality is the triangle inequality.” — Solomon, 24:43

Şekil 18.2 bu sınırı bir yol çizgesi \(0\text{-}1\text{-}2\text{-}3\text{-}4\) üzerinde motordan gerçek verilerle gösterir: kesin merkez düğüm \(2\)’dir ve \(\varepsilon(2) = R = 2\) (üst panel); keyfi \(u = 0\) seçilince \(R^* = \varepsilon(0) = 4 = 2R\) olur (alt panel) — bu çizge tam olarak sınırın doyduğu kötü durumdur. Üçgen eşitsizliği \(R \le R^* \le 2R\) tek BFS’in kesin yarıçabın en çok iki katı olduğunu garanti eder.

Karmaşıklık. (a) \(V\) kez BFS = \(O(V \cdot (V + E))\); bağlı çizgede \(V = O(E)\) olduğundan \(V + E = O(E)\)\(O(V \cdot E)\). (b) tek BFS → \(O(E)\) (\(V\) faktörü düşer).

Şekil 18.2: Yarıçap ve 2-yaklaşım — tek BFS ε(u) kesin R’nin en çok 2 katı (R ≤ R* ≤ 2R) — Problem 1 İMZA. Yol çizgesi 0-1-2-3-4 (motordan GERÇEK). ÜST panel (a) KESİN MERKEZ: gerçek merkez düğüm 2 amber dolgu; iki uca mesafe yayları (her ikisi 2) → ε(2) = R = 2 rozeti; merkez = en küçük eksantrikliğe sahip düğüm. ALT panel (b) KEYFİ u=0: keyfi seçilen u=0 (slate dolgu); en uzak düğüm 4’e tek BFS yolu vurgulu → R* = ε(0) = 4 = 2R rozeti — bu çizge sınırın DOYDUĞU kötü durum. ORTADA üçgen eşitsizliği kutusu (Solomon 24:43): R* = dist(u, en-uzak) ≤ dist(u, merkez) + dist(merkez, en-uzak) ≤ R + R = 2R. ALT şerit maliyet: (a) kesin R = V kez BFS → O(V·E) | (b) 2-yaklaşım = TEK BFS → O(E), V faktörü düşer.

18.3 Problem 2: Router Gecikmesi ve Süpernode

İfade. \(r\) router, bazıları giriş noktası (entry point); çift yönlü teller, her biri pozitif tamsayı uzunluk \(l_i\). Bir router’ın gecikmesi = en yakın giriş noktasına en kısa yol. Toplam tel \(\le 100r\) ve her router bir giriş noktasına ulaşır. Tüm router’ların gecikme toplamını \(O(r)\)’de hesapla.

İpucuYaklaşım — iki klasik hile: zincir-açma (ağırlıksızlaştır) + süpernode (tek kaynak)

İlk bakışta ağırlıklı en kısa yol gibi görünür ama değil. İki hile birleştirilir: (1) Zincir-açma — toplam tel \(\le 100r\) olduğundan, ağırlık-\(l\) kenarı \(l\) tane ağırlık-1 kenardan oluşan bir zincire açılır → ağırlıksız çizge, BFS geçerli. (2) Süpernode — her router için her giriş noktasına ayrı ayrı BFS yapmak iç içe bir döngüdür; bunun yerine tüm giriş noktalarına bağlı tek sanal düğüm \(s\) eklenir ve \(s\)’ten tek BFS tüm gecikmeleri bir dalgada verir.

“he is a supernode, which is a term of art.” — Solomon, 40:18

Çözüm. Her router bir düğüm; her tel \(l_i\) kenarlık zincire açılır (yardımcı “aux” düğümlerle), böylece \(V = O(r)\) ve \(E \le 100r = O(r)\). Tüm giriş noktalarına bağlı tek bir süpernode \(s\) ekle. Üçgen eşitsizliğiyle, \(s\)’ten bir router’a en kısa yol önce \(s\)’ten en yakın giriş noktasına (\(+1\) kenar) sonra oradan router’a gider — yani

\[\operatorname{gecikme}(i) = \operatorname{dist}(s, i) - 1.\]

Tek BFS (kaynak \(s\)) ile tüm \(\operatorname{dist}(s, i)\) bulunur; cevap \(\sum_i (\operatorname{dist}(s, i) - 1)\).

def total_latency_supernode(n_nodes, wires, entries):   # O(r)
    adj = expand_weighted_edges(n_nodes, wires)   # zincir-açma: ağırlıklı → ağırlıksız
    s = ("super", 0)                              # tek sanal süpernode
    adj[s] = []
    for e in entries:                             # s → her giriş noktası (+1 kenar)
        adj[s].append(e); adj[e].append(s)
    delta, _ = bfs(adj, s)                        # TEK BFS (iç içe döngü YOK)
    return sum(delta[i] - 1 for i in range(n_nodes))   # gecikme = dist(s,i) − 1

Şekil 18.3 üç panelde tüm hileyi motordan gerçek bir örnekle gösterir: 3 router, teller \((0\text{-}1,\ l{=}2)\) ve \((1\text{-}2,\ l{=}3)\), giriş noktası kümesi \(\{0\}\). Zincir-açma \(l{=}2\) teli için 1, \(l{=}3\) teli için 2 aux düğüm üretir. Süpernode BFS’i \(\operatorname{dist}(s, \cdot) = (1, 3, 6)\) verir → gecikmeler \(0, 2, 5\) ve toplam \(0 + 2 + 5 = 7\).

Karmaşıklık. Süpernode tek düğüm + (giriş sayısı kadar) kenar ekler (asimptotik değişmez). Tek BFS, \(V + E = O(r)\)\(O(r)\).

Şekil 18.3: Süpernode hilesi — iç içe döngü YERİNE tek BFS dalgası — Problem 2 İMZA. Üç panel (motordan GERÇEK: 3 router, teller (0-1,ℓ=2),(1-2,ℓ=3), giriş {0}). ① AĞIRLIKLI HAT: router R0–R1–R2; kenar ağırlığı = tel uzunluğu ℓ; giriş noktası R0 amber çerçeve. ② ZİNCİR-AÇMA: her ağırlık-ℓ kenarı ℓ birim-kenara açılır, araya aux düğümler (ℓ=2→1 aux/2 kenar, ℓ=3→2 aux/3 kenar); tel ≤ 100r → E = O(r), ağırlıksız BFS geçerli. ③ SÜPERNODE s + TEK BFS: s büyük amber düğüm girişe +1 kenarla bağlanır; eş-merkezli BFS dalga yayları; her router gecikme rozeti dist(s,i) − 1 = (0, 2, 5); toplam kutusu Σ gecikme = 0 + 2 + 5 = 7 (Solomon 40:18).

18.4 Problem 3: Potry Harter ve Büyülü Kapılar

İfade. \(n\) odalı bir labirent, her oda \(\le 4\) kapı (yani düğüm derecesi \(\le 4\)). Kapılar kapalı; bazıları büyülü (enchanted) — açmak maliyetli, diğerleri bedava. Tüm odaları ziyaret etmek için açılması gereken minimum büyülü kapı sayısını \(O(n)\)’de bul.

İpucuYaklaşım — TSP tuzağı: aslında bedava-kapı bileşenlerini say

Tuzak: gezgin satıcı (TSP) gibi görünür ama değil. İki gözlem onu basitleştirir: (1) bir büyülü kapı açıldıktan sonra açık kalır — ileri-geri geçiş artık bedava; (2) en kısa yol önemsizdir, yalnız açılan kapı sayısı sorulur. Anahtar: bedava kapılarla birbirine bağlı odalar tek bir “kümedir” (bedava gezilebilen öbek). Geriye kalan, bu öbekleri birbirine bağlamak için kaç büyülü kapı gerektiğidir — bu da bir yayılma ağacı sayımıdır.

“we’re actually going to remove the enchanted doors.” — Solomon, 51:17

Çözüm. Çizge kur: düğüm = oda, kenar = yalnız büyülü-olmayan (bedava) kapılar. Bu çizgenin bağlı bileşenlerini (full BFS/DFS) hesapla — her bileşen, bedava gezilebilen bir oda öbeğidir. Cevap: (bağlı bileşen sayısı) \(-\,1\).

Gerekçe: bileşenleri tek düğüm sayan bir meta-çizge düşün; hepsini birbirine bağlayan bir yayılma ağacının (spanning tree) kenar sayısı tam olarak (düğüm sayısı \(-\,1\)) = (bileşen sayısı \(-\,1\))’dir, ve her böyle kenar bir büyülü kapıya karşılık gelir.

def min_enchanted_doors(n_rooms, free_doors):           # O(n)
    adj = make_undirected(free_doors) if free_doors else {}
    for r in range(n_rooms):
        adj.setdefault(r, [])                           # izole oda = kendi bileşeni
    return len(connected_components(adj)) - 1           # bileşen − 1 (yayılma ağacı)

“the number of edges in a spanning tree of my graph is exactly the number of vertices in my graph minus 1.” — Solomon, 58:08

Karmaşıklık. Derece \(\le 4\)\(V = O(n)\) ve \(E = O(n)\); bağlı bileşenler $O(V + E) = $ \(O(n)\).

18.5 Problem 4: Purity Atlantic ve Sabitten Yararlanma

İfade. Bir havayolu; ev şehri + ziyaret edilecek tam 3 şehir; toplam aktarma (connection) sayısını en aza indiren rotayı bul. \(c\) şehir, \(f\) uçuş; hedef \(O(c + f)\).

İpucuYaklaşım — verilen sabiti sömür: 3 şehir → O(1) permütasyon ve çift

“Tüm-çiftler en kısa yol” gibi görünür ama yalnızca ilgilenilen 4 şehir (ev + 3) önemlidir. Burada asıl numara verilen sabiti sömürmektir: ziyaret edilecek şehir sayısı tam 3 olduğundan, permütasyon sayısı \(3! = 6\) (sabit), gerekli şehir-çifti sayısı \(2 \cdot \binom{4}{2} = 12\) (sabit). Bu sabitler patlamadığı için problem doğrusal kalır.

“this is one of these problems where you’re really taking advantage of the constants that we gave you.” — Solomon, 1:09:06

Çözüm. Çizge: düğüm = şehir, kenar = uçuş. 4 ilgili şehrin her çifti (12 yönlü çift) için BFS ile en kısa yol uzunluğunu hesapla (aktarma sayısı = yol uzunluğu \(-\,1\)). Sonra 6 permütasyonu (ev → 1 → 2 → 3 → ev) gez, her birinin toplam maliyetini bul, minimumu döndür.

def best_three_city_tour(adj, home, cities):            # O(c + f)
    pts = [home] + list(cities)                         # 4 ilgili şehir
    dist = {}
    for p in pts:                                       # 4 BFS (sabit sayıda)
        delta, _ = bfs(adj, p)
        for q in pts:
            dist[(p, q)] = delta.get(q)
    best, order = None, None
    for perm in permutations(cities):                   # 3! = 6 permütasyon
        legs = [(home, perm[0]), (perm[0], perm[1]),
                (perm[1], perm[2]), (perm[2], home)]
        total = sum(dist[l] - 1 for l in legs)          # aktarma = yol − 1
        if best is None or total < best:
            best, order = total, perm
    return best, order

Karmaşıklık. \(12 \times\) BFS \(= 12 \cdot O(c + f) = O(c + f)\); \(6\) permütasyon \(= O(1)\). Toplam \(O(c + f)\). (Eğer “\(m\) şehir” deselerdi \(m!\) patlardı — sabit olması kritik.)

18.6 Problem 5: Cep Küpü — Durum Çizgesi ve Ortada Buluşma

İfade. \(2 \times 2\) Rubik küpü (pocket cube). Hamle = (yüz \(f_j\), yön \(s\)). (a) Farklı konfigürasyon sayısının 12 milyondan az olduğunu göster. (b) Her düğümün derecesini bul. (c) Bir küpü en kısa hamle dizisiyle çözen hızlı algoritma.

İpucuYaklaşım — durum-uzayı çizgesi + ortada buluşma (çift-yönlü BFS)

Klasik durum-uzayı çizgesi: düğüm = küpün bir konfigürasyonu (renk durumu), kenar = bir hamle; çözüm = “düz” küpe en kısa yoldur. (a) ve (b) doğrudan sayımla çözülür. (c) için tek-yönlü BFS yavaştır (orta seviyelerde milyonlarca düğüm); ortada buluşma (meet-in-the-middle) ile kaynaktan ve hedeften paralel BFS yürütülür — iki dalga yarı-derinlikte buluşur.

“think of every vertex of my graph as being the state of some system and every edge as being a transition.” — Solomon, 1:14:18

Çözüm.

(a) Konfigürasyon üst sınırı. Bir köşeyi sabitlersek geriye 7 köşe kalır; bunlar \(\le 7!\) farklı düzende sıralanabilir ve her köşe 3 yönde dönebilir (\(3^7\)). Üst sınır:

\[3^7 \cdot 7! = 11\,022\,480 < 12 \text{ milyon}.\]

(b) Derece. 3 döndürülebilir yüz \(\times\) 2 yön = derece 6 (her düğümde sabit).

(c) Ortada buluşma. Tek-yönlü BFS, çözülebilir tüm konfigürasyonları gezer (~3 milyon; durum çizgesi 3 bağlı bileşenli, çap 14). Bunun yerine kaynaktan ve hedeften paralel BFS yap; seviye kümeleri ortada kesişir, hiçbir seviye yol uzunluğunun yarısından (\(\lceil w/2 \rceil\)) büyük olmaz.

def bidirectional_bfs(adj, s, t):                # ortada buluşma — Solomon 1:27:08
    ds, dt = {s: 0}, {t: 0}                       # iki ayrı mesafe haritası
    qs, qt = deque([s]), deque([t])              # iki ayrı kuyruk (paralel BFS)
    while qs and qt:
        # küçük cepheyi genişlet; komşu DİĞER taraftaysa → buluşma, dur
        ...                                       # kesişim: ds[u] + 1 + dt[v]

“I’m going to run BFS sort of in parallel for two different vertices… The source and the target.” — Solomon, 1:27:08

Şekil 18.4 bu kazancı bir durum-uzayı maketi olan tam ikili ağaç (127 düğüm) üzerinde motordan gerçek çalıştırarak gösterir: iki uç yaprak \(s = 63\) ve \(t = 126\) arasındaki en kısa yol köke çıkıp inen 12 kenardır. Tek-yönlü BFS tüm ağacı tarar → 127 ziyaret; çift-yönlü BFS iki küçük dalgayı yarı-derinlikte (6) buluşturup yalnız 36 ziyaret eder.

UyarıDürüstlük notu — kazanç ÜSTEL dallanmadan gelir, çizgilerden değil

Notion’un “üstel büyüme yarıya iner” iddiası yalnızca üstel dallanan durum-uzaylarında doğrudur. Figürdeki yan panel bunu bir karşı-örnekle dürüstçe gösterir: dallanma çarpanı 1 olan bir halka-20 çizgesinde (\(s{=}0\), \(t{=}10\)) çift-yönlü BFS de tek-yönlü BFS de 20 düğüm ziyaret eder — tasarruf YOKtur. Ortada buluşmanın gerçek kazancı, \(N^w\) büyüyen bir uzayı \(2 \cdot N^{\lceil w/2 \rceil}\)’ye indirmesinden, yani üstel dallanmayı yarı-derinliğe çekmesinden gelir; cep küpü bu üstel rejimde olduğu için kazanç gerçektir.

Karmaşıklık. Tek-yönlü BFS, çözülebilir tüm konfigürasyonları (~3 milyon) gezer. Ortada buluşma, gezilen düğüm sayısını ~\(2 \cdot N^{\lceil w/2 \rceil}\)’ye indirir (\(N_i\) = \(i\) hamlede erişilen konfigürasyon sayısı).

Şekil 18.4: Ortada buluşma — çift-yönlü BFS üstel büyümeyi yarıya iner — Problem 5 İMZA. Durum-uzayı maketi: tam ikili ağaç 127 düğüm (motordan GERÇEK). İki uç yaprak s=63 (sol-alt) ve t=126 (sağ-alt) amber işaretli; en kısa yol köke çıkıp inen 12 kenar. Tek-yönlü BFS: s’ten TÜM ağaca dev dalga → 127 ziyaret (soluk üçgen). Çift-yönlü: s ve t’den iki küçük amber kama; kökte (yarı-derinlik 6) buluşma yıldızı → 36 ziyaret. Karşılaştırma kutusu: 36 ≪ 127, hiçbir dalga yarı-derinlik 6’yı geçmez (Solomon 1:27:08). YAN panel DÜRÜSTLÜK: halka-20 (dallanma=1) — çift-yönlü 20 = tek-yönlü 20, TASARRUF YOK; kazanç üstel dallanmadan gelir. Alt şerit: pocket cube durum-uzayı 3⁷ × 7! = 11.022.480 < 12 milyon; düğüm derecesi = 3 yüz × 2 yön = 6.

18.7 Ne Öğrendik?

ÖnemliYedi Taşınabilir Araç

Bu oturum, Ders 13-15’in BFS/DFS teorisini beş somut problemde uyguladı ve yedi taşınabilir araç kazandırdı:

  1. Süpernode: birden çok “hedef”i tek düğüme bağlayıp tek BFS ile hepsine mesafeyi çöz (iç içe döngüden kurtul).
  2. Ağırlıklı → ağırlıksız: küçük-toplamlı tamsayı ağırlıkları kenar zincirine açıp BFS’in doğrusallığını koru.
  3. Bağlı bileşenler: “öbek” problemleri (büyülü kapılar) full BFS/DFS + (#bileşen \(-\,1\)) ile çözülür; yayılma ağacı argümanı.
  4. Sabitten yararlan: “tam 3 şehir” gibi sabitler permütasyon/çift sayısını \(O(1)\) yapar — \(m\) olsaydı patlardı.
  5. Durum-uzayı çizgesi: düğüm = sistem durumu, kenar = geçiş; bulmaca çözmek = en kısa yol (Rubik, satranç, AI arama).
  6. Ortada buluşma: kaynak + hedeften paralel BFS, üstel arama uzayını yarı-derinliğe indirir (ama yalnız üstel dallanmada kazanç verir).
  7. Üçgen eşitsizliği + arg min/arg max: yaklaşım sınırlarını (\(2R\)) ve süpernode mesafelerini kanıtlamanın aracı.

18.8 Sonraki

UyarıDers 18 (L12) — Bellman-Ford

Sırada Ders 18 (L12): Bellman-Ford var — Jason Ku ile, DAG kısıtını kaldırıyoruz: herhangi bir ağırlıklı çizgede (çevrim, hatta negatif ağırlıklı çevrim dahil) tek-kaynak en kısa yol. DAG relaxation’ın “kenar gevşetme” tekniği aynı kalır ama topolojik sıra olmadığından kenarlar tekrar tekrar gevşetilir; negatif ağırlıklı çevrimler de tespit edilir.