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

A Za, A Za, Fighting...

堅(jiān)信:勤能補(bǔ)拙

[zz] 變進(jìn)制數(shù)與全排列哈希

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

對于這種常數(shù)進(jìn)制表示法,以及各種進(jìn)制之間的轉(zhuǎn)換大家應(yīng)該是很熟悉的了,但大家可能很少聽說變進(jìn)制數(shù)。這里我要介紹一種特殊的變進(jìn)制數(shù),它能夠被用來實(shí)現(xiàn)全排列的Hash函數(shù),并且該Hash函數(shù)能夠?qū)崿F(xiàn)完美的防碰撞和空間利用(不會(huì)發(fā)生碰撞,且所有空間被完全使用,不多不少)。這種全排列Hash函數(shù)也被稱為全排列數(shù)化技術(shù)。下面,我們就來看看這種變進(jìn)制數(shù)。

我們考查這樣一種變進(jìn)制數(shù):第1位逢2進(jìn)1,第2位逢3進(jìn)1,……,第n位逢n+1進(jìn)1。它的表示形式為
    K = a1*1! + a2*2! + a3*3! + ... + an*n! (其中0 <= ai <= i),
也可以擴(kuò)展為如下形式(因?yàn)榘炊xa0始終為0),以與p進(jìn)制表示相對應(yīng):
    K = a0*0! + a1*1! + a2*2! + a3*3! + ... + an*n! (其中0 <= ai <= i)。
(后面的變進(jìn)制數(shù)均指這種變進(jìn)制數(shù),且采用前一種表示法)

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

接下來我們考查n位變進(jìn)制數(shù)K的性質(zhì):
(1)當(dāng)所有位ai均為i時(shí),此時(shí)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進(jìn)制數(shù)的最大值為(n+1)!-1。
(2)當(dāng)所有位ai均為0時(shí),此時(shí)K有最小值0。
因此,n位變進(jìn)制數(shù)能夠表示0到(n+1)!-1的范圍內(nèi)的所有自然數(shù),共(n+1)!個(gè)。

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

從數(shù)的角度來看,全排列和變進(jìn)制數(shù)都用到了階乘。如果我們能夠用0到n!-1這n!個(gè)連續(xù)的變進(jìn)制數(shù)來表示n個(gè)元素的所有排列,那么就能夠把全排列完全地?cái)?shù)化,建立起全排列和自然數(shù)之間一一對應(yīng)的關(guān)系,也就實(shí)現(xiàn)了一個(gè)完美的Hash函數(shù)。那么,我們的想法能否實(shí)現(xiàn)呢?答案是肯定的,下面將進(jìn)行討論。

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

由于n位變進(jìn)制數(shù)能表示(n+1)!個(gè)不同的數(shù),而n+1個(gè)元素的全排列剛好有(n+1)!個(gè)不同的排列,且每一個(gè)排列都已經(jīng)能表示成一個(gè)n位變進(jìn)制數(shù)。如果我們能夠證明任意兩個(gè)不同的排列產(chǎn)生兩個(gè)不同的變進(jìn)制數(shù),那么我們就可以得出結(jié)論:

★ 定理1 n+1個(gè)元素的全排列的每一個(gè)排列對應(yīng)著一個(gè)不同的n位變進(jìn)制數(shù)。

對于全排列的任意兩個(gè)不同的排列p0,p1,p2,...,pn(排列P)和q0,q1,q2,...,qn(排列Q),從后往前查找第一個(gè)不相同的元素,分別記為pi和qi(0 < i <= n)。
(1)如果qi > pi,那么,
如果在排列Q中qi之前的元素x與qi構(gòu)成逆序?qū)Γ从衳 > qi,則在排列P中pi之前也有相同元素x > pi(因?yàn)閤 > qi且qi > pi),即在排列P中pi之前的元素x也與pi構(gòu)成逆序?qū)Γ詐i的逆序數(shù)大于等于qi的逆序數(shù)。又qi與pi在排列P中構(gòu)成pi的逆序?qū)Γ詐i的逆序數(shù)大于qi的逆序數(shù)。
(2)同理,如果pi > qi,那么qi的逆序數(shù)大于pi的逆序數(shù)。
因此,由(1)和(2)知,排列P和排列Q對應(yīng)的變進(jìn)制數(shù)至少有第i位不相同,即全排列的任意兩個(gè)不同的排列具有不同的變進(jìn)制數(shù)。至此,定理1得證。

