数值映射的几种实现

160 阅读1分钟

最近某社区有人发起个讨论
如何实现 0-0 1-80 2-160 3-255 的映射
这里给出两种方法

哈西表

开发中最常见的是用一个 Map 来维护映射关系

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(0,0);
map.put(1,80);
map.put(2,160);
map.put(3,255);

插值法

本质是构造一个多项式函数,让这个函数满足特定一组输入输出
通过下面的工具可以得到满足条件的多项式函数如下
zh.planetcalc.com/9023/

f(x)=52x3152x2+85xf(x)=\frac{5}{2} x^3-\frac{15}{2} x^2+85x

总结

个人倾向第一种方法,符合工程思维,也相当好维护。
插值法有几个缺点:
1.数学公式转代码有很多细节需要处理:比如分数的处理,结果的精确度
2.不好维护,映射改了需要重新算出多项式参数
3.效率并不高,直接算的话有10次四则运算