Кодировать номер в результат - PullRequest
0 голосов
/ 17 сентября 2011

В моем приложении мне нужно запустить 5-значный номер через алгоритм и вернуть число между заданным интервалом, то есть:

Функция кодирует, получает 3 параметра, 5-значный начальный номер, нижний предел интервала и верхний предел интервала, например: int res = encode (12879,10,100) возвращает 83.

Функция начинается с 12879 и что-то делает с числами и возвращает число от 10 до 100. Это не должно быть случайным, каждый раз, когда я передаю число 12879 функции кодирования, всегда должно возвращаться одно и то же число.

Есть идеи?

Спасибо, Direz

Ответы [ 3 ]

2 голосов
/ 17 сентября 2011

Один из возможных подходов:

  1. вычисление диапазона вашего интервала R = (100 - 10) + 1
  2. вычисление хеш-функции по модулю R входного значения H = хеш (12879)% R
  3. добавьте нижнюю границу к модульному хешу V = 10 + H

Здесь дело в том, что вы не определили никаких ограничений или требований к «алгоритму»это дает результат.Если все, что вам нужно, это отобразить значение в заданном диапазоне (без каких-либо знаний о распределении входных данных или о том, как входные значения могут кластеризоваться и т. Д.), Вы можете просто взять диапазон по модулю входных данных без хеширования (как демонстрирует Фу Бах).

Если существуют определенные ограничения, требования или распределения входных или выходных данных вашего encode метода, то подход, возможно, должен быть совершенно другим.Однако вы единственный, кто знает, какие у вас дополнительные требования.

2 голосов
/ 17 сентября 2011

Вы можете сделать что-то простое, как

encode(x,y,z) --> y + (x mod (z-y))
0 голосов
/ 17 сентября 2011

У вас нет верхнего предела для этой функции?

Предположим, что это 99999, потому что это 5 цифр. Для вашего случая самый простой способ:

int encode (double N,double H,double L)
{
   return (int)(((H - L) / (99999 - 10000)) * (N - 10000) + 10);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...