列表使用不同的散列函數(shù)(例如,諸如被用來存儲(chǔ)該散列表的最后的存儲(chǔ)器組)。
[0041 ] 在其中要插入兩倍于最小關(guān)鍵字大小的關(guān)鍵字的一些實(shí)施例和情形中,關(guān)鍵字搜索/插入單元22通過使用散列函數(shù)32-1對(duì)整個(gè)關(guān)鍵字進(jìn)行散列以訪問存儲(chǔ)在存儲(chǔ)器組30-1中的散列表部分,并且還通過使用散列函數(shù)32-1對(duì)整個(gè)關(guān)鍵字進(jìn)行散列以訪問存儲(chǔ)在存儲(chǔ)器組30-2中的散列表部分從而訪問散列表62-1。類似地,在一個(gè)實(shí)施例中,關(guān)鍵字搜索/插入單元22通過使用散列函數(shù)32-3對(duì)整個(gè)關(guān)鍵字進(jìn)行散列以訪問存儲(chǔ)在存儲(chǔ)器組30-3中的散列表部分,并且還通過使用散列函數(shù)32-3對(duì)整個(gè)關(guān)鍵字進(jìn)行散列以訪問存儲(chǔ)在存儲(chǔ)器組30-4中的散列表部分從而訪問散列表62-2。如果將不會(huì)導(dǎo)致沖突(例如,在一個(gè)實(shí)施例中,如果該散列表中任一個(gè)組成的散列表部分在所產(chǎn)生的地址/散列值處都不包括散列關(guān)鍵字分段),則散列關(guān)鍵字隨后以兩個(gè)相鄰散列關(guān)鍵字分段的形式而被插入到散列表62-1或62-2之一。在一個(gè)實(shí)施例中,關(guān)鍵字搜索/插入單元22還將指示該關(guān)鍵字兩倍于最小大小的信息存儲(chǔ)在條目之中。圖2圖示了如下情形,其中具有兩倍于最小關(guān)鍵字大小的第一關(guān)鍵字作為散列關(guān)鍵字分段“BI”和“B2”而分別在地址50-2和52-2而被成功插入到散列表62-1之中,并且具有兩倍于最小關(guān)鍵字大小的第二關(guān)鍵字作為散列關(guān)鍵字分段“Cl”和“C2”而分別在地址54-3和56-3而被成功插入到散列表62_2之中。如在圖2的示例實(shí)施例和情形中所看到的,針對(duì)特定散列表的每個(gè)散列表部分使用相同的散列函數(shù)(例如,針對(duì)存儲(chǔ)器組30-1和30-2中所存儲(chǔ)的散列表部分使用散列函數(shù)32-1)使得每個(gè)散列關(guān)鍵字分段被存儲(chǔ)在每個(gè)散列表部分內(nèi)的相同地址/散列值。
[0042]在一些實(shí)施例中,關(guān)鍵字搜索/插入單元22每次一個(gè)地向關(guān)鍵字應(yīng)用散列函數(shù)32-1和32-3(并且確定是否可能插入到相對(duì)應(yīng)的一個(gè)散列表62-1或62_2之中),并且僅在第一散列函數(shù)32-1并未導(dǎo)致關(guān)鍵字插入的情況下才執(zhí)行第二散列函數(shù)32-3。在其它實(shí)施例中,關(guān)鍵字搜索/插入單元22并行地將兩個(gè)散列函數(shù)32-1和32-3應(yīng)用于該關(guān)鍵字,并且進(jìn)行檢查以查看散列表62-1和62-2是否都能夠存儲(chǔ)關(guān)鍵字。在其中兩個(gè)散列表62-1和62-2在組成的散列表部分內(nèi)都具有可用地址的一些實(shí)施例和情形中,關(guān)鍵字搜索/插入單元22將該關(guān)鍵字插入到散列表62-1和62-2中被填充最多的一個(gè)之中。附加地或者備選地,在一些實(shí)施例中,關(guān)鍵字搜索/插入單元22采用“cuckoo”算法,其中只要之前所存儲(chǔ)的關(guān)鍵字能夠被移動(dòng)至新的散列表,則關(guān)鍵字即使在存在沖突的情況下也被插入。在一些實(shí)施例中,結(jié)合這里所描述的技術(shù)實(shí)施美國專利申請(qǐng)N0.13/737608和/或美國專利申請(qǐng)N0.14/012834中所描述的任意適當(dāng)?shù)年P(guān)鍵字插入的(多種)技術(shù)或(多種)算法。
[0043]在一個(gè)實(shí)施例中,針對(duì)三倍于最小關(guān)鍵字長度(或者例如被關(guān)鍵字生成單元20補(bǔ)充為三倍于最小關(guān)鍵字長度)的關(guān)鍵字而言,關(guān)鍵字搜索/插入單元22標(biāo)識(shí)/選擇對(duì)應(yīng)于存儲(chǔ)器組30-1至30-3的散列表64以及散列函數(shù)32-1至32_4之一。在一個(gè)實(shí)施例中,在搜索具有三倍于最小關(guān)鍵字長度的關(guān)鍵字時(shí),用來訪問對(duì)應(yīng)于散列表64的這三個(gè)存儲(chǔ)器組中的每一個(gè)的散列函數(shù)是對(duì)應(yīng)于被用來存儲(chǔ)該散列表的第一存儲(chǔ)器組的散列函數(shù)。例如,在圖2的示例實(shí)施例中,用于散列表64的散列函數(shù)是對(duì)應(yīng)于存儲(chǔ)器組30-1的散列函數(shù)(即,散列函數(shù)32-1)。在其它實(shí)施例中,針對(duì)每個(gè)散列表使用不同散列函數(shù)(例如,諸如被用來存儲(chǔ)散列表的最后的存儲(chǔ)器組)。在其中要插入三倍于最小關(guān)鍵字大小的關(guān)鍵字的一些實(shí)施例和情形中,關(guān)鍵字搜索/插入單元22通過使用相同散列函數(shù)32-1對(duì)整個(gè)關(guān)鍵字進(jìn)行散列以訪問存儲(chǔ)在存儲(chǔ)器組30-1至30-3中的三個(gè)散列表部分中的每一個(gè)來訪問散列表64。如果將不會(huì)導(dǎo)致沖突(例如,在一個(gè)實(shí)施例中,如果該散列表中的三個(gè)組成的散列表部分在所產(chǎn)生的地址/散列值處都不包括散列關(guān)鍵字分段),則散列關(guān)鍵字隨后以三個(gè)相鄰散列關(guān)鍵字分段的形式而被插入到散列表64之中。在一些實(shí)施例中,關(guān)鍵字搜索/插入單元22采用“cuckoo”算法,其中只要之前所存儲(chǔ)的關(guān)鍵字能夠被移動(dòng)至新的散列表,則關(guān)鍵字即使在存在沖突的情況下也被插入。在一些實(shí)施例中,結(jié)合這里所描述的技術(shù)實(shí)施美國專利申請(qǐng)N0.13/737608和/或美國專利申請(qǐng)N0.14/012834中所描述的任意適當(dāng)?shù)年P(guān)鍵字插入的(多種)技術(shù)或(多種)算法。在一個(gè)實(shí)施例中,關(guān)鍵字搜索/插入單元22還將指示該關(guān)鍵字為三倍于最小大小的信息存儲(chǔ)在條目之中。圖2圖示了其中具有三倍最小關(guān)鍵字大小的關(guān)鍵字作為散列關(guān)鍵字分段“D1”、“D2”和“D3”分別在地址50-4、52-4和54_4被成功插入到散列表64之中的情形。同樣,針對(duì)特定散列表的每個(gè)散列表部分使用相同的散列函數(shù)(例如,針對(duì)存儲(chǔ)器組30-1至30-3中所存儲(chǔ)的每個(gè)散列表部分使用散列函數(shù)32-1)使得每個(gè)散列關(guān)鍵字分段被存儲(chǔ)在每個(gè)散列表部分內(nèi)的相同地址/散列值。
[0044]在一個(gè)實(shí)施例中,針對(duì)四倍于最小關(guān)鍵字長度(或者例如被關(guān)鍵字生成單元20補(bǔ)充為四倍于最小關(guān)鍵字長度)的關(guān)鍵字而言,關(guān)鍵字搜索/插入單元22標(biāo)識(shí)/選擇對(duì)應(yīng)于存儲(chǔ)器組30-1至30-4的散列表66以及散列函數(shù)32-1至32_4之一。在一個(gè)實(shí)施例中,在搜索具有四倍于最小關(guān)鍵字長度的關(guān)鍵字時(shí),用來訪問對(duì)應(yīng)于散列表66的這四個(gè)存儲(chǔ)器組中的每一個(gè)的散列函數(shù)是對(duì)應(yīng)于被用來存儲(chǔ)該散列表的第一存儲(chǔ)器組的散列函數(shù)。例如,在圖2的示例實(shí)施例中,用于散列表66的散列函數(shù)是對(duì)應(yīng)于存儲(chǔ)器組30-1的散列函數(shù)(即,散列函數(shù)32-1),這是因?yàn)榇鎯?chǔ)器組30-1是其中存儲(chǔ)散列關(guān)鍵字的第一部分的第一存儲(chǔ)器組。在其它實(shí)施例中,針對(duì)每個(gè)散列表使用不同散列函數(shù)(例如,諸如被用來存儲(chǔ)散列表的最后的存儲(chǔ)器組)。在其中要插入四倍于最小關(guān)鍵字大小的關(guān)鍵字的一些實(shí)施例和情形中,關(guān)鍵字搜索/插入單元22通過使用相同散列函數(shù)32-1對(duì)整個(gè)關(guān)鍵字進(jìn)行散列以訪問存儲(chǔ)在存儲(chǔ)器組30-1至30-4中的四個(gè)散列表部分中的每一個(gè)來訪問散列表66。如果將不會(huì)在任意存儲(chǔ)器組30中的相對(duì)應(yīng)位置導(dǎo)致沖突(例如,在一個(gè)實(shí)施例中,如果該散列表中的四個(gè)組成的散列表部分在所產(chǎn)生的地址/散列值處都不包括散列關(guān)鍵字分段),則散列關(guān)鍵字隨后以四個(gè)相鄰散列關(guān)鍵字分段的形式而被插入到散列表64之中。在一些實(shí)施例中,關(guān)鍵字搜索/插入單元22采用“cuckoo”算法,其中只要之前所存儲(chǔ)的關(guān)鍵字能夠被移動(dòng)至新的散列表,則關(guān)鍵字即使在存在沖突的情況下也被插入。在一些實(shí)施例中,結(jié)合這里所描述的技術(shù)實(shí)施美國專利申請(qǐng)N0.13/737608和/或美國專利申請(qǐng)N0.14/012834中所描述的任意適當(dāng)?shù)年P(guān)鍵字插入的(多種)技術(shù)或(多種)算法。在一個(gè)實(shí)施例中,關(guān)鍵字搜索/插入單元22還將指示該關(guān)鍵字為四倍于最小大小的信息存儲(chǔ)在條目之中。圖2圖示了其中具有四倍最小關(guān)鍵字大小的關(guān)鍵字作為散列關(guān)鍵字分段“El”、“E2”、“E3”和“E4”分別在地址50-5、52-5、54-5和56_5被成功插入到散列表66之中的情形。同樣,針對(duì)特定散列表的每個(gè)散列表部分使用相同的散列函數(shù)(即,針對(duì)存儲(chǔ)器組30-1至30-4中所存儲(chǔ)的每個(gè)散列表部分使用散列函數(shù)32-1)使得每個(gè)散列關(guān)鍵字分段被存儲(chǔ)在每個(gè)散列表部分內(nèi)的相同地址/散列值。
[0045]如圖2中所看到的,在一個(gè)實(shí)施例中,該第一精確匹配查找技術(shù)在一些情形中能夠選擇不同的散列函數(shù)來訪問單獨(dú)的一個(gè)存儲(chǔ)器組30,其中該選擇基于查找關(guān)鍵字的大小。例如,在圖2的示例實(shí)施例中,在搜索具有最小關(guān)鍵字大小的查找關(guān)鍵字時(shí)使用散列函數(shù)32-2來訪問存儲(chǔ)器組30-2,但是在搜索具有兩倍、三倍或四倍于最小關(guān)鍵字大小的查找關(guān)鍵字時(shí)則使用散列函數(shù)32-1 ο作為另一個(gè)示例,在一個(gè)實(shí)施例中,在搜索具有最小關(guān)鍵字大小的查找關(guān)鍵字時(shí)使用散列函數(shù)32-4來訪問存儲(chǔ)器組30-4,在搜索具有兩倍于最小關(guān)鍵字大小的查找關(guān)鍵字時(shí)使用散列函數(shù)32-3,并且在搜索具有四倍于最小關(guān)鍵字大小的查找關(guān)鍵字時(shí)則使用散列函數(shù)32-1。
[0046]在一些實(shí)施例中,針對(duì)特定關(guān)鍵字大小所提供的散列表在存儲(chǔ)相對(duì)應(yīng)的散列關(guān)鍵字分段的存儲(chǔ)器組的方面能夠有所重疊。然而,在圖2的示例實(shí)施例中,各種散列表被限制到特定存儲(chǔ)器組30而使得并沒有針對(duì)單個(gè)關(guān)鍵字大小的兩個(gè)散列表被存儲(chǔ)或部分存儲(chǔ)在相同的存儲(chǔ)器組中。例如,在一個(gè)實(shí)施例中,兩倍于最小關(guān)鍵字大小的關(guān)鍵字無法被插入到存儲(chǔ)器組30-2和30-3中所存儲(chǔ)的散列表之中,并且三倍于最小關(guān)鍵字大小的關(guān)鍵則無法被插入到存儲(chǔ)在存儲(chǔ)器組30-2、30-3和30-4中的散列表之中。更一般地,在具有類似于存儲(chǔ)器組30的N個(gè)存儲(chǔ)器組的一些實(shí)施例中,針對(duì)具有大小K倍于最小關(guān)鍵字大小(K是整數(shù),并且K[i]是散列關(guān)鍵字的第i個(gè)分段)的關(guān)鍵字的(多個(gè))散列表被部署為使得一個(gè)或多個(gè)散列表中的每一個(gè)的第一散列關(guān)鍵字分段(K[0])被存儲(chǔ)在Β[0],Β[Κ],Β[2Κ],Β[3Κ],…,B [max_locat1n],其中 B [i]是第 i 個(gè)存儲(chǔ)器組,其中 max_locat1n等于N - K - mod(N/K),并且其中每個(gè)散列表的散列關(guān)鍵字分段K[i]被存儲(chǔ)在作為存儲(chǔ)散列表的K [O]散列關(guān)鍵字分段的存儲(chǔ)器組上方的第i個(gè)存儲(chǔ)器組的存儲(chǔ)器組中。在一些實(shí)施例中,以這種方式部署散列表防止了錯(cuò)誤肯定(即,其中針對(duì)并非確實(shí)在多散列查找表中具有條目的關(guān)鍵字而錯(cuò)誤地返回匹配條目的情形)。應(yīng)用上述一般規(guī)則的一個(gè)示例實(shí)施例對(duì)應(yīng)于圖2中所看到的各個(gè)散列表。作為另一個(gè)示例,向具有六個(gè)存儲(chǔ)器組(即,N = 6)的實(shí)施例應(yīng)用該一般規(guī)則針對(duì)雙倍于最小關(guān)鍵字大小的關(guān)鍵字產(chǎn)生三個(gè)非重疊散列表,針對(duì)三倍于最小關(guān)鍵字大小的關(guān)鍵字產(chǎn)生兩個(gè)非重疊散列表,針對(duì)四倍于最小關(guān)鍵字大小的關(guān)鍵字產(chǎn)生一個(gè)散列表,針對(duì)五倍于最小關(guān)鍵字大小的關(guān)鍵字產(chǎn)生一個(gè)散列表,并且針對(duì)六倍于最小關(guān)鍵字大小的關(guān)鍵字產(chǎn)生一個(gè)散列表。當(dāng)然,在任意的這些實(shí)施例中,無需針對(duì)并未預(yù)期使用的關(guān)鍵字大小定義或提供散列表。
[0047]如以上所提到的,在一些實(shí)施例中,關(guān)鍵字搜索/插入單元22基于哪些散列表被填充最多而插入關(guān)鍵字,和/或使用cuckoo算法插入關(guān)鍵字。在其中實(shí)施cuckoo算法的一些實(shí)施例中,關(guān)鍵字搜索/插入單元22無論原有關(guān)鍵字是否比新關(guān)鍵字更小、相等或更大都能夠清空現(xiàn)有條目以存儲(chǔ)新的關(guān)鍵字/條目。在一個(gè)實(shí)施例或情形中,例如,關(guān)鍵字搜索/插入單元22能夠?qū)⒕哂袃杀蹲钚£P(guān)鍵字大小的新的關(guān)鍵字插入到相鄰存儲(chǔ)器組中的一對(duì)地址中,這是通過清空那些地址之一或二者處的最小大小的關(guān)鍵字,通過清空同樣具有兩倍最小關(guān)鍵字大小的同一對(duì)地址的關(guān)鍵字,或者通過清空具有至少三倍最小關(guān)鍵字大小的同一對(duì)地址(以及另外的一個(gè)或多個(gè)地址)的關(guān)鍵字來實(shí)現(xiàn)的。
[0048]在該第一精確匹配查找技術(shù)的一些實(shí)施例中,如以上關(guān)于表格填充/關(guān)鍵字插入所描述的,關(guān)鍵字搜索/插入單元22使用相同散列表和散列函數(shù)(即,如通過關(guān)鍵字大小所定義的)執(zhí)行搜索/查找。例如,在一個(gè)實(shí)施例中,針對(duì)最小大小的關(guān)鍵字對(duì)散列表60進(jìn)行搜索,針對(duì)具有兩倍最小大小的關(guān)鍵字對(duì)散列表62進(jìn)行搜索,針對(duì)具有三倍最小大小的關(guān)鍵字對(duì)散列表64進(jìn)行搜索,并且針對(duì)具有四倍最小大小的關(guān)鍵字對(duì)散列表66進(jìn)行搜索。在其中針對(duì)特定關(guān)鍵字大小提供多個(gè)散列表的一個(gè)實(shí)施例中,在利用具有該關(guān)鍵字大小的關(guān)鍵字進(jìn)行搜索時(shí)對(duì)每個(gè)散列表進(jìn)行并行搜索。例如,在圖2的示例實(shí)施例中,在針對(duì)具有兩倍最小關(guān)鍵字大小的關(guān)鍵字執(zhí)行查找時(shí)對(duì)散列表62-1和62-2進(jìn)行并行搜索。在備選實(shí)施例中,以串行方式對(duì)散列表進(jìn)行搜索直至找到匹配條目。
[0049]在一個(gè)實(shí)施例中,查找匹配在針對(duì)特定關(guān)鍵字所計(jì)算的所有散列關(guān)鍵字分段與特定散列表中的相對(duì)應(yīng)地址處所存儲(chǔ)的所有條目都匹配的情況下得以實(shí)現(xiàn)。例如,在其中使用具有兩倍最小關(guān)鍵字大小的關(guān)鍵字執(zhí)行查找的一個(gè)實(shí)施例和情形中,當(dāng)散列函數(shù)32-3分別在地址54-3和56-3形成散列關(guān)鍵字分段Cl和C2時(shí)返回匹配。在一些實(shí)施例中,每個(gè)散列關(guān)鍵字分段連同指示對(duì)應(yīng)于該條目的關(guān)鍵字的大小的信息一起進(jìn)行存儲(chǔ)以便減少或消除錯(cuò)誤肯定。例如,在一個(gè)實(shí)施例和情形中,散列關(guān)鍵字分段“BI”和“B2” (分別處于地址50-2和52-2)均連同指示該分段屬于雙倍最小大小的關(guān)鍵字的條目的信息一起存儲(chǔ)在相應(yīng)存儲(chǔ)器組中。在一個(gè)實(shí)施例中,關(guān)鍵字搜索/插入單元22在檢測到匹配時(shí)獲取到該關(guān)鍵字大小信息,并且使用該關(guān)鍵字大小信息來確定匹配是否有效。例如,在其中關(guān)鍵字搜索/插入單元22使用最小大小的關(guān)鍵字執(zhí)行查找的一個(gè)實(shí)施例和情形中,應(yīng)用散列函數(shù)32-2導(dǎo)致地址/散列值52-2,其同樣恰好對(duì)應(yīng)于已經(jīng)存儲(chǔ)在多散列查找表26中的較大關(guān)鍵字的散列位置之一(“B2”)。在該實(shí)施例/情形中,關(guān)鍵字搜索/插入單元22獲取與散列關(guān)鍵字分段“B2”相關(guān)聯(lián)的關(guān)鍵字大小信息,并且使用該信息來確定該匹配對(duì)于最小大小關(guān)鍵字的搜索并不有效。
[0050]接下來參考圖3,其圖示了第二精確匹配查找技術(shù)的一個(gè)示例實(shí)施例,所看到的是,查找存儲(chǔ)器24的存儲(chǔ)器組30-1至30-4中的每一個(gè)同樣存儲(chǔ)多散列查找表26的相應(yīng)部分,其中每個(gè)存儲(chǔ)器組30-1至30-4同樣被配置為在有限數(shù)量的散列表地址中的每一個(gè)中存儲(chǔ)多達(dá)一個(gè)的散列關(guān)鍵字分段。在一個(gè)實(shí)施例中,當(dāng)應(yīng)用相對(duì)應(yīng)的散列函數(shù)時(shí),各個(gè)散列表部分的每個(gè)地址對(duì)應(yīng)于單個(gè)散列值,并且存儲(chǔ)器組30-1至30-4中的每一個(gè)具有等于單個(gè)散列關(guān)鍵字分段的大小(位計(jì)數(shù))的寬度。
[0051]不同于圖2,