我需要将a和b之间的任何m个整数(其中b-a> m)映射到0到m-1之间的整数的函数。 a和b之间的m个整数可能不任何顺序。映射可以是任何顺序,只要它是一对一映射即可。
例如,我有一组10到50之间的整数,我随机选择任意 10个整数,并将它们映射到0-9。该函数可以采用一个,两个或三个输入,这些输入对于这10个整数的每组可能是不同的。还有一件事,它必须是可逆的,即使用那些输入我可以取回原始数字。
是否存在这样的功能,是否可能?
答案 0 :(得分:1)
这很容易。将最小的数字映射到0,将第二个最小的数字映射到1,等等。当且仅当您知道开头的数字集时,地图才是可逆的。
答案 1 :(得分:1)
听起来你要求minimal perfect hash。这些功能确实存在,有找到它们的算法,甚至preexisting libraries to do the work。