把数组转换为数值,数组散列
时间:10-02
整理:3721RD
点击:
一个一维数组,维数长度为n(0<n<=16),其元素由0-(n-1)组成,且每个元素只出现一次,即该数组的例如以下形式:
0,1,2,3,4,5
0,2,3,1,5,4,6
0,3,2,1
3,1,2,4,0
由此可知,对于长度为n的数组,其可能的数组有n!(n的阶乘)种,如:
n=1,数组有1种:0
n=2,数组有2种:0,1;1,0
n=3,数组有6种:0,1,2;0,2,1;1,0,2;1,2,0;2,0,1;2,1,0
现求一种散列算法,将一个长度为n数组转换为一个数值,数值可选U64格式,其转换的范围为0~n!,
数组与数值是一一对应关系即可。
0,1,2,3,4,5
0,2,3,1,5,4,6
0,3,2,1
3,1,2,4,0
由此可知,对于长度为n的数组,其可能的数组有n!(n的阶乘)种,如:
n=1,数组有1种:0
n=2,数组有2种:0,1;1,0
n=3,数组有6种:0,1,2;0,2,1;1,0,2;1,2,0;2,0,1;2,1,0
现求一种散列算法,将一个长度为n数组转换为一个数值,数值可选U64格式,其转换的范围为0~n!,
数组与数值是一一对应关系即可。
找到方法了,这个就是康托展开,百度搜索即可。
或参考http://blog.csdn.net/u010372095/article/details/9904497
在数码问题、魔盘问题的智能算法中会用到。
方法越简单越好,求大神帮忙解答~~
时间复杂度越小越好,空间复杂度符合一般电脑使用即可。
自己顶一下~~~~~
没有人会吗?求大神!
看上去难度不小啊……
好麻烦的散列啊,看了下没看懂,小编解决了吗
说错了,不是魔盒,是魔板。
这个问题问的不错~~编程常见的算法问题。
解决了,原来这个就是康托展开……
学习学习
