Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

变进制Hash

Posted by wzhgba at 2010-05-29 19:49:47 on Problem 1077
In 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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator