亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        哈希查找算法的構(gòu)造和沖突解決方法

        2021-10-21 08:50:27謝宇翔
        科技信息·學(xué)術(shù)版 2021年14期
        關(guān)鍵詞:大數(shù)據(jù)

        謝宇翔

        摘要:本文對經(jīng)典算法中的哈希算法(又稱散列),介紹了其常用的七種構(gòu)造方法和四種沖突解決方法及其原理,并通過舉例,詳細(xì)說明了各種方法的具體實現(xiàn)和適用場景。

        關(guān)鍵詞:哈希,關(guān)鍵字,沖突,時間復(fù)雜度,空間復(fù)雜度,大數(shù)據(jù)

        正文:

        在如今的大數(shù)據(jù)時代,需要各種高效,海量的數(shù)據(jù)處理技術(shù),哈希(HASH)算法以自身的優(yōu)點,被廣泛應(yīng)用在查找,存儲,加密,校驗,區(qū)塊鏈等眾多場景,大大提升了數(shù)據(jù)存儲分析的效率,是不可或缺的數(shù)據(jù)處理技術(shù)。

        以下就對哈希的構(gòu)造和沖突解決原理進(jìn)行詳細(xì)的理論和舉例說明。

        一、哈希的構(gòu)造方法[1][2]

        1.直接定址法:

        哈希地址:f(key)=a*key+b (a,b為常數(shù))

        簡單均勻,不產(chǎn)生沖突,需事先知道key的分布情況,適合查找表較小且連續(xù)的情況。

        舉例:比方說某校從1905年起招生,則統(tǒng)計每屆招生人數(shù)時,可以用年份-1905作為地址:

        此時 f(key)=key-1905

        2.數(shù)字分析法

        假設(shè)關(guān)鍵字以固定位組成,且可能出現(xiàn)的關(guān)鍵字是事先知道的,則可取關(guān)鍵字的若干數(shù)位組成哈希地址。

        3.平方取中法

        一個數(shù)平方的中間幾位與這個數(shù)的每一位都有關(guān),因而平方取中法產(chǎn)生沖突的機會相對較小。所取的位數(shù)由表長決定。適合于不知道關(guān)鍵字分布,而位數(shù)又不是很大的情況。

        4.折疊法

        把一個關(guān)鍵字分成位數(shù)相同的幾段(最后一段位數(shù)可以不同),然后將各段的疊加和(舍去進(jìn)位)作為哈希地址。

        事先不需要知道關(guān)鍵字的分布,而且關(guān)鍵字中每一位上數(shù)字分布大致均勻,適合關(guān)鍵字位數(shù)較多的情況。

        5.除留余數(shù)法

        取關(guān)鍵字被某個不大于哈希表表長m的數(shù)p除后所得的余數(shù)為哈希地址。即 f(key) = key mod p,p<=m。不僅可以對關(guān)鍵字直接取模,也可在折疊法、平方取中法等運算之后取模。對p的選擇很重要,一般取質(zhì)數(shù)或m。這是比較重要和常用的方法,被廣泛使用。

        6.偽隨機數(shù)法

        f(key) = random(key)

        這里 random 是隨機函數(shù),當(dāng) key 的長度不等時,采用這種方法比較合適。

        7.基數(shù)轉(zhuǎn)換法

        將一個數(shù)看作其它進(jìn)制,然后按照新進(jìn)制取其中若干位作為哈希值。一般取大于原基數(shù)的數(shù)作為轉(zhuǎn)換的基數(shù),并且兩個基數(shù)是互質(zhì)的。

        比方說key是十進(jìn)制的,那可以新的進(jìn)制為十三進(jìn)制,取其第3,6,9位,即f(key)=key13的第3,6,9位。

        二、哈希的沖突解決

        下面以創(chuàng)建哈希表為例,說明解決沖突的方法。

        常用的解決沖突方法有以下四種:開放尋址法、再哈希法、鏈地址法(拉鏈法)和建立一個公共溢出區(qū)。[1][2]

        1.開放尋址法:當(dāng)關(guān)鍵字key的哈希地址q=f(key)發(fā)生沖突,以q為基數(shù)再生成一個哈希地址q1,若q1仍然沖突,再以q為基數(shù)生成另一個哈希地址q2,…,直到找到不沖突的哈希地址。這種方法有一個通用的再散列函數(shù)形式:

        fi=(f(key)+di)%m i=1,2,…,n

        其中f(key)為哈希函數(shù),m 為表長,di稱為增量序列。di的取值方式,主要有以下三種:

        a) 線性探測再散列 di=1,2,3,…,m-1

        b) 二次探測再散列 di=k,-k,k-1,-(k-1),…,1,-1 ? ?( k<=m/2)

        c) 偽隨機探測再散列 di=偽隨機數(shù)序列。

        2.再哈希法:

        這種方法是同時構(gòu)造多個不同的哈希函數(shù):

        fi(key) i=1,2,…,k

        當(dāng)哈希地址f1(key)發(fā)生沖突時,再計算f2(key)……,直到?jīng)_突不再產(chǎn)生。

        比方說fi(key) 定義為對key取5+6i的模,也就是11,17,23,29….

        3.鏈地址法(拉鏈法)

        這種方法的基本思想是將所有哈希地址為f(key)=i的元素構(gòu)成一個稱為同義詞鏈的單鏈表,并將單鏈表的頭指針存在哈希表的第i個單元中,因而查找、插入和刪除主要在同義詞鏈中進(jìn)行。鏈地址法適用于經(jīng)常進(jìn)行插入和刪除的情況。

        舉例,用以上f(key)=key%13為例,首先建立一個擁有索引為13的數(shù)組,數(shù)組中每個元素為一個鏈表的頭指針,然后在需要存放數(shù)據(jù)的時候,根據(jù)f(key)找到數(shù)組中對應(yīng)元素對應(yīng)的鏈表(頭指針),然后在此鏈表最后插入數(shù)據(jù)。

        4.建立公共溢出區(qū):

        這種方法的基本思想是:將哈希表分為基本表和溢出表兩部分,凡是和基本表發(fā)生沖突的元素,一律填入溢出表。

        三、綜合實例:

        問題描述[3]

        A和 B各有排列好的n塊積木,每塊積木上寫有一個小寫英文字母。

        允許A從自己的積木串s中丟掉任意塊(也允許不丟);允許B從自己的積木串t中丟掉左邊連續(xù)的一段積木和右邊連續(xù)的一段積木(也允許只丟一邊或兩邊都不丟)。不允許丟棄自己所有積木。然后A和B分別將自己剩下的積木按原來的順序重新排成一排。

        計算一下,有多少種不同的情況下他們最后剩下的兩排積木是相同的(剩下的這兩排積木塊數(shù)相同且每一個位置上的字母都對應(yīng)相同)?

        解答:因為對s的要求比較寬松,所以首先枚舉t的子串,通過逐一匹配s的位,以此來獲取t中可能匹配的所有子串,時間復(fù)雜度為O(n^2)。然后在累計答案處進(jìn)行字符串的相等判斷和去除重復(fù),這里的比較用哈希表來大大提高效率:首先計算t每個可能字串的哈希值,把每個字符轉(zhuǎn)換成ascii與‘a(chǎn)’的差值,即a=1,b=2,…,并把每個位以base(很大的質(zhì)數(shù))作為進(jìn)制獲得表示t從i到j(luò)的哈希key數(shù)組HashKey[i][j],然后比方說采用除留余數(shù)法,以另一個大質(zhì)數(shù)作為模數(shù)獲得哈希地址來進(jìn)行比較。若是簡單的進(jìn)行枚舉比較,那時間復(fù)雜度將大幅度增加;和其它方法相比較,使用hash應(yīng)該是時間復(fù)雜度最優(yōu)的方法。

        參考文獻(xiàn):

        [1]哈希算法原理詳解 https://www.jianshu.com/p/f9239c9377c5

        [2]哈希算法以及沖突解決 https://www.itdaan.com/blog/2016/12/06/c885400f4092.html

        [3]洛谷 https://www.luogu.com.cn/problem/P7469

        猜你喜歡
        大數(shù)據(jù)
        基于在線教育的大數(shù)據(jù)研究
        中國市場(2016年36期)2016-10-19 04:41:16
        “互聯(lián)網(wǎng)+”農(nóng)產(chǎn)品物流業(yè)的大數(shù)據(jù)策略研究
        中國市場(2016年36期)2016-10-19 03:31:48
        基于大數(shù)據(jù)的小微電商授信評估研究
        中國市場(2016年35期)2016-10-19 01:30:59
        大數(shù)據(jù)時代新聞的新變化探究
        商(2016年27期)2016-10-17 06:26:00
        淺談大數(shù)據(jù)在出版業(yè)的應(yīng)用
        今傳媒(2016年9期)2016-10-15 23:35:12
        “互聯(lián)網(wǎng)+”對傳統(tǒng)圖書出版的影響和推動作用
        今傳媒(2016年9期)2016-10-15 22:09:11
        大數(shù)據(jù)環(huán)境下基于移動客戶端的傳統(tǒng)媒體轉(zhuǎn)型思路
        新聞世界(2016年10期)2016-10-11 20:13:53
        基于大數(shù)據(jù)背景下的智慧城市建設(shè)研究
        科技視界(2016年20期)2016-09-29 10:53:22
        數(shù)據(jù)+輿情:南方報業(yè)創(chuàng)新轉(zhuǎn)型提高服務(wù)能力的探索
        中國記者(2016年6期)2016-08-26 12:36:20
        久久精品国产亚洲av高清热| 国产大屁股熟女流白浆一区二区| 一本一道久久综合久久| 欧美丰满熟妇bbb久久久| 最近中文字幕视频高清| 99riav精品国产| 日韩女优一区二区在线观看| 国产 高潮 抽搐 正在播放| 99久久人人爽亚洲精品美女| 亚洲AV无码未成人网站久久精品| 日本高清一区二区三区在线| 精品亚洲一区二区三区四区五区 | 人妻少妇精品中文字幕av蜜桃| 中文字幕在线久热精品 | 中文字幕亚洲好看有码| 国产黄色三级三级三级看三级| 成年av动漫网站18禁| 波多野结衣乳巨码无在线| 精品18在线观看免费视频| 国产精品中文字幕日韩精品| 日本一本免费一二区| 99久久国产福利自产拍| 男人天堂av在线成人av| 日本不卡不二三区在线看| 日本中国内射bbxx| 亚洲黄色电影| 国产精品自在在线午夜出白浆| 偷拍视频网址一区二区| 无码人妻精品一区二区| 热久久这里只有| 青青草视频在线观看9| 久久久久久av无码免费网站下载| 亚洲av无码精品色午夜果冻不卡| 鲁丝一区鲁丝二区鲁丝三区| 一区二区在线观看日本视频| 狠狠精品久久久无码中文字幕| 欧美理论在线| 全程国语对白资源在线观看| 国产精品乱码人妻一区二区三区| 九九99无码精品视频在线观看| 免费观看视频在线播放|