ich habe mich heute mit dem Knapsack-Tutorial (http://www.proggen.org/doku.php?id=algo:knapsack) beschäftigt, was mir gut gefallen hat.
Eine Frage zum Backtracking habe ich noch, und zwar zu folgendem Code-Teil:
Code: Alles auswählen
if( r - w[i] == results[i + 1][currentVolume - v[i]] )
{
// Gegenstand war im Rucksack
fprintf( stdout, "selecting %d (%d / %d)\n", i + 1, v[i], w[i] );
r -= w[i];
}
Code: Alles auswählen
if( results[i][currentVolume] != results[i + 1][currentVolume] )
{
// Gegenstand war im Rucksack
fprintf( stdout, "selecting %d (%d / %d)\n", i + 1, v[i], w[i] );
currentVolume -= v[i];
}
Ich persönlich finde das so etwas einfacher, was aber natürlich Geschmackssache sein kann.
Meine Frage ist nur, ob ich richtig liege und das so auch korrekt ist, oder ob meine Variante nur zufällig bei den Eingabewerten, die ich getestet habe (incl. denen aus dem Tutorial) funktioniert, und mir bei anderen um die Ohren fliegen kann.
