ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
421
421
EMPFEHLEN
-
Ich möchte den Wert finden der ab besten zu dem gesuchten Wert passt.
Und natürlich wenn möglich nicht mit einer naiven linearen Suche.
Angenommen ich hab folgenden <Float,Object> Baum
10.3f,x
15.5f,y
20.5f,z
Dann soll mir die Suche nach 11.0 x liefern
und die Suche nach 14 y
Geht sowas?
Kann mich erinnern dass es in der STL unter C++ sowas gab... aber hab nich so den plan von Java.
Danke in voraus.Geändert von Sovok (28.03.09 um 15:03 Uhr)
-
Liegen die Daten denn sortiert vor?
- Ich fotografiere mit Nikon -
Mehr zur Ausrüstung in meinem Profil
:: klein0r.de :: kleine-photo.com :: flickr ::
-
Ja die Daten sind sortiert.
Ich denk die beste möglichkeit ist mit arrays + binarySearch zu arbeiten und dann den Rückgabewert zu verwenden falls kein exakter match gefunden wird.
-
31.03.09 13:57 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.885
- Blog-Einträge
- 29
Hallo,
schau doch mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
package de.tutorials; import java.util.Arrays; import java.util.Comparator; public class FindNearestElementExample { /** * @param args */ public static void main(String[] args) { Double[] values = { 20.0, 12.1, 123.321, 123.001, 123.002, 295.3, 12.4, 100.0 }; Arrays.sort(values); System.out.println(Arrays.toString(values)); int index = findIn(values, 123.321); System.out.println(index + " " + values[index]); index = findIn(values, 12.3, 0.1); System.out.println(index + " " + values[index]); index = findIn(values, 123.0, 0.0011); System.out.println(index + " " + values[index]); index = findIn(values, 21, 1.0); System.out.println(index + " " + values[index]); } private static int findIn(Double[] values, double value) { return Arrays.binarySearch(values, value); } private static int findIn(Double[] values, double value, double tolerance) { return Arrays.binarySearch(values, value, new ToleranceAwareComparator(tolerance)); } static class ToleranceAwareComparator implements Comparator<Double> { double tolerance; public ToleranceAwareComparator(double tolerance) { this.tolerance = tolerance; } public int compare(Double o1, Double o2) { double delta = o1 - o2; if(Math.abs(delta) <= tolerance){ return 0; } return (int)Math.signum(delta); } }; }
Ausgabe:
Code :1 2 3 4 5
[12.1, 12.4, 20.0, 100.0, 123.001, 123.002, 123.321, 295.3] 6 123.321 1 12.4 4 123.001 2 20.0
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hi Tom,
DieIdee mit der Toleranz ist ein echt interessanter Ansatz....
Aber mal eine Frage, was macht Dein Programm wenn es keine Zahl in der gewünschten Toleranz findet, oder das erste Element in der toleranz ist aber ein zweites noch besser passt weil Unterschied kleiner?
Müsste man nicht eigentlich drei Werte miteinander vergleichen (tatsächlicher Wert, höherer Wert und niedriger Wert) und den nehmen, der tatsächlich den kleinsten Unterschied bedeutet?Geändert von takidoso (31.03.09 um 14:14 Uhr)
Ähnliche Themen
-
» Excel Excel 2010 Wert in einer Zelle anhand mehrerer Kriterien finden
Von Thomas Darimont im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 30.12.10, 19:10 -
Welches nummerische Feld ist am nähesten zu einem CommandButton
Von Giovanni7 im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 15.10.10, 08:18 -
Zählen wie oft ein Wert von 3 in einer Spalte zu finden ist
Von PostmanX im Forum Relationale DatenbanksystemeAntworten: 8Letzter Beitrag: 12.02.09, 20:49 -
Wert aus mySQL-Tabelle auslesen und je nach Wert vorher definierten Text ausgeben
Von RaffivK im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 03.10.08, 15:52 -
Naheliegenster Wert finden in Array
Von MariusMeier im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 5Letzter Beitrag: 09.04.08, 23:57





Zitieren

Login





