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 (so abs(d i -d j ) der Abstand zwischen zwei Lieferungen ist) und ein Iterator permutations(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

?
War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top