Ich versuche Platz zu sparen, indem Sie Hash-Werte von Zeichenfolgen. Ich habe eine sehr spezifische Anforderung, deren vereinfachte Beschreibung wie folgt lautet:Gibt es eine String-Hash-Funktion, die unterstützt h (x) + h (y) = h (x + y)
Ich habe zwei Sätze von Zeichenfolgenwerten und einen Wert wird in der Laufzeit bereitgestellt. Ich muss eine Liste aller Zeichenfolgen aus der zweiten Menge abrufen, die mit einer Zeichenfolge aus der ersten Menge beginnt und mit dem Abfragewert endet. Hier ist eine deutlich vereinfachte Darstellung und Beschreibung:
set1:
my_test_val_1
my_test_val_2
set2:
my_test_val_1_extended_to_another_value
my_test_val_2_extended_as_well
Mein Ziel Hash-Werte dieser Sätze wie in zu halten ist:
set1:
hash(my_test_val_1)
...
set2:
hash(my_test_val_1_extended_to_another_value)
auf Platz zu sparen und wenn ‚_extended_to_another_value‘ kommt als Abfrage, verwenden, um die Hash-Funktion mit distributive Eigenschaft über zusätzlich zu tun:
hash(my_test_val_1) + hash('_extended_to_another_value') = hash_value_to_search
Meine Suche versucht, eine Hash-Funktion zu finden, das diese Eigenschaft unterstützt hat die meisten p gescheitert robably aufgrund nicht die richtigen Keywords für die Suche verwendet wird, so dass selbst wenn Sie die richtigen Bedingungen für das, was beschreiben kann ich oben bin zu beschreiben, wäre es
Sie verlassen sich auf * nur * die Hashes zu halten? Was ist Ihr Plan für den Umgang mit Hash-Kollisionen? –
Welche Eigenschaften benötigen Sie von der resultierenden Hash-Funktion? Wie viele Bits können für den endgültigen Hash verwendet werden? – dhke
"müssen Sie eine Liste aller Zeichenfolgen aus der zweiten Gruppe abrufen, die mit einer Zeichenfolge aus der ersten Gruppe beginnt und mit dem Abfragewert endet." [Suchen Sie nach einem Trie?] (Http://en.wikipedia.org/wiki/Trie) – dasblinkenlight