将数字编码到结果中

时间:2011-09-16 20:58:14

标签: algorithm math

在我的应用程序中,我需要通过算法运行一个5位数的数字,并在给定的时间间隔内返回一个数字,即:

函数编码,获取3个参数,5个数字的初始数,间隔下限和间隔上限,例如: int res = encode(12879,10,100)返回83。

该函数从12879开始并对数字执行某些操作并返回10到100之间的数字。这不能是随机的,每次将数字12879传递给encode函数时,必须始终返回相同的数字。

有什么想法吗?

谢谢, Direz

3 个答案:

答案 0 :(得分:2)

你可以做一些简单的事情,比如

encode(x,y,z) --> y + (x mod (z-y))

答案 1 :(得分:2)

一种可能的方法:

  1. 计算区间R =(100 - 10)+ 1
  2. 的范围
  3. 计算输入H = hash(12879)%R
  4. 的散列模R
  5. 将下限添加到模块化哈希值V = 10 + H
  6. 这里的事情 - 你还没有对产生结果的“算法”定义任何约束或要求。如果您想要的只是将值映射到给定范围(不知道输入的分布,或输入值如何聚类等),您可以轻松地只取输入的范围模数没有散列(如Foo Bah演示)。

    如果encode方法的输入或输出存在某些约束,要求或分布,则该方法可能需要完全不同。但是,您是唯一知道您有哪些额外要求的人。

答案 2 :(得分:0)

此功能没有上限?

假设它是99999,因为它是5位数。对于您的情况,最简单的方法是:

int encode (double N,double H,double L)
{
   return (int)(((H - L) / (99999 - 10000)) * (N - 10000) + 10);
}