青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

(轉)一種變進制數及其應用(全排列之Hash實現)

 

我們經常使用的(9php.com)數的(9php.com)進制為“常數進制”,即始終逢p進1。例如,p進制數K可表示為
    K = a0*p^0 + a1*p^1 + a2*p^2 + ... + an*p^n (其中0 <= ai <= p-1),
它可以表示任何一個自然數。

對于這種常數進制表示法,以及各種進制之間的(9php.com)轉換大家應該是很熟悉的(9php.com)了,但大家可能很少聽說變進制數。這里我要介紹一種特殊的(9php.com)變進制數,它能夠被用來實現全排列的(9php.com)Hash函數,并且該Hash函數能夠實現完美的(9php.com)防碰撞和空間利用(不會發生碰撞,且所有空間被完全使用,不多不少)。這種全排列Hash函數也被稱為全排列數化技術。下面,我們就來看看這種變進制數。

我們考查這樣一種變進制數:第1位逢2進1,第2位逢3進1,……,第n位逢n+1進1。它的(9php.com)表示形式為
    K = a1*1! + a2*2! + a3*3! + ... + an*n! (其中0 <= ai <= i),
也可以擴展為如下形式(因為按定義a0始終為0),以與p進制表示相對應:
    K = a0*0! + a1*1! + a2*2! + a3*3! + ... + an*n! (其中0 <= ai <= i)。
(后面的(9php.com)變進制數均指這種變進制數,且采用前一種表示法)

先讓我們來考查一下該變進制數的(9php.com)進位是否正確。假設變進制數K的(9php.com)第i位ai為i+1,需要進位,而ai*i!=(i+1)*i!=1*(i+1)!,即正確的(9php.com)向高位進1。這說明該變進制數能夠正確進位,從而是一種合法的(9php.com)計數方式。

接下來我們考查n位變進制數K的(9php.com)性質:
(1)當所有位ai均為i時,此時K有最大值
    MAX[K] = 1*1! + 2*2! + 3*3! + ... + n*n!
           = 1! + 1*1! + 2*2! + 3*3! + ... + n*n! - 1
           = (1+1)*1! + 2*2! + 3*3! + ... + n*n! - 1
           = 2! + 2*2! + 3*3! + ... + n*n! - 1
           = ...
           = (n+1)!-1
    因此,n位K進制數的(9php.com)最大值為(n+1)!-1。
(2)當所有位ai均為0時,此時K有最小值0。
因此,n位變進制數能夠表示0到(n+1)!-1的(9php.com)范圍內的(9php.com)所有自然數,共(n+1)!個。

在一些狀態空間搜索算法中,我們需要快速判斷某個狀態是否已經出現,此時常常使用Hash函數來實現。其中,有一類特殊的(9php.com)狀態空間,它們是由全排列產生的(9php.com),比如N數碼問題。對于n個元素的(9php.com)全排列,共產生n!個不同的(9php.com)排列或狀態。下面將討論如何使用這里的(9php.com)變進制數來實現一個針對全排列的(9php.com)Hash函數。

從數的(9php.com)角度來看,全排列和變進制數都用到了階乘。如果我們能夠用0到n!-1這n!個連續的(9php.com)變進制數來表示n個元素的(9php.com)所有排列,那么就能夠把全排列完全地數化,建立起全排列和自然數之間一一對應的(9php.com)關系,也就實現了一個完美的(9php.com)Hash函數。那么,我們的(9php.com)想法能否實現呢?答案是肯定的(9php.com),下面將進行討論。

假設我們有b0,b1,b2,b3,...,bn共n+1個不同的(9php.com)元素,并假設各元素之間有一種次序關系 b0<b1<b2<...<bn。對它們進行全排列,共產生(n+1)!種不同的(9php.com)排列。對于產生的(9php.com)任一排列 c0,c1,c2,..,cn,其中第i個元素ci(1 <= i <= n)與它前面的(9php.com)i個元素構成的(9php.com)逆序對的(9php.com)個數為di(0 <= di <= i),那么我們得到一個逆序數序列d1,d2,...,dn(0 <= di <= i)。這不就是前面的(9php.com)n位變進制數的(9php.com)各個位么?于是,我們用n位變進制數M來表示該排列:
   M = d1*1! + d2*2! + ... + dn*n!
因此,每個排列都可以按這種方式表示成一個n位變進制數。下面,我們來考查n位變進制數能否與n+1個元素的(9php.com)全排列建立起一一對應的(9php.com)關系。

由于n位變進制數能表示(n+1)!個不同的(9php.com)數,而n+1個元素的(9php.com)全排列剛好有(n+1)!個不同的(9php.com)排列,且每一個排列都已經能表示成一個n位變進制數。如果我們能夠證明任意兩個不同的(9php.com)排列產生兩個不同的(9php.com)變進制數,那么我們就可以得出結論:
★ 定理1 n+1個元素的(9php.com)全排列的(9php.com)每一個排列對應著一個不同的(9php.com)n位變進制數。