計(jì)算n個(gè)元素的一個(gè)排列的變進(jìn)制數(shù)的算法大致如下(時(shí)間復(fù)雜度為O(n^2)):
template <typename T>
size_t PermutationToNumber(const T permutation[], int n)
{
    // n不能太大,否則會(huì)溢出(如果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!是一個(gè)很大的數(shù),因此一般只能用于較小的n。
(2)有了計(jì)算排列的變進(jìn)制數(shù)的算法,我們就可以使用一個(gè)大小為n!的數(shù)組來保存每一個(gè)排列的狀態(tài),使用排列的變進(jìn)制數(shù)作為數(shù)組下標(biāo),從而實(shí)現(xiàn)狀態(tài)的快速檢索。如果只是標(biāo)記狀態(tài)是否出現(xiàn),則可以用一位來標(biāo)記狀態(tài)。

posted on 2010-08-06 10:30 simplyzhao 閱讀(394) 評論(0)  編輯 收藏 引用 所屬分類: G_其他

導(dǎo)航

<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

統(tǒng)計(jì)

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久久久久久久一区| 浪潮色综合久久天堂| 黄色成人av网| 午夜精品视频| 国产精品婷婷午夜在线观看| 欧美在线免费视屏| 国内精品模特av私拍在线观看| 午夜亚洲视频| 免费一区视频| 国产视频亚洲精品| 91久久精品美女高潮| 欧美激情免费在线| 欧美一二三视频| 欧美日韩免费观看一区二区三区| 中文一区在线| 亚洲美女黄色片| 国产精品一香蕉国产线看观看| 久热精品在线视频| 久久国产精品一区二区| 亚洲黄色一区二区三区| 乱中年女人伦av一区二区| 久久成人免费日本黄色| 亚洲激情视频网| 很黄很黄激情成人| 国产日韩欧美一区在线| 性高湖久久久久久久久| 一区二区不卡在线视频 午夜欧美不卡在 | 国产一在线精品一区在线观看| 欧美精品一区二| 久久久午夜精品| 国产综合色产| 久久久91精品国产一区二区精品| 亚洲欧美中文字幕| 国产欧美日韩精品丝袜高跟鞋| 亚洲综合日韩在线| 日韩亚洲一区二区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 一区二区三区精密机械公司| 91久久香蕉国产日韩欧美9色| 激情婷婷欧美| 欧美激情视频一区二区三区免费 | 99视频在线观看一区三区| 一色屋精品视频在线看| 欧美日本精品| 欧美精品电影| 欧美三日本三级少妇三2023 | 亚洲清纯自拍| 久久精品国产视频| 亚洲第一精品影视| 91久久中文字幕| 亚洲欧洲99久久| 欧美jizz19性欧美| 99re视频这里只有精品| 欧美亚洲午夜视频在线观看| 久久日韩精品| 国产精品九色蝌蚪自拍| 老司机午夜免费精品视频| 麻豆精品精华液| 久久精品99无色码中文字幕| 久久久噜噜噜久久人人看| 欧美寡妇偷汉性猛交| 亚洲国产精品一区在线观看不卡 | 亚洲欧洲一区二区在线播放| 亚洲午夜一区| 亚洲免费av电影| 欧美激情亚洲自拍| 久久人人爽爽爽人久久久| 中文一区字幕| 久久只精品国产| 先锋影音久久久| 欧美日韩精品一区二区天天拍小说 | 免费亚洲视频| 亚洲成色最大综合在线| 国产乱肥老妇国产一区二| 亚洲欧洲日本一区二区三区| 鲁鲁狠狠狠7777一区二区| 久久综合狠狠综合久久综合88| 亚洲视频久久| 欧美一区二区三区在线免费观看| 欧美久久久久免费| 亚洲乱码国产乱码精品精| 亚洲成色www8888| 日韩午夜激情| 欧美偷拍一区二区| 亚洲专区一区二区三区| 亚洲无限av看| 国产啪精品视频| 久久久精品午夜少妇| 欧美在线影院| 精品动漫3d一区二区三区免费版| 国产日韩欧美在线| 91久久午夜| 中文一区二区| 狠狠操狠狠色综合网| 欧美黄色成人网| 一区二区三区欧美在线| 国产毛片一区| 亚洲一级二级| 亚洲免费电影在线观看| 亚洲欧美日韩一区在线观看| 狠狠狠色丁香婷婷综合久久五月| 亚洲素人在线| 欧美成人免费网站| 欧美精品久久久久久久久久| 伊人成综合网伊人222| 亚洲国产天堂久久综合网| 久久精品国产第一区二区三区| 国产一区二区三区av电影 | 小黄鸭精品aⅴ导航网站入口| 国内一区二区在线视频观看| 亚洲六月丁香色婷婷综合久久| 黄网动漫久久久| 亚洲网友自拍| 夜色激情一区二区| 欧美在线精品免播放器视频| 亚洲一区精品电影| 日韩亚洲国产欧美| 91久久久久久久久| 久久久久国产精品人| 国产主播一区二区| 一区二区国产精品| 国产精品久久久久久影视| 欧美国产欧美亚洲国产日韩mv天天看完整 | 中文国产成人精品| 在线视频日韩精品| 欧美深夜福利| 亚洲一二三四区| 国产农村妇女毛片精品久久莱园子| 亚洲国产天堂久久综合网| 亚洲国产精品精华液网站| 亚洲国产清纯| 欧美在线精品免播放器视频| 亚洲成色777777在线观看影院| 久久深夜福利免费观看| 免费看黄裸体一级大秀欧美| 久久夜色精品国产亚洲aⅴ| 麻豆精品网站| 亚洲精品免费一二三区| 9l国产精品久久久久麻豆| 亚洲综合色在线| 老色鬼久久亚洲一区二区| 最新精品在线| 国产一区二区精品久久91| 久久男人资源视频| 亚洲狠狠丁香婷婷综合久久久| 国产精品美女www爽爽爽| 女仆av观看一区| 国产精品中文在线| 久久久999精品| 99日韩精品| 欧美激情第六页| 在线播放一区| 午夜日本精品| 亚洲欧美日韩精品| 亚洲第一中文字幕| 久久理论片午夜琪琪电影网| 欧美一区二区三区免费看| 亚洲国产精品久久| 国产日韩欧美精品在线| 一区二区三区色| 亚洲手机视频| 亚洲精品一区二区三区av| 国产一区二区久久精品| 久久精品国产亚洲5555| 亚洲视频在线免费观看| 亚洲欧美日韩综合aⅴ视频| 亚洲激情在线| 国产精品久99| 国产精品久久久久久影视| 亚洲伊人久久综合| 久久精品首页| 亚洲激情欧美| 亚洲国产裸拍裸体视频在线观看乱了| 久久久久久亚洲精品不卡4k岛国| 午夜精品久久久| 免费一级欧美在线大片| 猛男gaygay欧美视频| 老司机aⅴ在线精品导航| 久久五月激情| 欧美国产日本在线| 亚洲免费在线观看视频| 亚洲一区二区三区欧美| 午夜激情亚洲| 亚洲福利视频二区| 亚洲精品社区| 亚洲永久免费观看| 久久久噜噜噜久久久| 亚洲一区二区精品| 午夜精品亚洲| 亚洲深夜影院| 久久精品观看| 亚洲激情小视频| 另类国产ts人妖高潮视频| 亚洲人成在线观看| 国产精品毛片va一区二区三区| 国产日韩精品视频一区| 日韩视频一区二区在线观看| 午夜国产精品影院在线观看| 久久视频在线免费观看| 午夜视频在线观看一区二区三区|