Was ist der heimtückischsten Weg, um dieses Problem zu stellen?
Frage
Mein bester Schuss so weit:
A Lieferfahrzeug muß eine Reihe von Lieferungen (d 1 , d 2 , ... d n ) machen, und kann so in beliebiger Reihenfolge tun - mit anderen Worten, alle möglichen Permutationen der Menge D = {d 1 , d 2 , ... d n } sind gültige Lösungen - aber die spezielle Lösung bestimmt werden muss, bevor es die Basisstation an einem Ende der Strecke (vorstellen, dass die Pakete in dem Fahrzeug LIFO geladen werden müssen, zum Beispiel) verläßt
Ferner sind die Kosten der verschiedenen Permutationen nicht das gleiche. Es kann als die Summe der Quadrate des Abstandes berechnet werden reiste zwischen d i-1 und d i , wobei d 0 genommen werden die Basisstation, mit dem Vorbehalt, dass jedes Segment, das einen Richtungswechsel kostet 3 mal so viel beinhaltet (man stelle sich dies vor sich geht auf einer Eisenbahn oder ein pneumatisches Rohr, und das Sichern stört anderen Verkehr).
die Gruppe von Lieferungen Given
D
als ihre Entfernung von der Basisstation dargestellt (soabs(d
i-d
j)
der Abstand zwischen zwei Lieferungen ist) und ein Iteratorpermutations(D)
die wird jede Permutation nacheinander erzeugen, eine Permutation finden, die ein Kosten als oder gleich der einer anderen Permutation weniger hat.
Nun wird eine direkte Umsetzung von dieser Beschreibung könnte Code wie folgt führen:
function Cost(D) ...
function Best_order(D)
for D1 in permutations(D)
Found = true
for D2 in permutations(D)
Found = false if cost(D2) > cost(D1)
return D1 if Found
Welche O (n * n! ^ 2), z.B. ziemlich schrecklich -. vor allem im Vergleich zum O (n log (n)) jemand mit Einsicht finden würde, indem man einfach D Sortierung
Meine Frage: kann man mit einer plausiblen Problembeschreibung kommen, die natürlich die unachtsamen in eine schlechter (oder anders schrecklich) Implementierung eines Sortieralgorithmus führen würden
?Lösung
Ich nehme an, Sie mit dieser Frage zu einem Interview zu sehen, ob der Antragsteller eine einfache Lösung in einer scheinbar komplexen Frage bemerken kann.
[Diese Annahme ist falsch - MarkusQ]
Sie geben zu viel Informationen.
Der Schlüssel zur Lösung dieses ist zu erkennen, dass die Punkte in einer Dimension sind und dass eine Art ist alles, was erforderlich ist. Um diese Frage schwieriger ausblenden machen diese Tatsache so viel wie möglich.
Der größte Anhaltspunkt ist der Abstand Formel. Es führt eine Strafe für die Richtungen zu ändern. Das erste, was ein, das mir in den Sinn kommt, ist minimiert diese Strafe. Um die Strafe entfernt ich muß sie in einer bestimmten Richtung bestellen, diese Reihenfolge ist die natürliche Sortierreihenfolge.
würde ich die Strafe für Richtungswechsel entfernen, es ist zu viel des Gebens weg.
Ein weiterer wichtiger Hinweis ist der Eingabewert für den Algorithmus: eine Liste von ganzen Zahlen. Geben Sie ihnen eine Liste von Permutationen, oder auch alle Permutationen. Das setzt sie bis zu denken, dass ein O (n!) Algorithmus könnte in der Tat zu erwarten.
Ich würde es als Ausdruck:
eine Liste aller möglichen Gegeben Permutationen von n Auslieferstellen, wobei jede Permutation von Lieferungen (D 1 , d 2 , ..., d n ) eine Kosten definiert durch:
![]()
Zurück Permutation P, so dass die Kosten für P klein oder gleich irgendein andere Permutation.
Alles, was wirklich getan werden muss, um in der ersten Permutation gelesen wird und es sortieren.
Wenn sie eine einzelne Schleife konstruieren die Kosten bitten, sie zu vergleichen, was die Big-o Laufzeit ihres Algorithmus ist, wobei n die Anzahl der Abladestellen ist (Eine weitere Falle).
Andere Tipps
Dies ist keine direkte Antwort, aber ich denke, mehr Klarheit erforderlich ist.
Ist d i erlaubt, negativ zu sein? Wenn ja, allein das Sortieren nicht genug ist, soweit ich sehen kann.
Zum Beispiel:
d
0 = 0
deliveries = (-1,1,1,2)
Es scheint der optimale Weg wäre in diesem Fall 1 > 2 > 1 > -1
werden.
Edit:. Dies könnte nicht wirklich der optimale Weg, aber es zeigt den Punkt
Man könnte es anders formulieren, fand eine erste die optimale Lösung, wie
"Gib mir einen Beweis dafür, dass die folgenden convination ist das optimal für den folgenden Satz von Regeln, in denen optimale bedeutet die kleinste Zahl ergibt sich aus der Summe aller Stufe Kosten, unter Berücksichtigung, dass alle Stufen (A..Z)
müssen einmal vorhanden sein und nur einmal.
Convination:
A->C->D->Y->P->...->N
Bühnenkosten:
A->B = 5,
B->A = 3,
A->C = 2,
C->A = 4,
...
...
...
Y->Z = 7,
Z->Y = 24."
Das sollte jemand damit beschäftigt für eine Weile halten.
Das erinnert mich an den Knapsackproblem , mehr als das Reisen Verkäufer. Aber die Knapsack ist auch ein NP-hartes Problem, so dass man die Menschen zu täuschen vielleicht in der Lage eine über komplexe Lösung mit dynamischer Programmierung auszudenken, wenn sie Ihr Problem mit dem Knapsack korrelieren. Wo das Grundproblem ist:
kann ein Wert von mindestens V erreicht werden ohne Überschreitung das Gewicht W?
Das Problem ist jetzt eine ziemlich gute Lösung gefunden werden kann, wenn V sind einzigartig, Ihre Distanzen, wie zum Beispiel:
Das Knapsackproblems mit jeder Art von Artikel j einen eindeutigen Wert, pro Gewichtseinheit (vj = pj / wj) ist eine der einfachsten betrachtet NP-vollständige Probleme. tatsächlich empirische Komplexität ist in der Größenordnung von O ((log n) 2) und sehr große Probleme können sein sehr schnell gelöst, z.B. 2003 der durchschnittliche Zeit, die erforderlich zu lösen Fälle mit n = 10.000 lag unter 14 Millisekunden mit Ware persönlich Computer 1 .
So möchten Sie vielleicht feststellen, dass mehrere Stationen / packages könnte die gleiche vj teilen und lädt die Menschen über die wirklich harte Lösung zu denken:
jedoch in der degenerierter Fall mehrerer Elemente den gleichen Wert teilen vj wird es viel schwieriger, mit der extremen Fall, in dem vj konstant ist das = Teilmenge Summe Problem mit einer Komplexität von O (2 n / 2N).
Wenn Sie also das Gewicht pro Wert auf Distanz per Wert ersetzen, und erklärt, dass mehrere Distanzen könnten tatsächlich die gleichen Werte teilen, degeneriert, einige Leute in dieser Falle tappen könnten.
Ist das nicht nur die (NP-Hard) Reisen Salesman Problem ? Es scheint nicht wahrscheinlich, dass Sie es sehr viel schwieriger machen werden.
Vielleicht Phrasierung das Problem, so dass der tatsächliche Algorithmus unklar ist - z.B. durch die Beschreibung der Pfade als Single-Rail-Bahnlinien, so würde die Person muss von Domain-Wissen ableiten, dass Rückzieher teurer sind.
Was die Frage so zu beschreiben, dass jemand rekursive comparisions zu tun versucht ist - z.B. „Sie können den Algorithmus zu beschleunigen, indem die optimale max Teil Ihrer besten (bisher) Ergebnisse mit“?
BTW, was ist der Zweck dieser - es klingt wie die Absicht, zu foltern Befragten ist.
Sie müssen sich auf klarer sein, ob die Lieferwagen auf Basis zurückzukehren haben (es eine Rundreise machen), oder nicht. Wenn der LKW hat zurück, dann eine einfache Art nicht produziert den kürzesten Weg, weil das Quadrat der Rückkehr aus dem am weitesten entfernten Punkt Kosten zu stützen so viel. Fehlen einige Sprünge auf dem Weg ‚out‘ und mit ihnen auf dem Weg erweist sich wieder billiger.
Wenn Sie jemand in eine schlechte Antwort Trick (zum Beispiel durch nicht ihnen alle Informationen geben), dann ist es ihre Dummheit oder Ihre Täuschung, die es verursacht hat?
Wie groß ist die Weisheit der Weisen, wenn sie ihr Ego Lügen nicht beachten?