假设您有一些由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值提高到如此高的幂会有数值问题。
如果你在寻找更高级的东西,拉格朗日多项式会给你最小次多项式,适合你所有的数据点