为每次输入复制相同数字的函数



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

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

我想创建一个函数,如果输入的是第1列的值,它总是给出第2列的值,这样它就会把第1列的值映射到第2列,就像它在数据中出现的那样。

第1列是从0到1E9(十亿)的顺序

列2只能为{0,1,2,3}

我不想把数据存储在数组中…我想要的代码可以计算这个地图。

任何想法?

Thanks in advance

如果键是密集的,则可以使用1d数组,其中weights[key] = weight

否则,如果键是稀疏的,像字典这样的查找结构就可以工作。

不确定你是否也需要随机部分的帮助,但是累积和和rand(sum(weights))将随机选择权重较大的数字。

为清晰编辑权重是数组

假设@munch1324是正确的,问题是:

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

那么是的,我认为这是可能的。但是,如果您的目标是让函数更紧凑地表示数据集合,那么我认为您就不太走运了。

有两种可能:

Piecewise-defined函数

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;
  ...
}

多项式插值

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值提高到如此高的幂会有数值问题。

如果你在寻找更高级的东西,拉格朗日多项式会给你最小次多项式,适合你所有的数据点

最新更新