2017-11-05 1 views
0

Ist es möglich, einen benutzerdefinierten Hash-Algorithmus zu erstellen, der eine Ganzzahl innerhalb eines bestimmten Bereichs bereitstellen kann? Beispiel unten.Benutzerdefinierter Hash-Algorithmus

(a, b) ist die Eingabe für den Hash. (a, b)! = (b, a) wobei a und b beide ganze Zahlen sind> = 0

Die Lösung muss innerhalb des Bereichs (min, max) liegen.

Wäre das möglich? Damit möchte ich (a, b) bei zwei Gelegenheiten hashen, um die gleiche ganze Zahl zu liefern, wenn auch die gleiche Entfernung gegeben wird.

Vielen Dank.

+2

Ja, natürlich wäre es möglich. Warum versuchst du nicht, einen zu schreiben? –

+0

Sie könnten von hier starten: [hashCode()] (https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()) und um Zahlen zwischen einem bestimmten zu bekommen Bereich, den Sie verwenden können [modulare Arithmetik] (https://en.wikipedia.org/wiki/Modular_arithmetic) – Marco

+0

Es ist unmöglich zu garantieren, dass (a, b)! = (b, a). Hashes sind nicht kollisionsfest. – shmosel

Antwort

1

(a, b) ist die Eingabe in den Hash. (A, b)! = (B, a) wobei a und b sind beide ganzen Zahlen> = 0

No. a = b Angenommen, dann (a, b) = (b, a). Diese Einschränkung verletzt die Konsistenz des Hashing daher unmöglich

+0

Das ist ein guter Punkt. Was wäre, wenn wir annehmen würden, dass (a, b) nicht gleich sein kann (b, a) außer für den Fall, dass sie gleich waren? Oder würde annehmen, dass das in dieser einen Situation auch unmöglich war? – Jamie

+0

@Jamie Dann ist es möglich. Aber es wird schwer sein, einen guten zu finden, wenn (a, b)! = (A, b) für alle a, b. Die einfachste Lösung wäre einfach a - b. Aber das ist nicht gut, weil es nicht gleichmäßig verteilt sein kann, wenn a und b ein Muster haben. Das Problem der minimalen, maximalen Reichweite zu lösen, ist ziemlich einfach. Wechseln Sie einfach Ihren Hash-Wert in min + h% p, wobei p eine Primzahl ist, die nicht größer als (max - min) ist. – Will

Verwandte Themen