为每个输入重现相同数字的功能

时间:2013-04-23 20:15:30

标签: algorithm math

假设您有一些由2列和10亿行组成的数据,例如:

0,0
1,0
2,3
3,2
etc

我想创建一个函数,如果从第一列给出输入,它将始终给出第2列中的内容,以便它将第一列到第二列的值映射为与数据中出现的相同。

第1列从0到1E9(十亿)

顺序排列

第2列只能是{0,1,2,3}

我不想将数据存储在数组中。我想要能够计算此地图的代码。

有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果键是密集的,1d数组应该是权重[key] = weight

否则,如果键是稀疏的,则查找结构(如字典)将起作用。

不确定您是否还需要随机部分的帮助,但累积总和和兰特(总和(权重))将随机选择,并对具有较大权重的数字进行偏差。

编辑的清晰度权重是数组

答案 1 :(得分:1)

假设@ munch1324正确,问题是:

给定1000个数据点的集合,动态生成与数据集匹配的函数。

然后是的,我认为这是可能的。但是,如果你的目标是使函数成为数据集合的更紧凑的表示,那么我认为你运气不好。

以下是两种可能性:

Piecewise-defined function

int function foo(int x)
{
  if (x==0) return 0;
  if (x==1) return 0;
  if (x==2) return 3;
  if (x==3) return 4;
  ...
}

Polynomial interpolation

N个数据点可以拟合精确匹配N-1度多项式。

考虑到1000个数据点的集合,使用您最喜欢的方法来求解999度多项式的1000个系数。

您的结果函数将是:

int[] c; // Array of 1000 polynomial coefficients that you solved for when given the data collection
...
int function foo(int x)
{
  return c[999]*x^999 + c[998]*x^998 + ... + c[1]*x + c[0];
}

这有明显的问题,因为你有1000个系数存储,并且会有数值问题将x值提升到如此高的权力。

如果您正在寻找更高级的东西,Lagrange polynomial将为您提供适合所有数据点的最小度的多项式。