對于全排列的(9php.com)任意兩個不同的(9php.com)排列p0,p1,p2,...,pn(排列P)和q0,q1,q2,...,qn(排列Q),從后往前查找第一個不相同的(9php.com)元素,分別記為pi和qi(0 < i <= n)。
(1)如果qi > pi,那么,
如果在排列Q中qi之前的(9php.com)元素x與qi構成逆序對,即有x > qi,則在排列P中pi之前也有相同元素x > pi(因為x > qi且qi > pi),即在排列P中pi之前的(9php.com)元素x也與pi構成逆序對,所以pi的(9php.com)逆序數大于等于qi的(9php.com)逆序數。又qi與pi在排列P中構成pi的(9php.com)逆序對,所以pi的(9php.com)逆序數大于qi的(9php.com)逆序數。
(2)同理,如果pi > qi,那么qi的(9php.com)逆序數大于pi的(9php.com)逆序數。
因此,由(1)和(2)知,排列P和排列Q對應的(9php.com)變進制數至少有第i位不相同,即全排列的(9php.com)任意兩個不同的(9php.com)排列具有不同的(9php.com)變進制數。至此,定理1得證。

計算n個元素的(9php.com)一個排列的(9php.com)變進制數的(9php.com)算法大致如下(時間復雜度為O(n^2)):
template <typename T>
size_t PermutationToNumber(const T permutation[], int n)
{
    // n不能太大,否則會溢出(如果size_t為32位,則n <= 12)
    size_t result = 0;
    for (int j = 1; j < n; ++j) {
        int count = 0;
        for (int k = 0; k < j; ++k) {
            if (permutation[k] > permutation[j])
                ++count;
        }
        // factorials[j]保存著j!
        result += count * factorials[j];
    }

    return result;
}

說明:
(1)由于n!是一個很大的(9php.com)數,因此一般只能用于較小的(9php.com)n。
(2)有了計算排列的(9php.com)變進制數的(9php.com)算法,我們就可以使用一個大小為n!的(9php.com)數組來保存每一個排列的(9php.com)狀態,使用排列的(9php.com)變進制數作為數組下標,從而實現狀態的(9php.com)快速檢索。如果只是標記狀態是否出現,則可以用一位來標記狀態。


PS:    最近研究八數碼問題發現全排列的這種Hash方式的,后來在查找一些Hash函數時發現了變進制數這個東西的,發現它真是一個好東西,ACM中也經常用到..........

posted on 2009-08-04 11:13 蝸牛也Coding 閱讀(1207) 評論(1)  編輯 收藏 引用

評論

# re: (轉)一種變進制數及其應用(全排列之Hash實現) 2010-01-08 10:42 treg

這不是就康托展開。  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

導航

統計

常用鏈接

留言簿(8)

