Gegeben seien zwei Arrays erfüllen:Anzahl der Elemente, die eine Beziehung
2 5 6 4 3 7 1
5 1 6 2 3 7 4
zählen die Anzahl Elemente x, y
, die die Bedingung erfüllen, daß, bevor x
y
in beiden Arrays ist.
Fortschritt bisher:
sortieren Arrays durch ihre Indizes. Für das Beispiel wäre dies:
object: 1 2 3 4 5 6 7
indexes in the first array: 6 0 4 3 1 2 5
indexes in the secnod array: 1 3 4 6 0 2 5
und vergleichen Sie jedes Tupel mit einem anderen. Wenn das Tupel a
entweder beide Indizes niedriger oder höher als das Tupel b
aufweist, erhöhen Sie die Anzahl der Elemente, die die Bedingung erfüllen.
Dies hat die Zeitkomplexität von (N^2)/2, also O (N^2), was zu langsam ist. Ich verstehe, dass es keine bessere Worst-Case-Szenario-Komplexität geben kann, aber ich bin hauptsächlich am Durchschnittsergebnis interessiert. Also: Gibt es einen besseren Weg/Algorithmus?
Ich dachte über die Verwendung transitiver Eigenschaften (wenn sowohl (x,y)
und (y,z)
die Bedingung erfüllen, dann (x,z)
erfüllt es auch), aber ohne Glück.
Testfälle
Für Arrays:
2 5 6 4 3 7 1
5 1 6 2 3 7 4
Die Paare, die die Bedingung erfüllen, sind:
(5,1) (2,3) (2,4) (2,7) (5,3) (6,3) (3,7) (5,4) (6,4) (5,6) (5,7) (6,7)
Für Arrays:
1 2 3 4 5 6 7
1 2 3 4 5 6 7
Die Paare, die die Bedingung erfüllen, sind:
(1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (2,3) (2,4) (2,5) (2,6) (2,7) (3,4) (3,5) (3,6) (3,7) (4,5) (4,6) (4,7) (5,6) (5,7) (6,7)
'(x, y)' nimmt Werte '(2,5), (5,1), ..., (1,4)' in Ihrem Beispiel? –
In der ersten Reihe 2 ist vor 5, aber in der nächsten ist 5 vor 2. (5,1) ist jedoch wahr. (1,4) ist nicht. (6,7), (5,6) usw. ist richtig. – FigsHigs
Ah, ok. Haben Sie eine Reihe von Testfällen? –