| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
变进制HashIn Reply To:有哪位可以详细讲下这道题的HASH构造啊。。。 Posted by:cmxcn at 2010-05-24 18:36:07 首先介绍变进制概念:
所谓变进制,就是一个数字串的不同位置的进制不同。也就是说,和十进制或者二进制不同,变进制数并不是每逢一个常数(例如10或者2)进一,而可能在个位逢2进1,在十位逢6进一等等。
八数码状态一定是一个全排列数。而全排列数有一个非常完美的变进制Hash方法。
全排列变进制数表是{8!, 7!, 6!, 5!, 4!, 3!, 2!, 1!, 0!}
(在这里最后一个0!实际上是用不着的)
下面来说明变进制数码的获得方法
对于一个全排列数的第i位,遍历第(j = i+1 ~ 9)位,统计逆序数(也就是a[i]>a[j]的情况),而这个逆序数恰恰就是第i个变进制数码。根据n进制hash的规则,只要将一个变进制数的每一位变进制数码(也就是之前求得的逆序数)乘以那一位所对应的进制数(从变进制数表中获得),累加即可。
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator