ermouth: (ang)
[personal profile] ermouth

Мне тут понадобилась простая хэш-функция с хорошим распределением и кратно более шустрая, чем md5, который я обычно использовал.

Найдено в BerkeleyDB, называется sdbm. Быстрее самых быстрых md5 реализаций для js в 8 примерно раз. На вход принимает не только строки, но и объекты-массивы там – чуток подправлено для js.



function sdbmCode(s0){
 for (var s=JSON.stringify(s0),hash=0,i=0;i<s.length;i++) hash=s.charCodeAt(i)+(hash<<6)+(hash<<16)-hash;
 return (1e11+hash).toString(36);
}


Последний пост в этом году )

UPD. Даёт довольно много коллизий. 6 коллизий на словаре английских слов 213000 уникальных вхождений.

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 1st, 2026 02:59 pm
Powered by Dreamwidth Studios