Es gibt einen Zaun mit n Beiträge, jeder Beitrag kann mit einer der k Farben gemalt werden. Sie müssen alle Pfosten so malen, dass nicht mehr als zwei benachbarte Zaunpfosten die gleiche Farbe haben. Gibt die Gesamtzahl der Möglichkeiten zurück, mit denen Sie den Zaun malen können.Dynamische Programmierung - Farbe Zaun Algorithmus
diff - Anzahl von Kombinationen mit verschiedenen Farben,
gleiche - Anzahl von Kombinationen mit gleichen Farben,
n - Anzahl der Beiträge,
k - Anzahl der Farben.
Für n = 1:
diff = k;
same = 0;
Für n = 2:
diff = k * (k - 1);
same = k;
Für n = 3:
diff = (k + k * (k - 1)) * (k - 1);
same = k * (k - 1);
und die endgültige Formel:
same[i] = diff[i - 1];
diff[i] = (diff[i - 1] + diff[i - 2]) * (k - 1);
Ich verstehe, wie man same[i]
findet, aber ich verstehe nicht, wie man diff[i]
findet. Können Sie die Formel für diff[i]
erklären?
kleiner Tippfehler in der Formel, der zweite Diff [i-1] sollte diff sein [i-2] – user908645
Sehr erzieherische Erklärung. Hätte ich diese Frage im Interview genommen, würde ich wahrscheinlich diese Argumentation machen: 1) Die letzten 2 Beiträge haben die gleiche Farbe, daher können die letzten 2 Beiträge nicht wie die letzten 3 gemalt werden. (k-1) * diff [n-2] 2) Die letzten 2 Beiträge haben unterschiedliche Farben. (k-1) * diff [n-1] Zusammen ergeben sie (k-1) * (diff [n-2] + diff [n - 1]) – user908645