Angenommen, Sie haben k
Arrays mit einer Größe N
, die jeweils eindeutige Werte von 1
bis enthalten N
.
Wie würden Sie die beiden Zahlen finden, die im Durchschnitt am weitesten voneinander entfernt sind?
Zum Beispiel angesichts der Arrays:
[1,4,2,3]
[4,2,3,1]
[2,3,4,1]
Dann wäre die Antwort item 1
und 2
, da sie in den ersten beiden Arrays einen Abstand von 2 und im letzten einen Abstand von 3 haben.
Mir ist eine O (kN ^ 2) -Lösung bekannt (durch Messen des Abstands zwischen jedem Zahlenpaar für jedes der k
Arrays), aber gibt es eine bessere Lösung?
Ich möchte einen solchen Algorithmus in C ++ implementieren, aber jede Beschreibung einer Lösung wäre hilfreich.
quelle
Ich habe einen Vorschlag für den besten Fall . Sie können einen heuristischen Ansatz verfolgen.
Zum Beispiel wissen Sie , dass , wenn
N=4
,N-1=3
wird der maximale Abstand sein und1
wird das Minimum sein. Der mittlere Abstand ist10/6=1,66667
(Summe der Abstände zwischen Paaren innerhalb eines Arrays / Anzahl der Paare innerhalb eines Arrays).Dann wissen Sie, dass zwei Zahlen, die sich
k/2
(meistens) an den Rändern von Arrays befinden, bereits im Durchschnitt oben liegen (> =2
Abstand), selbst wenn sie1
in den anderenk/2
Arrays nur Abstand voneinander haben . Das könnte eine Lösung für den besten Fall inO(2k)
= seinO(k)
.quelle