"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Datenstruktur gesucht - zummenhängede vars

pinkey 14.06.2014 - 20:17 2217 9
Posts

pinkey

Here to stay
Registered: Nov 2003
Location: Tirol/Wien
Posts: 2274
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

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
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? :confused:

d3cod3

Legend
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15288
ich hab auch keinen schimmer was der plan ist :D

smashIt

master of disaster
Avatar
Registered: Feb 2004
Location: OÖ
Posts: 5209
Zitat von d3cod3
was der plan ist

weltherrschaft
oder etwa nicht?
:D

pinkey

Here to stay
Registered: Nov 2003
Location: Tirol/Wien
Posts: 2274
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
Avatar
Registered: Feb 2004
Location: OÖ
Posts: 5209
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
Avatar
Registered: Jan 2004
Location: /root/home
Posts: 1884
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
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15288
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
Avatar
Registered: Jan 2004
Location: /root/home
Posts: 1884
Vom Performance her eigentlich nicht, aber einfach. :)
Glaub kaum, dass er sichs zu kompliziert machen will.

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von pinkey
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?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz