Dies ist eine Art Frage zur Bearbeitungsentfernung und sehr einfach. Ich bin in diesem Bereich einfach ziemlich hirntot und kann es bisher nicht herausfinden.
Bei einer Reihe von Zahlen, z
[3, 1, 1, 1]
Wie würde man am effizientesten alle Zahlen in dieselbe Zahl verwandeln, mit der minimalen Anzahl von "Zügen"? Mit "Verschieben" ist das Hinzufügen oder Entfernen einer Zahl zu einer Zahl gemeint.
Im obigen Beispiel wären die effizientesten Schritte:
[1, 1, 1, 1]
Dies würde 2 Züge erfordern und die erste Zahl zweimal reduzieren.
Ich kann nicht herausfinden, wie ich das am besten herausfinden kann, wenn man viel größere Arrays mit Hunderten von Zahlen betrachtet.
Ich habe ursprünglich versucht, die gerundete Durchschnittszahl (Summe aller geteilt durch die Länge) zu berechnen und sie dann auf den berechneten Durchschnitt zu reduzieren, aber das obige Beispiel hat dies gebrochen und erfordert 4 Züge anstelle von 2.
Ich könnte mir vorstellen:
- Der Durchschnitt,
- Der Modus,
- Der Median
und ermitteln Sie den Bearbeitungsabstand für jeden von ihnen, indem Sie den Mindestabstand auswählen. Ich bin mir jedoch nicht sicher, ob dies in jedem Fall richtig wäre. Wie kann ich es wissen?
quelle
Antworten:
Die Antwort ist, den Median zu nehmen. Eine der Eigenschaften des Medians ist, dass er den L1-Abstand zu jedem Element minimiert . (Um den Wikipedia-Artikel zu verstehen, nehmen Sie die Wahrscheinlichkeitsverteilung als gleichmäßige Verteilung über Ihre ursprüngliche Zahlenreihe.)
Dies ist der Algorithmus, der das Problem löst (ursprünglich von dc2 geschrieben ):
quelle
Wie TCSGrad erwähnt, suchen Sie bei einer Liste von ganzen Zahlen nach der ganzen Zahl m, die δ ( m ) = n ∑ i = 1 | minimiert m - x i | . Es ist lehrreich, δ ( m + 1 ) - δ ( m ) zu berechnen : δ ( m + 1 ) - δ ( m ) =x1,…,xn m
quelle
Das Problem kann als LP-Problem formuliert werden:
EDIT : Wie in den Kommentaren ausgeführt, sollte die Zielfunktion Summe über absolute Differenzen sein. Um es wieder in eine Standard-LP umzuwandeln, können wir die LP wie folgt umschreiben:
vorbehaltlich:
quelle