CodeBlanks Logo Icon CodeBlanks

Budama

Uygunsuz dalları erken keserek zaman kazanmayı öğrenirsin.

Budama

Budama (pruning), uygunsuz dalları erken keserek geri dönüş sayısını azaltır. Backtracking'i hızlandırır.

İyi budama, algoritmayı üsselten polinomsal hale getirebilir; bu yüzden önemlidir.

Budama, arama uzayını küçültür ve pratikte büyük fark yaratır; özellikle N-queens gibi sorunlarda.

Erken kontrol

Budama, adımı atmadan önce yapılan kontroldür. Uygun değilse dal hiç genişletilmez.

N-queens'te aynı sütun ya da çapraz kontrolü buna örnektir; vezir yerleşimi önceden elenir.

Erken kontrol, gereksiz recursion çağrılarını önler ve zaman kazandırır.

Uygulama N-queens say

count_n_queens(n) yaz. n×n tahtada n vezirin birbirini tehdit etmediği yerleşim sayısını backtracking ile bul. print(count_n_queens(4)) ile 2 yazdır.

Başlangıç kodu

solution.py
def count_n_queens(n):
    # Vezir say

Örnek çözüm

solution.py
def count_n_queens(n):
    # Vezir say
    def safe(cols, row, col):
        for r in range(row):
            c = cols[r]
            if c == col or abs(c - col) == row - r:
                return False
        return True
    count = 0
    def backtrack(row, cols):
        nonlocal count
        if row == n:
            count += 1
            return
        for col in range(n):
            if safe(cols, row, col):
                cols[row] = col
                backtrack(row + 1, cols)
    backtrack(0, [0] * n)
    return count
print(count_n_queens(4))

Beklenen çıktı

2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Budama: kavramları eşleştir

Kavram Anlamı
prune Buda
early check Erken kontrol
branch Dal
feasible Uygun

2 Budama ne zaman yapılır?

  • Başta
  • Adımdan önce Doğru cevap
  • Sonuçta
  • Adımdan sonra

Açıklama: Adımdan önce.

3 Budama koşulu

Soru
if not ____:
Cevap
if not feasible:

Açıklama: feasible doğru.

Orta seviye bölümündeki tüm dersler