假设您有一些由2列和10亿行组成的数据,例如:
0,0
1,0
2,3
3,2
etc
我想创建一个函数,如果从第一列给出输入,它将始终给出第2列中的内容,以便它将第一列到第二列的值映射为与数据中出现的相同。
第1列从0到1E9(十亿)
顺序排列第2列只能是{0,1,2,3}
我不想将数据存储在数组中。我想要能够计算此地图的代码。
有什么想法吗?
提前致谢
答案 0 :(得分:2)
如果键是密集的,1d数组应该是权重[key] = weight
否则,如果键是稀疏的,则查找结构(如字典)将起作用。
不确定您是否还需要随机部分的帮助,但累积总和和兰特(总和(权重))将随机选择,并对具有较大权重的数字进行偏差。
编辑的清晰度权重是数组
答案 1 :(得分:1)
假设@ munch1324正确,问题是:
给定1000个数据点的集合,动态生成与数据集匹配的函数。
然后是的,我认为这是可能的。但是,如果你的目标是使函数成为数据集合的更紧凑的表示,那么我认为你运气不好。
以下是两种可能性:
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值提升到如此高的权力。
如果您正在寻找更高级的东西,Lagrange polynomial将为您提供适合所有数据点的最小度的多项式。