Ich bin in einem Test auf diese Frage gestoßen.Array durch Hinzufügen von Elementen reduzieren
Bei einem Array reduzieren Sie das Array auf ein einzelnes Element mit minimalen Kosten. Zum Reduzieren entfernen Sie zwei Elemente aus dem Array, fügen Sie diese beiden Zahlen hinzu und behalten Sie die Summe im Array bei. Die Kosten jeder Operation sind die Summe der in diesem Schritt entfernten Elemente.
Beispiel, lassen Sie das Array A = [1,2,3]
Dann wir 1 und 2 entfernen können, fügen Sie beide und halten Sie die Summe zurück in Array. Kosten dieses Schrittes wären (1 + 2) = 3.
also A = [3,3], Cost = 3
Im zweiten Schritt kann man beiden Elemente aus der Matrix entfernen und halten, die Summe wieder im Array. Kosten für diesen Schritt würde also Gesamtkosten erweist sich als 9 (6 + 3) 3 + 3 = 6.
So, A = [6], Kosten = 6
sein.
Ich habe versucht, das Array zu sortieren, und die Elemente von abnehmender zu steigender, aber es schlägt fehl, wenn es doppelte Elemente gibt.
Pseudo-Code meines Algorithmus
sort(Array)
cost = 0
for(i=0; i<Array.length - 1; i++) {
Array[i+1] = Array[i] + Array[i+1]
cost = cost + Array[i+1]
}
Der Algorithmus, der oben erwähnt wurde, funktioniert nicht. Ich habe einen möglichen Fall gefunden, in dem es scheitern könnte. Wenn das Array = [5, 5, 5, 5], dann ist Cost = 45, gemäß dem obigen Algorithmus.
Wenn wir jedoch die ersten zwei Elemente und die letzten zwei Elemente summieren und dann die restlichen zwei Elemente summieren, ergibt sich die Gesamtkosten 40. (Im ersten Schritt Kosten = 10 * 2 und im nächsten Schritt weitere 20)
Was könnte ein effizienter Algorithmus dafür sein?
Ich denke, immer die beiden kleinsten Elemente hinzufügen sollte funktionieren. Machst du das? Bitte zeigen Sie den genauen Algorithmus an, den Sie verwenden. Wenn Sie die Summe zurück in das Array hinzufügen, legen Sie es in die Front, die Rückseite oder wo es gehört w.r.t. die Sortierung? –
Ich habe die Frage bearbeitet. Ich spare die Summe zurück in das Array davor (Ersetzen eines Elements durch die Summe). Ich dachte, die Summe in die Reihe an der richtigen Stelle w.r.t. Sortieren wäre ein wenig zeitaufwendig, da ich es nach jedem Austausch machen muss. – AnkitAti
Vielleicht sollten Sie die Elemente in einem Heap oder binären Suchbaum halten? Dann kostet es nur O (logn), um die zwei kleinsten Elemente jedes Mal zu erhalten. –