nächst gelegensten Wert
-
Ein herzliches Hallo an Alle,
folgende Frage/Problem:
Ich habe eine feste Anzahl von festen Werten (z.B.Farbwerte) und eine Variable B (Farbwert) die sich während der Laufzeit ändert.
Ich benötige eine Funktion die mir den von B am nächsten gelegensten festen Wert zurück gibt.
Irgendwie habe ich noch keinen richtigen Ansatz gefunden.Für Tipps wäre ich sehr dankbar!!!
Gruß
mjac
-
Mit einer Schleife über dein Feld gehen und die Differenz zwischen dem Feldelement und deiner Variable testen.
Wo die Differenz am geringsten ist, bist du am nähesten dran.
-
Alle Werte in einen Binärbaum, dann nach dem Wert suchen. Wenn der Wert nicht drin ist bekommt man einen Nachbarn. Dann geht man zum anderen und nimmt den mit der kleineren Entfernung.
-
Schon mal Danke für eure Antworten!!
Binärbaum? Hab ich noch keine Ahnung von.
Vielleicht wäre ein kleines Schnipselchen Code möglich?Gruß
mjac
-
Ich gehe mal davon aus, daß deine Wertetabelle sortiert ist (wenn nicht - nachholen). Da kannst du dann mit dem Algo lower_bound() die Position herausfinden, an der dein Wert sein sollte und mußt ihn anschließend nur noch mit dem nächstgrößeren Wert vergleichen:
vector<int> values;//mögliche Werte - SORTIERT int aktuell; vector<int>::iterator pos = lower_bound(values.begin(),values.end(),aktuell); if(pos=values.begin()) return *pos; int diff1 = aktuell - *(pos-1); int diff2 = *pos - aktuell; if(diff1<diff2) return *(pos-1); else return *pos;
(wenn sich die Tabelle oft ändern kann, würde ich statt des vector<> ein set<> empfehlen)