İçeriğe atla
CodeItRaw
Açgözlü & Aralıklar

Ders 1/4

Açgözlü yöntem her adımda o an en iyi görüneni seçer ve bir daha dönüp bakmaz. Hızlıdır ve yazması kolaydır. Zor olan, seçimin gerçekten zararsız olduğunu görmektir: bazı problemlerde yerel en iyi, bütünün en iyisine götürür; bazılarında götürmez.

fives = tens = 0
for bill in bills:
if bill == 5:
fives += 1
elif bill == 10:
fives -= 1
tens += 1
elif tens > 0:
tens -= 1
fives -= 1
else:
fives -= 3
if fives < 0:
return False
return True
5'lik bir ürün için para üstü vermek: 20'lik gelince önce 10'luğu harca, çünkü 5'likler her işe yarar, 10'luk ise yalnızca 20'liğe üst verirken. Kıymetli olanı sakla, kıymetsiz olanı önce harca: seçimin neden zararsız olduğunun gerekçesi budur.

Açgözlü bir çözüm yazmadan önce onu çürütmeye çalış: seçimin kötü sonuç vereceği küçük bir girdi arar ve bulamazsan muhtemelen doğrudur. Bozuk parada bu girdi vardır: 1, 3 ve 4'lük paralarla 6'yı "en büyük parayı al" kuralı üç parayla yapar, doğrusu iki paradır.

Görevler

Görevler sırayla açılır. Hepsini çözünce sonraki ders açılır.

Bu dersin görevleri, önceki dersler bitince açılır. Anlatımı şimdiden okuyabilirsin.

  1. 01

    Limonata Tezgâhı

    Fonksiyon

  2. 02

    En Az Bozuk Para

    Kod Okuma · AI'yı Denetle

  3. 03

    En Az Bozuk Para

    Kod Okuma · Kodu Boz

Sırayı beklemeden çözmek istersen bütün problemler kilitsiz açık: Problemler listesi