N
Nico(Gast)
Gast
Hallo,
ich muss in meinem Programm int[] der selben Länge und von gleichem Inhalt vergleichen. Dabei kommt es auf die Reihenfolge der Zahlen an. Meine Arrays sind dabei bis zu mehreren tausend Zahlen groß, und müssen ziemlich oft verglichen werden. Daher schließt sich auf Grund der Laufzeit ein "eins zu eins" Vergleich aus.
Meine Frage ist nun, lässt sich eine eindeutige (oder zumindest hinreichend eindeutig) Zahl berechnen, sodass ich auf Grund der Zahl ausschließen kann, dass zwei Arrays genau die selbe Form haben? Es kann dabei durchaus vorkommen, dass die Arrays bis auf wenige Stellen genau gleich sind.
Anwendung:
Ich habe eine Liste von Arrays, die schon einmal betrachtet wurden. Nun wird ein neuer Array erstellt. Dieser soll mit allen Arrays der immer größer werdenden Liste verglichen werden und nur wenn die Zahlen in der vorliegenden Reihenfolge so noch nie betrachtet wurden, soll der Array weiter verarbeitet werden.
Bisher verwende ich die folgende Formel um einen Vergleichswert zu erhalten:
wobei ich nicht sicher bin ob die so berechnete Zahl durch die Rundung zumindest annähernd eindeutig ist. Die Wurzel und der Bruch sind notwendig um die Zahl nicht zu groß werden zu lassen.
Ich hoffe jemand hat eine Idee, wie man das besser machen kann.
Gruß Nico
ich muss in meinem Programm int[] der selben Länge und von gleichem Inhalt vergleichen. Dabei kommt es auf die Reihenfolge der Zahlen an. Meine Arrays sind dabei bis zu mehreren tausend Zahlen groß, und müssen ziemlich oft verglichen werden. Daher schließt sich auf Grund der Laufzeit ein "eins zu eins" Vergleich aus.
Meine Frage ist nun, lässt sich eine eindeutige (oder zumindest hinreichend eindeutig) Zahl berechnen, sodass ich auf Grund der Zahl ausschließen kann, dass zwei Arrays genau die selbe Form haben? Es kann dabei durchaus vorkommen, dass die Arrays bis auf wenige Stellen genau gleich sind.
Anwendung:
Ich habe eine Liste von Arrays, die schon einmal betrachtet wurden. Nun wird ein neuer Array erstellt. Dieser soll mit allen Arrays der immer größer werdenden Liste verglichen werden und nur wenn die Zahlen in der vorliegenden Reihenfolge so noch nie betrachtet wurden, soll der Array weiter verarbeitet werden.
Bisher verwende ich die folgende Formel um einen Vergleichswert zu erhalten:
Code:
double value =0;
for (int i = 0; i < array.length; i++) {
value += Math.sqrt(((i+1)*array[i]))/Math.sqrt(array.length);
}
wobei ich nicht sicher bin ob die so berechnete Zahl durch die Rundung zumindest annähernd eindeutig ist. Die Wurzel und der Bruch sind notwendig um die Zahl nicht zu groß werden zu lassen.
Ich hoffe jemand hat eine Idee, wie man das besser machen kann.
Gruß Nico