Здравствуйте, Буравчик, Вы писали:
Б>Здравствуйте, Caracrist, Вы писали:
C>>десятичное число где по порядку идут количества всех букв: например для "example" это C>>10002000000110010000000100 C>>результат в большинстве случаев будет помещаться в 64 бита.
Б>Так нельзя. Будет много коллизий, когда количество вхождений букв в строке станет большим.
Б>Например Б>Строка a+10b: "abbbbbbbbbb" Б>Получаем: 11000000000000000000000000 (выделил количество букв B)
Б>Строка 11a: "aaaaaaaaaaa" Б>Получаем: 11000000000000000000000000 (выделил количество букв A)
Б>Видим одинаковый результат.
другой вариант:
берём все буквы и ассоциируем их с простыми числами для нескольки частей. допустим 4 части:
a 2, b 3,c 5,d 7,e 11,f 13,
g 2,h 3,i 5,j 7,k 11,l 13,
m 2,n 3,o 5,p 7,q 11,r 13,s 17,
t 2,u 3,v 5,w 7,x 11,y 13,z 17
И теперь считаем число для каждой части умножая на простое число по количеству присутствия. Можно добавлять дополнительные числа по мере надобности. Например выделить по 64 бита для каждого изначально.
"example"
242
13
14
11