Was ist über die Komplexität des folgenden Problems bekannt:
- Gegeben: rationale Zahlen .
- Ausgabe: Ganzzahlen .
- Ziel: minimiere wobei
Das heißt, wir möchten die rationalen Zahlen auf ganze Zahlen runden, um die Summe der Fehler in paarweisen Abständen zu minimieren. Für jedes Paar möchten wir den gerundeten Abstand so nahe wie möglich am wahren Abstand .y j - y i x j - x i
Motivation: Eine langweilige U-Bahn-Fahrt und ein Plakat, auf dem die "Standorte" der Bahnhöfe in einer Minute Fahrzeit dargestellt sind. Hier minimieren wir den Fehler, den Menschen machen, wenn sie das Poster verwenden, um die Reisezeit zwischen den Stationen und , wobei der Durchschnitt über alle Paare .j i < j
Zum Beispiel können wir hier die folgenden Näherungen der paarweisen Abstände zwischen den vier Stationen lesen (wobei der Kürze halber A, B, C, D verwendet wird):
- A – B ≤ 1 Minute, B – C ≤ 2 Minuten, C – D ≤ 2 Minuten
- A – C ≈ 3 Minuten, B – D ≈ 4 Minuten
- A – D ≈ 5 Minuten
Ist das die bestmögliche Annäherung? Wenn Sie die tatsächlichen Reisezeiten kennen, könnten Sie eine bessere Lösung finden?
Anfangs klang dies wie eine einfache Übung in dynamischer Programmierung, aber jetzt scheint es, dass ein gewisses Maß an tatsächlichem Denken erforderlich ist.
Kennt jemand dieses Problem? Oder sehen Sie einen cleveren Algorithmus, um das Problem zu lösen?
Bearbeiten: Es gibt einige natürliche Varianten der Frage, die in den Kommentaren erwähnt wurden; Geben wir ihnen einige Namen:
Boden- / Deckenversion : Es ist erforderlich, dass für alle .i
Ganzzahlige Version: Es ist ausreichend, dass für alle . i
monotone Version: es ist erforderlich, dass .
nicht monotone Version: wir können für . i < j
Die ursprüngliche Frage berücksichtigt die monotone Integer-Version. Antworten zu diesen Versionen sind jedoch willkommen.
quelle
Antworten:
OKAY. Der DP-Algorithmus scheint unnötig kompliziert zu sein. Nach dem Lesen von Kommentaren denke ich, dass dies die monotone Version des Problems lösen könnte (aber ich habe nicht jedes Detail überprüft).
Nehmen wir zunächst an , dass jedes , wobei ⌊ x i ⌋ der integrale Teil ist, { x i } der gebrochene Teil ist. Angenommen, x i ist auf to x i ⌋ + v i gerundet , wobei v i eine nichtnegative ganze Zahl ist (natürlich kann v i im Allgemeinen negativ sein, aber wir können immer so verschieben, dass das kleinste v i 0 ist).xi=⌊xi⌋+{xi} ⌊xi⌋ {xi} xi ⌊xi⌋+vi vi vi vi
Betrachten Sie nun die Kosten für ein Paar , x j, wenn Sie diese Rundung durchführen. Die Kosten sollten seinxi xj
Der Ausdruck ist wegen der absoluten Werte kompliziert. Beachten Sie jedoch, dass wir Monotonie haben, sodass die Dinge in den beiden inneren absoluten Werten das gleiche Zeichen haben sollten. Da wir einen äußeren absoluten Wert haben, ist es wirklich egal, was dieses Zeichen ist, der Ausdruck vereinfacht sich nur
Von nun an gehen wir nicht mehr davon aus, dass die Lösung monoton ist, sondern ändern stattdessen das Ziel, die Summe des obigen Terms für alle Paare zu minimieren. Wenn die Lösung für dieses Problem monoton ist, ist es natürlich auch die optimale Lösung für die monotone Version. (Stellen Sie sich das vor: Das ursprüngliche Problem hat eine unendliche Strafe, wenn die Lösung nicht monoton ist. Das neue Problem hat eine geringere Strafe. Wenn eine monotone Lösung auch in der neuen Version gewinnt, muss es die Lösung der monotonen Version sein.)
Nun möchten wir beweisen, dass wir in der optimalen Lösung v i ≥ v j haben müssen , wenn .{xi}>{xj} vi≥vj
Angenommen, dies ist nicht wahr, wir haben ein Paar aber v i < v j . Wir werden zeigen, dass die Lösung strikt besser wird, wenn wir tauschen .{xi}>{xj} vi<vj v jvi vj
Zuerst vergleichen wir den Ausdruck zwischen und , hier ist es wirklich klar, dass das Tauschen strikt besser ist, da in der Nicht-Tausch-Version und das gleiche Vorzeichen haben, das Absolute value ist die Summe der beiden absoluten Werte.j v i - v j { x j } - { x i }i j vi−vj {xj}−{xi}
Nun vergleichen wir für jedes die Summe der Paare ( i , k ) und ( j ,k (i,k) . Das heißt, wir müssen vergleichen(j,k)
und | v j - v k - ( { x i } - { x k } ) | + ||vi−vk−({xi}−{xk})|+|vj−vk−({xj}−{xk})| .|vj−vk−({xi}−{xk})|+|vi−vk−({xj}−{xk})|
Verwenden Sie , B , C , D , um die vier Terme innerhalb des Absolutwerts zu bezeichnen. Es ist klar, dass A + B = C + D ist . Auch ist klar, dass | A - B | ≥ | C - D | . Durch die Konvexität des Absolutwertes wissen wir | A | + | B | ≥ | C | + | D |A B C D A+B=C+D |A−B|≥|C−D| |A|+|B|≥|C|+|D| . Nimm die Summe über alle xk wir wissen tauschen kann nur besser sein.
Beachten Sie, dass wir jetzt bereits eine Lösung für die monotone Boden- / Deckenversion haben: Es muss eine Schwelle geben, wenn größer ist, immer auf- und abrunden , wenn es kleiner ist, immer auf- und abrunden nach unten, während die Lösungsqualität nur von der Anzahl abhängt. Wir führen alle diese Lösungen auf und wählen die mit der kleinsten Zielfunktion aus. (Alle diese Lösungen sind notwendigerweise monoton).{xi}
Zum Schluss möchten wir noch auf die monotone Integer-Version des Problems eingehen. Wir können tatsächlich nachweisen, dass die optimale Lösung mit der monotonen Boden- / Deckenversion identisch ist.
Nun wollen wir beweisen, dass der Durchschnitt von in Gruppe mindestens der Durchschnitt von in Gruppe plus . Wenn dies nicht zutrifft, sei einfachk + 1 { x i } k 1 / 2 v i = v i - 1 v i > k{xi} k+1 {xi} k 1/2 vi=vi−1 für alle , die Berechnung zeigt erneut, dass sich die Zielfunktion verbessert.vi>k
Da der Durchschnitt von im Bereich , gibt es tatsächlich höchstens zwei Gruppen, was der Boden- / Deckenversion entspricht.[ 0 , 1 ){xi} [0,1)
quelle
Nur ein ausführlicher Kommentar ... (vielleicht trivial und / oder falsch :)
Wenn und das am wenigsten verbreitete Vielfache von , können wir die loswerden: . M b i x ' i = M ≤ x ixi=ai/bi M bi x′i=M∗xi
Wenn (Boden, Ceil-Beschränkung), können wir die binären Variablen , um Verwendung seines Abstands von ( oderyi∈{⌈xi⌉,⌊xi⌋} vi y′i x′i Li=x′i−M∗⌊xi⌋ Ri=x′i−M∗⌈xi⌉ ):
Und das ursprüngliche Problem sollte (?!?) Gleichbedeutend sein mit dem Finden des :vi
mitvi∈{0,1},Di∈Z
quelle
Noch ein erweiterter Kommentar ... Könnte falsch sein.
Ich denke auch über den Fall mit Boden- / Deckenbeschränkungen nach und versuche, ihn mit dynamischer Programmierung zu lösen (ich kann nicht, aber vielleicht funktioniert es, wenn der gemeinsame Teiler klein ist).
Sei der Bruchteil von , betrachten wir die Dinge vom kleinsten bis zum größten. Angenommen, die größte ist , und weil wir dynamische Programmierung betreiben, wissen wir bereits "etwas" (ich werde erklären, was dies ist) über die optimale Lösung für alles andere außer .{xi} xi {xi} {xk} xk
Betrachten Sie nun den Unterschied in der Zielfunktion, wenn wir auf- oder abrunden. Wenn ursprünglich etwas aufgerundet ist, dann ist die Differenz einfach 1 (nicht wirklich sorgfältig geprüft, aber es scheint so, als ob dies der Fall ist, ist es wirklich wichtig, dass unabhängig davon, ob links oder rechts von , die Differenz ist immer gleich); Wenn ursprünglich etwas abgerundet ist, beträgt die Differenz . Also: Wir wissen, welche Entscheidung wir treffen sollen, wenn die folgenden drei Größen bekannt sind:xk xi xi xk xi 2{xk}−2{xi}−1
OK, 1 und 2 sind im Wesentlichen gleich, wir können f [N, Ndown, Sdown] die optimale Lösung für die ersten N Punkte sein lassen (wenn die Punkte in aufsteigender Reihenfolge von sortiert sind ), die Anzahl von ‚s abgerundet ist Ndown, und die Summe von für diejenigen , die abgerundet sind , ist Sdown. Dann ist es nicht schwer zu schreiben, wie man von f [N-1] nach f [N] geht.{xi} xi {xi}
Das Problem ist natürlich, dass Sdown exponentiell viele Werte haben kann. Aber es funktioniert, wenn entweder der gemeinsame Divisor klein ist, oder wir können alles zuerst auf einen Gitterpunkt runden und ein FPTAS erhalten (wenn das obige dynamische Programm korrekt ist ...)
quelle