Ich habe Arrays a 1 zu einem n jeweils mit m Anzahl von Elementen. Ich habe eine andere symmetrische n X n Matrix b , die den Abstand zwischen den Arrays enthält. Ich möchte ein Element aus jedem Array x 1 bis x
Ein Beispiel
%Vor%Die ausgewählten Werte sind x 1 <8 und x 2> 4. Man kann feststellen, dass wir nicht 10 oder 11 von der zweiten Auswahl ausgewählt haben, weil sie so nah wie möglich sind Wert für jede von ihnen ist nur 0.
Jetzt, wenn ich nur zwei Arrays habe, kann ich folgendes in Java in O (n 2 ) Zeit machen, denke ich und finde die maximale Summe, die 12 in diesem Fall. Wie kann ich eine bessere Lösung für mehr als 2 Arrays erreichen?
%Vor%Sie können hier keine dynamische Programmierung verwenden, weil es keine optimale Unterstruktur gibt: Der Eintrag b_1n kann einen sehr wertvollen Pfad von x_1 nach x_ {n-1} ruinieren. Daher ist es wahrscheinlich schwierig, die exponentielle Zeit im Allgemeinen zu vermeiden. Für eine Reihe von b_ij, die die Auswahl vernünftigerweise einschränken, gibt es jedoch einen direkten Backtracking-Ansatz, der eine angemessene Leistung haben sollte:
Die Identifizierung der am stärksten eingeschränkten Anordnung ist für die Leistung entscheidend: Sie stellt eine Form der Fuzzy-Glaubenspropagation dar, die künftige Entscheidungen inkompatibel mit gegenwärtigen Entscheidungen, die durch vorherige Entscheidungen notwendig sind, einschränkt. Abhängig von der Art der Eingabe, die Sie erwarten, kann es sinnvoll sein, weitere Priorisierung / Bereinigung basierend auf erreichbaren Scores durchzuführen.
Meine 35-Zeilen-Python-Implementierung mit einer 10x10-Zufallsmatrix aus kleinen ganzen Zahlen und b_ij einer Konstanten 2 lief in wenigen Sekunden. b_ij = 3 (was bis zu 7 der 10 Werte für jedes Paar von Arrays erlaubt!) dauerte ungefähr eine Minute.