pracuję nad projektem elektronicznym z mikroprocesorem, który jest zaprogramowany w Calgorytm Hash w C do 16 map bajt wartości do 2 bajt wartości
muszę przechowywać niektóre identyfikatory i towarzyszące mu informacje pamięć flash (SD). Te ID mają długość 16 bajtów, więc są 2^128 możliwych wartości. Chociaż mają 16 bajtów, zostanie użytych tylko 50000 (unikalnych) wartości. Jest fizycznie niemożliwe, aby zapisać wszystkie możliwe (2^128) identyfikatory w SD.
Mógłbym przechowywać tylko 50000 użytych wartości, ale wtedy musiałbym przejść wszystkie (w najgorszym) z nich, aby znaleźć to, czego potrzebuję. Poza tym należałoby obliczyć 16-bajtowe porównanie wartości dla każdego z nich, co sprawia, że jest dość powolny.
Więc myślę, że potrzebowałbym jakiejś funkcji (hash?), Która odwzorowuje wartości 2^128 na 50000 (mapa 16 bajtów na 2 bajty). Jest oczywiste, że niektóre z pierwotnych wartości będą odwzorowywać tę samą wartość/indeks. Chodzi o to, że kiedy otrzymam identyfikator, stosuję funkcję skrótu, która daje mi indeks od 0 do ~ 50000 (0-65535). Dzięki temu indeksowi mogę uzyskać bezpośredni dostęp do sektora (-ów) SD, w którym przechowywany jest identyfikator i powiązane z nim informacje. Jak już wspomniałem, indeks ten będzie odnosił się do pozycji pamięci, w której różne identyfikatory będą współistnieć ze względu na różne identyfikatory przypisywane do tej samej wartości indeksu. Musiałbym znaleźć poprawny identyfikator, ale kosztowałoby to tylko kilka porównań zamiast 50000 oryginalnych.
Każdy pomysł/opinia byłaby naprawdę doceniana.
Z góry dziękuję.
Wymyślasz pojęcie "hash table" - google it. – user4815162342
Po prostu dodaj wszystkie bajty? –
Hash klawisze z 16-bitową sumą kontrolną lub hash. Mój pierwszy strzał to CRC16. –