Datenstruktur gesucht - zummenhängede vars
pinkey 14.06.2014 - 20:17 2217 9
pinkey
Here to stay
|
Ich bin derzeit nur auf mühsam Lösungen bzw. workarounds gestoßen, aber wie mach ich am einfachsten in c, notfalls auch c++ (eigentlich egal) sowas ähnliches wie multimaps.
was ich brauch: ich hab mehrere iterationen und bei jedem durchgang wird der aktuelle wert (sind viele) als historie hinterlegt. auf die historiewerte soll zugegriffen werden können sowie wenn ich eine historie lösche (egal welche, wird aber meist entweder die älteteste oder neuste sein) dann sollen alle anderen auch mitgelöscht werden. die zuordnung zwischen den historischen daten und aktuellen daten muss erhalten bleiben.
z.b. suchen in den daten is eigentlich nicht wichtig ... gibts da irgendwas gschicktes ootb ohne zusätzliches zeug wie boost o.ä verwenden zu müssen?
danke!
|
that
ModeratorHoffnungsloser Optimist
|
Ich hab deine Beschreibung jetzt dreimal gelesen, verstehe aber noch immer nicht was du meinst. Du hast "Iterationen", und "Durchgänge" (oder ist das eine Iteration?) - und der aktuelle Wert sind viele? Und wenn du eine Historie löschst, dann sollen alle anderen gelöscht werden, aber irgendeine Zuordnung zwischen den gelöschten Daten muss erhalten bleiben?
|
d3cod3
Legend...
|
ich hab auch keinen schimmer was der plan ist
|
smashIt
master of disaster
|
was der plan ist weltherrschaft oder etwa nicht?
|
pinkey
Here to stay
|
ok, habs mir eh gedacht, dass das nicht gut erklärt is ^^
bissl ausführlicher bzw. hintergrund. ich bearbeite bilder bzw. frames von nem video. dabei werden punkte erkannt und getrackt. von frame zu frame. d.h. ich hab derzeit ein vector mit den vorigen punkten und mit den aktuellen. die gehören zusammen, sind aber derzeit nicht speziell verknüpft. dann hab ich mehrere filterstufen wo diverse punkte entfernt werden und auch funktionen wo neue hinzukommen.
was ich jetzt will ist, dass eine historie hab wo ich ich sag mal bis 5 frames vorher abfragen und sagen kann, das der aktuelle punkt 200 mit punkt 100, 150, 189 und 133 aus stmmt bzw. verknüpft ist. weiters wirds erst ab hausnummer den 5 getrackten punkten relevant. d.h. ich muss auch abfragen können ob der aktuelle punkt jetzt bereits 1 2 3 oder 4 vorgänger hat. wenn <5 nicht relevant. wenn ich jetzt 1 punkt beim tracking verlier bzw. rausfilter sollen natürlich auch alle vorgänger gelöscht werden.
die schwierigkeit die ich dabei hab is eigentlich das immer wieder neue punkte dazu oder auch wegkommen und ich daher nicht so 100% weiß wie ich das am besten abspeicher um möglichst einfach darauf zuzugreifen. vorallem auch das ich weiß welche punkte mit welchen zusammengehören. ich würd halt ungern selbst ids verwalten müssen, das sollte nach möglich auch automatisch erfolgen.
ich hoffe das is jetzt etwas klarer?
|
smashIt
master of disaster
|
würde ich wie eine bouble-linked-list aufbaun, nur 2-dimensional
hast dann allso deine daten des punktes (koordinaten, farbe, wasweisich) und 4 pointer auf nachbar-elemente ein pointer-paar um die punkte innerhalb eines frames zu durchlaufen, das andere für die history
|
cr0ssSyntaX
der quotenchinese
|
Hört sich so an, dass du eine List braucht. Weiß jetzt nicht mehr wie es in C ist, aber zB in C++ und C# durchaus kein Problem.
Push: die Daten einspielen in die Liste (somit der Zusammenhang) Pull: halt raus(löschen) Und musst halt dann auch auf die Datensätze zugreifen. In C durch Pointer zB
|
d3cod3
Legend...
|
der einfachheit halber würd ich da auch einfach listen herumschupfen. ob das jetzt der beste weg ist von der performance her kann ich aber spontan nicht sagen.
|
cr0ssSyntaX
der quotenchinese
|
Vom Performance her eigentlich nicht, aber einfach. Glaub kaum, dass er sichs zu kompliziert machen will.
|
that
ModeratorHoffnungsloser Optimist
|
ich hoffe das is jetzt etwas klarer? Ja, aber noch nicht ganz. Angenommen du scannst Frame 1 und findest 2 Punkte, sagen wir A und B. OK, die kannst du irgendwo eintragen. Dann scannst du Frame 2 - verwendest du da bereits die Information, wo A und B vorher waren? Weil falls ja, dann kannst du ja die neuen Positionen direkt an der Stelle dazuhängen, wo du die Daten der bekannten Punkte verarbeitest. Falls nein, wie findest du dann heraus, dass z.B. A sich bewegt hat, B verschwunden ist, und dafür C dazugekommen ist?
|