本申請(qǐng)涉及計(jì)算機(jī)計(jì)算領(lǐng)域,尤其涉及一種字符串的比較方法及裝置。
背景技術(shù):目前,在互聯(lián)網(wǎng)的業(yè)務(wù)開(kāi)發(fā)和實(shí)施環(huán)境中,海量數(shù)據(jù)處理運(yùn)算的任務(wù)日益增多,這些海量數(shù)據(jù)處理運(yùn)算有些是以字符串運(yùn)算為中心的,其中,比較多個(gè)字符串諸如多個(gè)網(wǎng)頁(yè)地址(URL)是否相同的運(yùn)算又占據(jù)了極高的比例。傳統(tǒng)的判斷字符串是否相同的運(yùn)算是通過(guò)諸如Strcmp函數(shù)實(shí)現(xiàn)的,對(duì)于兩個(gè)需要進(jìn)行判同操作(判斷是否相同的操作)的字符串,從兩個(gè)字符串的頭部開(kāi)始掃描比對(duì)每個(gè)字符是否相同,即字符串中有多少個(gè)字符就需要比對(duì)多少次,才能得到兩個(gè)字符串判同的結(jié)果。在海量數(shù)據(jù)處理運(yùn)算中重復(fù)執(zhí)行判同操作的比率非常的高。例如,在字符串s1和s2進(jìn)行判同之后,s1還可能和s3、s4、…sn進(jìn)行判同操作,使用上述這種字符串的判同方式,每次字符串判同都需要比對(duì)多次才能得到判同結(jié)果,因此,整體的字符串判同效率較低,尤其是對(duì)于很長(zhǎng)的字符串進(jìn)行判同操作時(shí)上述問(wèn)題特別突出。
技術(shù)實(shí)現(xiàn)要素:本申請(qǐng)實(shí)施例提供了一種字符串的比較方法及裝置,用以實(shí)現(xiàn)在互聯(lián)網(wǎng)的業(yè)務(wù)開(kāi)發(fā)和實(shí)施環(huán)境中存在重復(fù)執(zhí)行海量數(shù)據(jù)處理運(yùn)算的判同操作時(shí)能夠快速地得到字符串的判同結(jié)果。本申請(qǐng)實(shí)施例提供的一種字符串的比較方法,包括:針對(duì)至少兩個(gè)待比較的字符串,判斷每個(gè)字符串是否存在對(duì)應(yīng)的摘要特征值;對(duì)于不存在對(duì)應(yīng)的摘要特征值的字符串,計(jì)算并保存所述字符串的摘要特征值;比較所述至少兩個(gè)字符串的摘要特征值是否相同;若是,確定所述至少兩個(gè)字符串相同;若否,確定所述至少兩個(gè)字符串不同。本申請(qǐng)實(shí)施例提供的一種字符串的比較裝置,包括:第一判斷模塊,用于針對(duì)至少兩個(gè)待比較的字符串,判斷每個(gè)字符串是否存在對(duì)應(yīng)的摘要特征值;計(jì)算模塊,用于對(duì)于不存在對(duì)應(yīng)的摘要特征值的字符串,計(jì)算并保存所述字符串的摘要特征值;第二判斷模塊,用于比較所述至少兩個(gè)字符串的摘要特征值是否相同;若是,確定所述至少兩個(gè)字符串相同;若否,確定所述至少兩個(gè)字符串不同。本申請(qǐng)實(shí)施例的有益效果包括:本申請(qǐng)實(shí)施例提供的一種字符串的比較方法及裝置,針對(duì)至少兩個(gè)待比較的字符串,判斷每個(gè)字符串是否存在對(duì)應(yīng)的摘要特征值;對(duì)于不存在對(duì)應(yīng)的摘要特征值的字符串,計(jì)算并保存字符串的摘要特征值;比較至少兩個(gè)字符串的摘要特征值是否相同;若是,確定至少兩個(gè)字符串相同;若否,確定至少兩個(gè)字符串不同。在互聯(lián)網(wǎng)的業(yè)務(wù)開(kāi)發(fā)和實(shí)施環(huán)境中存在重復(fù)執(zhí)行海量數(shù)據(jù)處理運(yùn)算的判同操作時(shí),由于使用字符串對(duì)應(yīng)的摘要特征值進(jìn)行比對(duì)得到字符串的判同結(jié)果,相對(duì)于對(duì)兩個(gè)字符串中的每個(gè)字符都要進(jìn)行比對(duì)才能得到判同結(jié)果的方式,由于摘要特征值的數(shù)據(jù)量往往遠(yuǎn)小于字符串的數(shù)據(jù)量,對(duì)摘要特征值進(jìn)行比對(duì)得到判同結(jié)果,能夠大量的減少判同操作的計(jì)算量,這節(jié)省了運(yùn)算資源,提升了整體的字符串判同效率。附圖說(shuō)明圖1為本申請(qǐng)實(shí)施例提供的字符串的比較方法的流程圖;圖2為本申請(qǐng)實(shí)施例提供的字符串的比較裝置的結(jié)構(gòu)示意圖。具體實(shí)施方式下面結(jié)合附圖,對(duì)本申請(qǐng)實(shí)施例提供的字符串的比較方法及裝置的具體實(shí)施方式進(jìn)行詳細(xì)地說(shuō)明。本申請(qǐng)實(shí)施例提供的一種字符串的比較方法,如圖1所示,具體流程包括以下步驟:S101、針對(duì)至少兩個(gè)待比較的字符串,判斷每個(gè)字符串是否存在對(duì)應(yīng)的摘要特征值;若是,執(zhí)行步驟S103;若否,執(zhí)行步驟S102;S102、對(duì)于不存在對(duì)應(yīng)的摘要特征值的字符串,計(jì)算并保存字符串的摘要特征值;S103、比較至少兩個(gè)字符串的摘要特征值是否相同;若是,執(zhí)行步驟S104;若否,執(zhí)行步驟S105;S104、確定至少兩個(gè)字符串相同;S105、確定至少兩個(gè)字符串不同。在互聯(lián)網(wǎng)的業(yè)務(wù)開(kāi)發(fā)和實(shí)施環(huán)境中存在重復(fù)執(zhí)行海量數(shù)據(jù)處理運(yùn)算的判同操作時(shí)使用本申請(qǐng)實(shí)施例提供的上述方法,將大量的字符串的比較轉(zhuǎn)化為對(duì)字符串對(duì)應(yīng)的摘要特征值進(jìn)行比較,由于摘要特征值為一個(gè)數(shù)值,具體地,可以是32位或64位的長(zhǎng)整數(shù),具體長(zhǎng)度在此不做限定,相對(duì)于現(xiàn)有技術(shù)對(duì)字符串中的每個(gè)字符逐一比對(duì)得到最后判同結(jié)果,只需對(duì)摘要特征值進(jìn)行一次比對(duì)即可得到判同結(jié)果,減少了判同操作的計(jì)算量,提高了運(yùn)算效率,節(jié)約了運(yùn)算資源。尤其是在字符串較長(zhǎng)、判同操作重復(fù)率較多的情況,使用本申請(qǐng)實(shí)施例提供的字符串比較方法,運(yùn)算效率的提升更為明顯。并且,較佳地,當(dāng)摘要特征值設(shè)置為64位的長(zhǎng)整數(shù)時(shí),使用現(xiàn)有的64位硬件體系結(jié)構(gòu),諸如:寄存器或比較器等,就能實(shí)施本申請(qǐng)?zhí)峁┑纳鲜鲎址容^方法。下面對(duì)上述各步驟的具體實(shí)現(xiàn)方式進(jìn)行詳細(xì)的說(shuō)明。在上述步驟S102中計(jì)算字符串的摘要特征值,具體地可以通過(guò)下述方式實(shí)現(xiàn):對(duì)字符串進(jìn)行哈希運(yùn)算,將得到的哈希值作為字符串的摘要特征值,由于哈希運(yùn)算屬于現(xiàn)有技術(shù),在此不做詳述。發(fā)明人在使用哈希算法計(jì)算字符串的摘要特征值時(shí),發(fā)現(xiàn)存在不同的字符串計(jì)算出來(lái)的摘要特征值可能相同的幾率,即存在沖突幾率。因此,發(fā)明人結(jié)合現(xiàn)有的哈希算法創(chuàng)造出復(fù)合哈希算法來(lái)計(jì)算摘要特征值,以避免發(fā)生沖突,具體過(guò)程如下:先對(duì)字符串進(jìn)行至少兩次不同的哈希運(yùn)算,得到至少兩個(gè)不同的哈希值;然后將至少兩個(gè)不同的哈希值進(jìn)行拼接處理,得到字符串的摘要特征值;或者,將至少兩個(gè)不同的哈希值進(jìn)行算術(shù)運(yùn)算后,例如:加減乘除運(yùn)算,得到字符串的摘要特征值。在具體實(shí)施時(shí),發(fā)明人發(fā)現(xiàn),將字符串的兩次不同的哈希值進(jìn)行拼接或者算術(shù)運(yùn)算得到的摘要特征值就能夠有效地避免沖突幾率,因此,下述具體實(shí)例都是以?xún)纱尾煌墓_\(yùn)算為例說(shuō)明。實(shí)例一:對(duì)于字符串進(jìn)行兩次不同的哈希運(yùn)算可以使用JAVAJDK的String::HashCode函數(shù)實(shí)現(xiàn)的指紋算法進(jìn)行計(jì)算,計(jì)算公式如下:h1=s[0]×P1n-1+s[1]×P1n-2+s[2]×P1n-3+……+s[n-1],h2=s[0]×P2n-1+s[1]×P2n-2+s[2]×P2n-3+……+s[n-1];其中,h1和h2為兩個(gè)不同的哈希值;P1和P2為質(zhì)數(shù),例如:可以為29和31,在此不做限定;s[0]、s[1]、s[2]……s[n-1]分別為字符串第1位、第2位、第3位……第n位的字符。在具體實(shí)施時(shí),以下述代碼實(shí)現(xiàn):實(shí)例二:對(duì)于字符串分別使用上述指紋算法和DanielJ.Bernstein教授發(fā)明的DJB算法進(jìn)行計(jì)算,得到兩個(gè)不同的32位的哈希值,具體實(shí)施時(shí),DJB算法例如可以以下述代碼實(shí)現(xiàn)(還可以使用其他版本的代碼):上述實(shí)例一和實(shí)例二只是舉例說(shuō)明具體如何計(jì)算哈希值,本領(lǐng)域技術(shù)人員還可以使用其他哈希函數(shù)例如sdbm/FNV的函數(shù)進(jìn)行哈希值的計(jì)算,在此不做限定。在計(jì)算出兩個(gè)不同的哈希值h1和h2后可以使用(((long)h1<<32)|(long)h2公式,將h1和h2拼接成一個(gè)64位的摘要特征值,或者,將兩個(gè)不同的哈希值做加減乘除的算術(shù)運(yùn)算后,得到一個(gè)32位的摘要特征值。并且,在計(jì)算出字符串對(duì)應(yīng)的摘要特征值后,將此摘要特征值和字符串一起保存,對(duì)于重復(fù)比對(duì)時(shí)就可以直接重復(fù)使用計(jì)算出的該字符串的摘要特征值,而存儲(chǔ)摘要特征值的空間只需要8個(gè)字節(jié)即可。較佳地,如果在進(jìn)行字符串比較時(shí),對(duì)字符串的大小寫(xiě)不敏感,即對(duì)字符串的比較不區(qū)別大小寫(xiě),就可以在計(jì)算字符串的摘要特征值之前,將字符串的各字符根據(jù)需要統(tǒng)一轉(zhuǎn)換為大寫(xiě)或小寫(xiě)即可?;谕话l(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供了一種字符串的比較裝置,由于該裝置解決問(wèn)題的原理與前述一種字符串的比較方法相似,因此該裝置的實(shí)施可以參見(jiàn)方法的實(shí)施,重復(fù)之處不再贅述。本申請(qǐng)實(shí)施例提供的一種字符串的比較裝置,如圖2所示,包括:第一判斷模塊201,用于針對(duì)至少兩個(gè)待比較的字符串,判斷每個(gè)字符串是否存在對(duì)應(yīng)的摘要特征值;計(jì)算模塊202,用于對(duì)于不存在對(duì)應(yīng)的摘要特征值的字符串,計(jì)算并保存該字符串的摘要特征值;第二判斷模塊203,用于比較至少兩個(gè)字符串的摘要特征值是否相同;若是,確定至少兩個(gè)字符串相同;若否,確定至少兩個(gè)字符串不同。進(jìn)一步地,上述裝置中的計(jì)算模塊202,具體用于對(duì)字符串進(jìn)行哈希運(yùn)算,將得到的哈希值作為字符串的摘要特征值?;蛘撸M(jìn)一步地,上述裝置中的計(jì)算模塊202,具體用于對(duì)字符串進(jìn)行至少兩次不同的哈希運(yùn)算,得到至少兩個(gè)不同的哈希值;將至少兩個(gè)不同的哈希值進(jìn)行拼接處理,得到字符串的摘要特征值。進(jìn)一步地,計(jì)算模塊202,具體用于使用下述指紋算法對(duì)字符串進(jìn)行兩次不同的哈希運(yùn)算,得到兩個(gè)不同的哈希值h1和h2:h1=s[0]×P1n-1+s[1]×P1n-2+s[2]×P1n-3+……+s[n-1],h2=s[0]×P2n-1+s[1]×P2n-2+s[2]×P2n-3+……+s[n-1];其中,P1和P2為質(zhì)數(shù),s[0]、s[1]、s[2]……s[n-1]分別為字符串第1位、第2位、第3位……第n位的字符;將兩個(gè)不同的哈希值使用(((long)h1<<32)|(long)h2公式進(jìn)行拼接處理,得到字符串的摘要特征值?;蛘?,進(jìn)一步地,上述計(jì)算模塊202,具體用于使用指紋算法和DJB算法分別對(duì)字符串進(jìn)行哈希運(yùn)算,得到兩個(gè)不同的哈希值h1和h2;將所述兩個(gè)不同的哈希值使用(((long)h1<<32)|(long)h2公式進(jìn)行拼接處理,得到所述字符串的摘要特征。進(jìn)一步地,本申請(qǐng)實(shí)施例提供的上述裝置,如圖2所示,還可以包括:轉(zhuǎn)換模塊204,用于在計(jì)算模塊202計(jì)算字符串的摘要特征值之前,將字符串按照預(yù)先的設(shè)置轉(zhuǎn)換成大寫(xiě)字符串或小寫(xiě)字符串。通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)實(shí)施例可以通過(guò)硬件實(shí)現(xiàn),也可以借助軟件加必要的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn)?;谶@樣的理解,本申請(qǐng)實(shí)施例的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該軟件產(chǎn)品可以存儲(chǔ)在一個(gè)非易失性存儲(chǔ)介質(zhì)(可以是CD-ROM,U盤(pán),移動(dòng)硬盤(pán)等)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本申請(qǐng)所必須的。本領(lǐng)域技術(shù)人員可以理解實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述進(jìn)行分布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。本申請(qǐng)實(shí)施例提供的一種字符串的比較方法及裝置,針對(duì)至少兩個(gè)待比較的字符串,判斷每個(gè)字符串是否存在對(duì)應(yīng)的摘要特征值;對(duì)于不存在對(duì)應(yīng)的摘要特征值的字符串,計(jì)算并保存字符串的摘要特征值;比較至少兩個(gè)字符串的摘要特征值是否相同;若是,確定至少兩個(gè)字符串相同;若否,確定至少兩個(gè)字符串不同。在互聯(lián)網(wǎng)的業(yè)務(wù)開(kāi)發(fā)和實(shí)施環(huán)境中存在重復(fù)執(zhí)行海量數(shù)據(jù)處理運(yùn)算的判同操作時(shí),由于使用字符串對(duì)應(yīng)的摘要特征值進(jìn)行比對(duì)得到字符串的判同結(jié)果,相對(duì)于對(duì)兩個(gè)字符串中的每個(gè)字符都要進(jìn)行比對(duì)才能得到判同結(jié)果的方式,由于摘要特征值的數(shù)據(jù)量往往遠(yuǎn)小于字符串的數(shù)據(jù)量,對(duì)摘要特征值進(jìn)行比對(duì)得到判同結(jié)果,能夠大量的減少判同操作的計(jì)算量,節(jié)省了運(yùn)算資源,提升了整體的字符串判同效率。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)的精神和范圍。這樣,倘若本申請(qǐng)的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。