Middle — Senior
Hogyan módosítsuk a megoldást a dobókockák összegének és kombinációinak kiszámítására, ha a dobókockák száma paraméter?
sobes.tech MI
Válasz az MI-től
Ha a dobókockák száma paraméterré válik, akkor a összegek és kombinációk számolására szolgáló megoldásnak dinamikusnak és skálázhatónak kell lennie.
Megközelítések:
-
Rekurzív átfutás:
- Minden dobókocka esetében vizsgáljuk meg az összes lehetséges értéket (1–6).
- Rekurzívan adjuk össze az értékeket, és számoljuk meg az összes kombináció számát minden összeghez.
-
Dinamikus programozás:
- Használjunk egy tömböt vagy szótárat, ahol az index az összeg, az érték pedig az adott összeg elérésének módjainak száma.
- Kezdetben, 0 dobókocka esetén, az összeg 0 elérésének módjai száma 1.
- Minden dobókocka esetében frissítsük a tömböt az új összeghez tartozó módok számával.
Példa Go nyelven dinamikus programozással:
func diceSums(numDice int) map[int]int {
dp := make(map[int]int)
dp[0] = 1
for i := 0; i < numDice; i++ {
next := make(map[int]int)
for sum, count := range dp {
for face := 1; face <= 6; face++ {
next[sum+face] += count
}
}
dp = next
}
return dp
}
// Használat:
// sums := diceSums(3)
// fmt.Println(sums) // Megmutatja az összes összeghez tartozó kombinációk számát 3 dobókockával
Ez a megközelítés hatékonyan képes kiszámítani a kombinációk számát bármennyi dobókocka esetén, anélkül, hogy manuálisan végig kellene menni az összes lehetőségen.