隨筆檔案(78)

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久久久久久| 欧美大片在线观看| 国内精品久久久久影院薰衣草| 欧美成人精品一区| 欧美电影免费观看高清完整版| 噜噜爱69成人精品| 免费日韩av| 欧美激情1区2区3区| 欧美日韩www| 国产精品成人免费视频| 国产精品久久国产精品99gif| 国产精品揄拍500视频| 国产欧美二区| 尤物九九久久国产精品的分类| 国产主播在线一区| 一区二区在线观看视频| 亚洲精品久久久蜜桃| 一区二区三区视频在线看| 香蕉成人伊视频在线观看| 美女视频黄免费的久久| 亚洲美女性视频| 亚洲欧美在线磁力| 免费观看30秒视频久久| 欧美另类亚洲| 国产亚洲精品一区二区| 亚洲精品一区二区三区99| 亚洲淫性视频| 麻豆成人小视频| 亚洲午夜未删减在线观看| 欧美一区视频| 欧美日韩一卡二卡| 欲色影视综合吧| 中文在线资源观看网站视频免费不卡| 欧美一区免费| 99视频在线精品国自产拍免费观看| 亚洲欧美日韩一区| 欧美高清视频在线播放| 国产欧美91| 亚洲一二区在线| 亚洲国产精品ⅴa在线观看| 亚洲午夜精品一区二区三区他趣| 欧美影院午夜播放| 国产精品久久久久久久久免费樱桃| 好看的亚洲午夜视频在线| 99re亚洲国产精品| 麻豆精品在线视频| 性欧美video另类hd性玩具| 欧美日韩精选| 欧美自拍偷拍| 亚洲成人自拍视频| 亚洲欧美日韩中文播放| 欧美精品在线免费播放| 亚洲福利久久| 免费不卡亚洲欧美| 欧美自拍偷拍| 国产主播精品在线| 欧美一区二区三区精品| 在线亚洲观看| 国产精品久久97| 日韩一区二区免费高清| 亚洲高清自拍| 欧美高清在线视频| 日韩香蕉视频| 91久久精品一区| 欧美大片在线观看一区| 亚洲欧洲精品一区二区精品久久久| 久久综合久久综合久久综合| 欧美一区国产在线| 在线精品一区二区| 欧美国产精品一区| 欧美国产乱视频| 一本大道久久a久久精品综合| 亚洲国产一区视频| 欧美女同在线视频| 亚洲欧美日韩成人| 欧美一级片在线播放| 黄色日韩网站| 91久久在线观看| 国产精品sm| 久久久久久午夜| 免费人成精品欧美精品| 一本久久知道综合久久| 亚洲视屏在线播放| 国产一区亚洲| 亚洲国内精品| 国产精品国产三级国产普通话蜜臀 | 亚洲第一中文字幕| 欧美亚洲日本网站| 欧美了一区在线观看| 一本色道久久| 亚洲一区二区三区四区在线观看| 久久久美女艺术照精彩视频福利播放| 亚洲欧美激情视频| 亚洲成人在线视频播放| 亚洲人体影院| 国产日本亚洲高清| 亚洲高清视频在线观看| 国产精品高清一区二区三区| 久久久精品性| 欧美日韩国产区一| 鲁大师成人一区二区三区| 欧美精品在线免费观看| 亚洲区免费影片| 国模精品娜娜一二三区| 亚洲女女做受ⅹxx高潮| 国产精品ⅴa在线观看h| 亚洲曰本av电影| 亚洲男人的天堂在线观看| 好吊色欧美一区二区三区四区| 老司机午夜精品| 免费亚洲电影| 久久精品中文字幕免费mv| 性做久久久久久免费观看欧美 | 中文亚洲视频在线| 免费不卡亚洲欧美| 国产精品久久久久久久久婷婷| 欧美+亚洲+精品+三区| 国产精品美女久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美精品久久99| 欧美成人69av| 亚洲精品国产精品国自产在线| 久久成人精品无人区| 麻豆乱码国产一区二区三区| 亚洲欧美日韩一区二区| 欧美国产日本在线| 女人天堂亚洲aⅴ在线观看| 国产一区二区三区黄| 亚洲婷婷综合色高清在线| 亚洲一区二区三区精品动漫| 欧美天堂亚洲电影院在线播放| 亚洲国产一区二区a毛片| 国产欧美精品一区二区三区介绍| 一区二区三区福利| 久久乐国产精品| 韩国精品在线观看| 亚洲欧洲av一区二区三区久久| 欧美在线视频a| 亚洲欧美日韩精品久久久| 亚洲精品影视在线观看| 麻豆精品精品国产自在97香蕉| 亚洲国产欧美在线| 亚洲激情不卡| 欧美+日本+国产+在线a∨观看| 亚洲日本免费| 性欧美1819性猛交| 老鸭窝亚洲一区二区三区| 好男人免费精品视频| 男女av一区三区二区色多| 亚洲精品日本| 亚洲性线免费观看视频成熟| 国产自产精品| 欧美丝袜一区二区| 久热精品视频在线观看| 国产欧美精品va在线观看| 亚洲欧美三级在线| 亚洲精品网站在线播放gif| 亚洲午夜女主播在线直播| 国产亚洲一级| 欧美理论在线| 欧美成人午夜激情在线| 亚洲女性喷水在线观看一区| 久久综合久久久| 欧美一区二区三区在线| 亚洲午夜一区| 亚洲精品国产精品乱码不99| 黄色综合网站| 国模一区二区三区| 国产一区美女| 在线一区二区三区做爰视频网站| 久久深夜福利| 欧美精品在线一区二区| 久久综合伊人77777蜜臀| 日韩一级网站| 一区二区三区视频在线看| 亚洲人成人99网站| 久久精品国产亚洲一区二区三区 | 国产女主播视频一区二区| 欧美~级网站不卡| 久久中文在线| 久久最新视频| 欧美日韩国产精品一区| 快播亚洲色图| 久久综合给合久久狠狠色| 欧美在线免费看| 欧美一区二区三区视频免费播放| 亚洲一区综合| 99精品福利视频| 亚洲一区二区三区四区在线观看 | 国产日韩欧美视频| 国产日韩欧美三区| 国产视频欧美视频| 99精品久久久| 午夜影院日韩| 久久激情视频久久| 欧美激情精品久久久久久蜜臀| 欧美激情精品| 国产伦精品一区二区三区在线观看| 欧美视频网址| 亚洲区中文字幕|