把数组转换为数值,数组散列

2019-07-17 16:24发布

一个一维数组,维数长度为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!,
数组与数值是一一对应关系即可。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
bamenwhj
1楼-- · 2019-07-17 22:18
找到方法了,这个就是康托展开,百度搜索即可。
或参考http://blog.csdn.net/u010372095/article/details/9904497
在数码问题、魔盘问题的智能算法中会用到。 最佳答案
LabVIEW2016
2楼-- · 2019-07-18 00:41
 精彩回答 2  元偷偷看……
LabVIEW2016
3楼-- · 2019-07-18 02:26
时间复杂度越小越好,空间复杂度符合一般电脑使用即可。
LabVIEW2016
4楼-- · 2019-07-18 06:47
自己顶一下~~~~~
LabVIEW2016
5楼-- · 2019-07-18 09:16
没有人会吗?求大神!!!
bamenwhj
6楼-- · 2019-07-18 12:04
看上去难度不小啊……

一周热门 更多>