000
12.10.2006, 19:50 Uhr
~grimmel
Gast
|
Ich habe Probleme einen Begin zu starten...vielleicht hat jemand eine gute Idee... Mein Problem hat sich nun so verändert: Ich habe immer einen Vektor mit mehreren verschiedenen double werten z.B so: v1 = [-2.5, 3.0, 0.0, -6.0, 7.3] und immer einen zugehörigen 2ten vektor der ein einheitsvektor ist. z.B so: e1 = [0.0, 0.0, 0.0, 1.0, 0.0] Aus diesen 2 eingaben wird zusätzlich folgendes errechnet: * aus v1 wird eine qr zerlegung gemacht also v1 wird verändert und hat neue werte * ein weiterer vektor mit double werten (wie er errechnet wird ist egal) - sieht z.B so aus: t1 = [-3.889, 2.56, 0.0] * ein 2ter weiterer vektor mit double werten z.B m1 = [-9.004, 8.0] UNd folgendes wird am Ende gebraucht: * ein vektor der nur aus 0en und 1en besteht: p1 = [1,0,0,1,0] Nun zum Hashing: Am Anfang würde ich gerne testen ob eine Berechnung bereits einmal stattgefunden hat. Wenn also v1 schon mal berechnet wurde UND e1 gleich ist also beide vektoren schonmal für eine berechnung verwendet wurden dann gib mir einfach nur das berechnete m1 und p1 zurück. Falls aber NUR v1 verwendet wurde aber z.B e2 so aussieht: e2 = [1.0,0.0,0.0,0.0,0.0] dann gibt mir bitte nur das neue v1 (die qr zerlegung) zurück und zusätzlich t1 und p1. Jetzt wird die berechnung gestartet um m1 zu berechnen. Nochmal vielleicht in pseudocode:
Code: |
if v1' == v1: if e1' == e1: return m1 && return p1 else: return v1 && return t1 && return p1 -> und führe die berechnung weiter mit diesen werten fort um m1 zu berechnen else: berechne erst das neue v1 und t1 und daraus das neue m1 UND speichere alle ergebnisse im hash
|
Jetzt kommt der Knackpunkt: Das nachschauen ob etwas berechnet wurde will ich mit einem Hash realisieren. Nur frage ich mich wie ich das eindeutig ohne kollisionen bewerkstelligen kann? ich müsste also den schlüssel irgendwie aus den elementen von v1 und e1 bauen??? e1 könnte man einfach nur als reinen integer sehen an welcher stelle sich die "1" befindet! Dann wüsste ich nicht wie ich mehrere vektoren im hash speichern sollte also der zugriff z.B nur auf t1 ...? also sowas mein ich: t1 = hash[key] und m1 = hash[key] wobei key gleich ist...also unter demselben schlüssel gäbe es ja eine reihe von vektoren die zu speichern wären...??? Evtl. in einer structure speichern und diese structure im hash speichern? Zusätzlich bräuchte ich Hilfe welches hash ich nehmen sollte....ich glaube nicht dass eine einfach stl::map da ausreicht oder? Ist der zugriff da schnell? Wenn ich eine eigenen hash- funktion haben will was ich ja evtl. brauche um den schlüssel zu generieren sollte ich da nicht evtl. sowas wie hash_map verwenden? Und wenn ich sogar eine eigene Implementierung eines hashes brauche - (was ich nicht hoffe) welche datenstruktur müsste ich dann hernehmen? ein Array? Evtl. 2-dimensional? Für Hilfe bin ich sehr dankbar! |