Функция хэширования зависящая только от набора символов

gfd

Guest
Функция хэширования зависящая только от набора символов

Существует ли функция хэширования зависящая только от набора символов и количества их повторений и не зависящая от порядка следования символов.

То есть:

PHP:
  hash_func("abcc")==hash_func("cacb");
 

gfd

Guest
fixxxer
Время на сортировку терять не хочется. Тексты большие и их много. Там, на самом деле порядок слов, меняется только. Можно конечно разбить на массив по словам отсортировать его сложить и md5, но это тоже время.

Есть еще варианты?
 

neko

tеam neko
тебе дали отличный вариант....
поверь -- md5 займет куда больше времени, чем сортировка
 

fixxxer

К.О.
Партнер клуба
> порядок слов, меняется только
function my_cool_hash($s)
{
sort($a=explode(" ",$s));
return md5(implode(" ",$a));
}

пойдет? :)
можешь измерить время, md5 занимает гораздо больше, чем explode+sort+implode.
 

gfd

Guest
fixxxer
function my_cool_hash($s)
{
sort($a=explode(" ",$s));
return md5(implode(" ",$a));
}
Там, на самом деле порядок слов, меняется только. Можно конечно разбить на массив по словам отсортировать его сложить и md5, но это тоже время.
То есть точно так оно у меня и работает(только разбивать нужно preg_split`ом). Я имел ввиду "есть ли другие врианты - лучше этого?"

Убедили, что это лучший:)
Спасибо.
 

rotoZOOM

ACM maniac
Есть еще способ (пусть глумятся надо мной гуру), он побыстрее работает, но выгода ощутима только на длинных строках:
PHP:
$a=array_fill (0,256,0);
for ($i=0;$i<strlen($str);$i++){
     $a[ord($str{$i})]++;
}
return md5(implode("",$a));
256 можно заменить на 128, в зависимости от набора гарантированных символов, встречающихся в строке.
 
Сверху