!Иван FXS: - поясните, пожалуйста, выделенное. Это означает, что "основание" для mod ищем по нисходящей среди простых чисел начиная с самого большого, "умещающегося" в формат (unsigned long)?
А список этих простых чисел - как получать будем, не надорвемся?
И еще: Вы в своем постере дважды употребили обозначение n. Это - описка или в самом деле одно и то же число?
n-это размерность массива S.
Надорвётся только чел не знающий математики.
Задача поиска простого полиномиальна.
Могу привести первые несколько десятков тысяч простых чисел.
Вам что алгоритма ещё и код здесь писать ?
А зарплату платить будете ? :)
Сорри за эмоции перед теми к кому они не относятся.
Dip: С байтами наверное правильнее будет , чтобы не терять на выравнивании слов .
Люблю я себя цитировать.... :)
Похоже что нет необходимости ряд простых чисел P брать с конца диапазона. Можно и с начала.
А вообще почитайте классиков про хеш-функции.
Более того , ряд P можно брать не подряд а по приципу
P берём, P[i+1] берём , а P[i+2]-пропускаем
Получается двоичный вектор V размерности n.
Всего возможно 2^n-1 таких векторов.
Этот принцип можно использовать для многих полезных вещей.
1) Криптография. По сути не зная V правильной хеш-функции не найти.
То есть V может быть ключём шифрования симметричного типа.
2) Хеш-функций получается (2^n-1) штук.
Этот факт можно попробовать использовать ещё для чего-нибудь.
Хотя не думаю что такой индекс будет компактней чем сочетание
традиционных прямого и обратного. Но попробовать интересно.
PS:Вообщето звание абитуриента для меня крайне несвойственно.
Давайте повышайте статус. ;0)
Dip: 1) Слово рассматриваете как последовательность целых (unsigned long). Можно и байтов.
2) Считаете его контрольную S сумму по mod P , где P - простое и i-е с конца в (unsigned long)
Повторяете циклически 0< i <=n до тех пор пока не достигнете нужной вероятности коллизий.
Массив S[0..n] - будет искомым индексом.
С байтами наверное правильнее будет , чтобы не терять на выравнивании слов .
1) Слово рассматриваете как последовательность целых (unsigned long). Можно и байтов.
2) Считаете его контрольную S сумму по mod P , где P - простое и i-е с конца в (unsigned long)
Повторяете циклически 0< i <=n до тех пор пока не достигнете нужной вероятности коллизий.
Массив S[0..n] - будет искомым индексом.
Для байтов - последнее простое число 251
Вот например простое число 11111110000009
- поясните, пожалуйста, выделенное. Это означает, что "основание" для mod ищем по нисходящей среди простых чисел начиная с самого большого, "умещающегося" в формат (unsigned long)?
А список этих простых чисел - как получать будем, не надорвемся?
И еще: Вы в своем постере дважды употребили обозначение n. Это - описка или в самом деле одно и то же число?
n-это размерность массива S.
Надорвётся только чел не знающий математики.
Задача поиска простого полиномиальна.
Могу привести первые несколько десятков тысяч простых чисел.
Вам что алгоритма ещё и код здесь писать ?
А зарплату платить будете ? :)
Сорри за эмоции перед теми к кому они не относятся.
С байтами наверное правильнее будет , чтобы не терять на выравнивании слов .
Люблю я себя цитировать.... :)
Похоже что нет необходимости ряд простых чисел P брать с конца диапазона. Можно и с начала.
А вообще почитайте классиков про хеш-функции.
Более того , ряд P можно брать не подряд а по приципу
P берём, P[i+1] берём , а P[i+2]-пропускаем
Получается двоичный вектор V размерности n.
Всего возможно 2^n-1 таких векторов.
Этот принцип можно использовать для многих полезных вещей.
1) Криптография. По сути не зная V правильной хеш-функции не найти.
То есть V может быть ключём шифрования симметричного типа.
2) Хеш-функций получается (2^n-1) штук.
Этот факт можно попробовать использовать ещё для чего-нибудь.
Хотя не думаю что такой индекс будет компактней чем сочетание
традиционных прямого и обратного. Но попробовать интересно.
PS:Вообщето звание абитуриента для меня крайне несвойственно.
Давайте повышайте статус. ;0)
1) Слово рассматриваете как последовательность целых (unsigned long). Можно и байтов.
2) Считаете его контрольную S сумму по mod P , где P - простое и i-е с конца в (unsigned long)
Повторяете циклически 0< i <=n до тех пор пока не достигнете нужной вероятности коллизий.
Массив S[0..n] - будет искомым индексом.
С байтами наверное правильнее будет , чтобы не терять на выравнивании слов .
1) Слово рассматриваете как последовательность целых (unsigned long). Можно и байтов.
2) Считаете его контрольную S сумму по mod P , где P - простое и i-е с конца в (unsigned long)
Повторяете циклически 0< i <=n до тех пор пока не достигнете нужной вероятности коллизий.
Массив S[0..n] - будет искомым индексом.