Hashmethoden für Matrizen
-
Hallo,
ich kenne mich mit Hashmethoden so gar nicht aus, habe mal Google, Koders bzw. "The Code Project" bestöbert, und finde dort viele Methoden, wie SHA1, MD5 usw. welche vorwiegend für Dateien bzw. Character-Daten in Verwendung sind. Ich bräuchte diese Hashing Methode allerdings, um nun Sparse Matrizen eindeutig zu kennzeichnen.
Hat da jemand eine Idee, ausser die Matrizen in eine Datei zuschreiben und anschliessend zu hashen ?
Besten Dank für Zeit und Müh
Winn
-
Ich bin der Meinung deine Problembeschreibung ist unzureichend. Beschreibe doch genauer dein Problem, wie Typ der Matzizen, Typ der Einträge, Anzahl nicht Null Einträge.
-
Solls wirklich ein kryptographischer Hash sein, oder brauchst Du nur eine Implementierung von (z.B.) .hashCode() (Java)?
-
Spontan würde ich sagen, du kannst eine Matrix auch als lineare Datenfolge darstellen (und so durch eine Hash-Funktion jagen), indem du die Zeilen einfach hintereinander ausliest.
(bei dünn besetzten Matrizen kannst du auch eine Folge aus Zahlentripeln (i,j,Ai,j) speichern und hashen)
-
wie cstoll vorgeschlagen hat. gerade bei dünn besetzten matrizen ist es eh vorteilhaft, diese intern als lineare, indizierte folge zu speichern. diese folge kannst du dann als einfache zeichenfolge behandeln und durch einen beliebigen hash algorithmus laufen lassen, wie beipielsweise md5 oder sha1.
-
thordk schrieb:
wie cstoll vorgeschlagen hat. gerade bei dünn besetzten matrizen ist es eh vorteilhaft, diese intern als lineare, indizierte folge zu speichern. diese folge kannst du dann als einfache zeichenfolge behandeln und durch einen beliebigen hash algorithmus laufen lassen, wie beipielsweise md5 oder sha1.
Nun genau das ist mein bisheriger Ansatz, jede Zeile eine Matrix verstehe ich als spezifischen Nummernfolge und weise ihr einen Hashwert H zu, welchen ich mit dem Hashwert der vorhergegangen Zeile überlager, in der Art
H=\sum_{j=0}^{N\_j}\sum\_{i=0}^{N\_i}\;i\*Matrix(i,j)\*Primzahl(i+N\_{i}*j)Diese Berechnung ist schnell - ich bin aber kein Zahlentheoretiker und kann nicht abschätzen, ob ich nicht einen Hashwert H erhalten kann, welcher zu zwei verschiedenen Matrizen A, B gehört. Mein Verfahren muss aber auch schnell bleiben, also brauche ich etwas einfaches + sicheres, eine Umwandlung nach Character scheint mir bei meinen tausenden Matrizen die Schnelligkeit zu kippen...
- Hashberechnung nach MD5, SHA1 usw. könnte ich für Zeilen einer Matrix einführen - wie aber berechne ich Euerer Meinung nach die Überlagerung der Zeilenhashwerte zu einem globalen Hashwert einer Matrix ?
- Außerdem habe ich eine Nummernfolge von unsigned integer Positionen und double Werten, die klassischen Hashmethoden scheinen ausschließlich mit Unsigned Integer zu arbeiten ? Wie wandel ich in den Double Wert sinnig um ?
Vorschläge sind sehr willkommen
Winn
-
Winn schrieb:
Hashberechnung nach MD5, SHA1 usw. könnte ich für Zeilen einer Matrix einführen - wie aber berechne ich Euerer Meinung nach die Überlagerung der Zeilenhashwerte zu einem globalen Hashwert einer Matrix ?
Schreib doch alle Zeilen linear hintereinander, dann hast du nur eine Zeile. Hat doch weiter oben schon jemand vorgeschlagen.
Winn schrieb:
Außerdem habe ich eine Nummernfolge von unsigned integer Positionen und double Werten, die klassischen Hashmethoden scheinen ausschließlich mit Unsigned Integer zu arbeiten ? Wie wandel ich in den Double Wert sinnig um ?
Nimm doch einfach die oberen 32 Bit deines double-Wertes als ersten uint, die unteren 32 Bit als noch einen uint.
-
Taurin schrieb:
Nimm doch einfach die oberen 32 Bit deines double-Wertes als ersten uint, die unteren 32 Bit als noch einen uint.
Die einfachsten Lösungen neigen dazu, daß man sich mit der Hand auf die Stirn hämmert
Dankö