Algoritmusok s Adatszerkezetek I Ismtls nlkli htizsk feladat

  • Slides: 12
Download presentation
Algoritmusok és Adatszerkezetek I. Ismétlés nélküli hátizsák feladat DP megoldása 2020. szeptember 3. hét

Algoritmusok és Adatszerkezetek I. Ismétlés nélküli hátizsák feladat DP megoldása 2020. szeptember 3. hét – 7. videó S 03 E 07

Hátizsák ismétlődő tárgyakkal Bemenet: • hátizsák S kapacitása • n tárgy, amelyek súlyát S

Hátizsák ismétlődő tárgyakkal Bemenet: • hátizsák S kapacitása • n tárgy, amelyek súlyát S 1, …, Sn ill. értékét E 1, …, En jelöli Kimenet: Tárgyakat nem darabolva, minden tárgyból 1 darab áll rendelkezésre, mi a legnagyobb ∑E ami S kapacitásba belefér

Hátizsák ismétlődés nélkül Nyers erő: lehetséges megoldások száma: 2 n Ismétlődéses részproblémára bontása nem

Hátizsák ismétlődés nélkül Nyers erő: lehetséges megoldások száma: 2 n Ismétlődéses részproblémára bontása nem működik! Ha egy optimális megoldásból kiveszünk egy tárgyat a megmaradt kapacitásra nem biztos, hogy optimális megoldás összeállítható s-Si kapacitásra

Hátizsák ismétlődés nélkül Részproblémára bontás: • vegyünk az optimális megoldást valamely s kapacitásra •

Hátizsák ismétlődés nélkül Részproblémára bontás: • vegyünk az optimális megoldást valamely s kapacitásra • ha az n. tárgy része az optimális megoldásnak akkor (s-Sn)-re optimális megoldáshoz jutunk 1. . (n-1) tárgyak felhasználásával • egyébként s-re optimális megoldás kapható 1. . (n-1) tárgyak felhasználása ertek(s, i)=max(ertek(s-Si, i-1)+Ei, ertek(s, i-1))

Hátizsák ismétlődés nélkül for s ← 0 to S ertek[s, 0] ← 0 for

Hátizsák ismétlődés nélkül for s ← 0 to S ertek[s, 0] ← 0 for j ← 1 to n ertek[0, j] ← 0 for s ← 1 to S ertek[s, j ] ← ertek[s, j-1] if s ≥ Sj ertek[s, j ] ← max( ertek[s, j-1], ertek[s- Sj , j-1] + Ej) return ertek[S, n] futásidő: O(Sn)

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei 30 14 16 9 S=10 0 0 1 2 3 4 5 6 7 8 9 10

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei 30 14 16 9 S=10 0 1 2 3 4 5 6 7 8 9 10 0 0

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei 30 14 16 9 S=10 0 1 2 3 4 5 6 7 8 9 10 0 0 0 1 0 0 2 3 4

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei 30 14 16 9 S=10 0 1 2 3 4 5 6 7 8 9 10 0 0 0 1 0 0 0 30 30 30 2 3 4

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei 30 14 16 9 S=10 0 1 2 3 4 5 6 7 8 9 10 0 0 0 1 0 0 0 30 30 30 2 0 0 0 14 14 14 30 30 30 44 44 3 4

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei

Hátizsák ismétlődés nélkül i 1 2 3 4 Si 6 3 4 2 Ei 30 14 16 9 S=10 0 1 2 3 4 5 6 7 8 9 10 0 0 0 1 0 0 0 30 30 30 2 0 0 0 14 14 14 30 30 30 44 44 3 0 0 0 14 16 16 30 30 30 44 46 4 0 0 9 14 16 23 30 30 39 44 46 1 Optimális megoldás megszerkesztése: 1 2 3 4 0 1 0

Egy optimális megoldás előállítása • Mindig a teljes megoldásból visszafejtéssel • Megjegyezhetjük, hogy melyik

Egy optimális megoldás előállítása • Mindig a teljes megoldásból visszafejtéssel • Megjegyezhetjük, hogy melyik döntéssel jutottunk az aktuális részmegoldáshoz (backpointerek) • VAGY minden részmegoldásnál újra kiszámoljuk, hogy melyik részmegoldásból jutottunk ide