專利名稱:二維表hash排序方法
技術(shù)領域:
本發(fā)明涉及一種二維表排序的方法,尤其涉及一種二維離散屬性表的hash排序方法。
背景技術(shù):
二維表是信息的主要表達形式之一,用于信息處理的數(shù)據(jù)集表示為一張由多個屬性特征進行描述的二維表,每一維屬性上取值為離散的數(shù)值或字符(對于連續(xù)型數(shù)據(jù)可以先進行離散化預處理為離散型數(shù)據(jù)),二維表中的一行為一條記錄,對這類二維表進行排序是指對數(shù)據(jù)集的多個屬性字段按照一定的優(yōu)先級別進行排序操作,如升序、降序排列等。在計算機的許多領域中常常需要二維表排序操作,例如,在典型商業(yè)數(shù)據(jù)處理中數(shù)據(jù)項是記錄,并且記錄按照關(guān)鍵字進行排序,排序大大簡化了查找或更新一個記錄的過程,對于分類問題,對樣本進行二維排序也是一項非常有益和必要的預處理過程。二維表排序是許多數(shù)據(jù)處理算法的重要步驟,先對記錄集在指定的屬性集上排序,再求此屬性集對論域劃分生成的等價類,能降低計算上下近似集、屬性約簡、核的復雜度。現(xiàn)有的典型的二維表排序方法是二維表快速排序法,但是此方法依賴于數(shù)據(jù)的分布情況,當大部分數(shù)據(jù)呈倒序排列時,性能下降很快,而且不具有穩(wěn)定性。另一方面,隨著信息技術(shù)的飛速發(fā)展,數(shù)據(jù)爆炸性增長,處理大數(shù)據(jù)集越來越普遍,此方法在數(shù)據(jù)規(guī)模非常大時性能不夠理想。探尋高效的適應大數(shù)據(jù)集的二維表排序方法是非常有必要的。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種二維表hash排序方法,它是一種高效的二維表排序方法,且此方法不會改變二維表中屬性值完全相同的記錄的相對順序,即此二維表排序方法具有穩(wěn)定性。為此,本發(fā)明采用以下技術(shù)方案二維表hash排序方法,包括以下步驟(1)、二維表初始化為鏈表而建立初始劃分塊;(2)、在當前屬性上將劃分塊中的元素hash到hash-cube中;(3)、遍歷hash-cube重構(gòu)劃分塊;(4)、檢查是否所有元素個數(shù)大于1的劃分塊均被重構(gòu)和在所有屬性上是否完成元素個數(shù)大于1的劃分塊被重構(gòu)操作,若是則終止,若否則在下一劃分塊或者下一屬性上進行步驟⑵、⑶、⑷。在采用上述技術(shù)方案的基礎上,本發(fā)明還可采用以下進一步的技術(shù)方案在步驟(1)中,將二維表記錄存放在鏈表中,鏈表節(jié)點包括二維表中記錄的初始地址;指向下一個劃分塊的指針;指向同一劃分塊中下一個元素的指針。在步驟⑵中,使用的hash方法步驟為查找在當前屬性上劃分塊中的最小和最大元素Bmin,afflax ;計算hash-cube的平面矩陣的維度d,即行和列的大小,
d = \^(amm-amn) + l];計算劃分塊中每一個數(shù)據(jù)元素在hash-cube中的位置,構(gòu)建劃分塊的 hash-cube。 在hash-cube中,使用i、j、k分別表示hash-cube的行、列、層坐標,d為hash-cube 的平面矩陣維度,X為劃分塊中待排序的數(shù)據(jù)元素,amin、Bfflax分別為在當前屬性上劃分塊中的最小、最大元素,數(shù)據(jù)元素為記錄在當前屬性上的屬性值,[]表示向上取整。計算每一個數(shù)據(jù)元素在hash-cube中的位置包括以下步驟根據(jù)公式i = [(x-afflin) /d]計算元素χ在hash-cube中的行坐標值;根據(jù)公式j = (x-afflin) % d計算元素 χ在hash-cube中的列坐標值;每一實數(shù)對(i,j)對應一個計數(shù)器,初始值為0,若(i, j)已經(jīng)出現(xiàn)過,則、=、+1,、為層坐標值。Icij實質(zhì)上標識了 hash-cube中的平面矩陣層次,每一層平面矩陣除了層次標識不同,行數(shù)和列數(shù)都是相同的,平面矩陣中的行數(shù)據(jù)元素按照由左至右的順序增大,列數(shù)據(jù)元素按照由上至下的順序增大,且任一數(shù)據(jù)元素大于所有列坐標比它小的數(shù)據(jù)元素。每一層矩陣平面中的一個方格只存放一個數(shù)據(jù)元素,且所有方格中的數(shù)據(jù)元素不重復,劃分塊中所有不重復的元素都能在一個這樣的矩陣平面中找到相應的位置。Hash-cube中以第0層矩陣平面為基準,劃分塊中的所有不重復元素都映射到此矩陣平面上,而重復的元素依次映射到下一層矩陣平面上。在步驟(3)中重構(gòu)劃分塊包括按照層、行、列的順序遍歷hash-cube ;坐標i和坐標j相同,只有坐標k不同的元素屬于同一劃分塊;劃分塊之間的順序由坐標i和坐標j標識;i、j、k分別表示hash-cube的行、列、層坐標。Hash表是由數(shù)組、表和特定數(shù)學方法相結(jié)合,構(gòu)造的一種能夠有效支持動態(tài)數(shù)據(jù)存儲和提取的結(jié)構(gòu),在數(shù)據(jù)存儲和信息安全領域有重要應用,通過構(gòu)造合適的hash函數(shù)可在線性時間內(nèi)完成大量數(shù)據(jù)的存取映射操作,本發(fā)明中利用這一特性構(gòu)造排序方法,實現(xiàn)一個線性時間復雜度的二維離散數(shù)據(jù)表hash排序方法,效率優(yōu)于目前普遍使用的基于快速排序方法的二維表排序方法。二維表hash排序方法平均時間復雜度可降為O(mXn) (m 是二維表的關(guān)鍵字個數(shù),η是二維表的記錄數(shù)),且在數(shù)據(jù)分布非均勻的情況下也能取得較好的計算效率,在數(shù)據(jù)飽合度變化的情況下,性能不受影響。該方法具有穩(wěn)定性,適用于帶有時序性的數(shù)據(jù)挖掘和序列機器學習等問題和海量數(shù)據(jù)處理中的排序問題研究。本發(fā)明方法中,將劃分塊中的元素hash到一個hash-cube中,按照一定的次序遍歷hash-cube即得到排好序的數(shù)據(jù)序列,此方法既適合于二維表排序也適合一維數(shù)據(jù)序列。Hash-cube為多層矩陣平面疊加的立方體,每一層矩陣平面由行和列劃分成的方格存放數(shù)據(jù)元素,用i,j表示元素的行坐標和列坐標,k表示矩陣層次,(i,j,k)唯一標示了數(shù)據(jù)元素在hash-cube中的位置。Hash-cube中的元素是按照一定的次序存放的,通過hash-cube 實現(xiàn)了從無序數(shù)據(jù)序列到有序數(shù)據(jù)序列的變換,按照層、行、列的順序遍歷hash-cube將立方體中的數(shù)據(jù)元素變換成有序的數(shù)據(jù)序列。二維屬性表排序等同于一個信息系統(tǒng)在全部屬性集上的有序劃分過程。本發(fā)明方法采用廣度優(yōu)先和劃分的思想,對每一維屬性采用一維Hash排序進行處理,每調(diào)用一次一維Hash排序,數(shù)據(jù)集合被分割為更小的塊,然后在每一塊上分別在下一屬性上調(diào)用一維 Hash排序,直到在最后一個屬性上排序完畢或者當前所有劃分塊中只有一個元素。排序時需要頻繁的對劃分的每一塊進行Hash,本發(fā)明方法中排序時使用靜態(tài)鏈表存放記錄的屬性數(shù)據(jù),記錄之間的次序由指針指示。Hash后形成的劃分塊是有序的,為了保存這種有序性, 鏈表節(jié)點包含三個元素每一條記錄的初始地址;指向下一個劃分塊的指針;指向同一劃分塊中下一個元素的指針。struct Node{int*element ;//值域中存放的是記錄在內(nèi)存中的地址Node*next_Category ;//指向下一劃分塊的的指針Node*next_eIement ;//指向同一劃分塊中下一個元素的指針
圖1是本發(fā)明實施例中將劃分塊中的元素hash到hash-cube中的方法流程圖。圖2是本發(fā)明實施例中待排序序列的hash-cube示意圖。圖3是本發(fā)明實施例中的二維hash排序方法流程圖。圖4是本發(fā)明實施例中二維表初始化為鏈表而建立初始劃分塊的示意圖。圖5至圖7是本發(fā)明實施例中二維表在每個屬性上的排序結(jié)果示意圖。
具體實施例方式為了使本發(fā)明的上述目的、特征和優(yōu)點更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本發(fā)明作具體詳細的說明。應當理解,此處所述的具體實施例僅用于解釋本發(fā)明,并不用于限定本發(fā)明。二維表排序是一維排序的引申,在二維表hash排序方法中需要遞歸調(diào)用一維 hash排序方法,一維hash排序的待排序序列等同于二維表hash排序方法中劃分塊的元素序列,現(xiàn)將本發(fā)明實施例中的hash方法介紹如下。參照圖1,是本發(fā)明實施例中將劃分塊中的元素hash到hash-cube中的方法流程圖。步驟101,查找在當前屬性上劃分塊中的最小和最大元素^lin,Bfflax0在當前屬性上劃分塊中的所有元素介于最小和最大元素之間(包括最小、最大元素),若無重復數(shù)據(jù),所有元素可以按照一定的順序映射到方陣中,在行和列劃分成的方格中存放數(shù)據(jù)。步驟102,計算hash-cube的平面方陣的維度d。方陣所能容納的元素數(shù)量為最大和最小元素之間(包括最小、最大元素)的所有無重復數(shù)據(jù),方陣的維度d即為hash-cube的行和列的大小乂 =「#^- ) + 1] (「]為向上取整)步驟103,計算劃分塊中每一個數(shù)據(jù)元素在hash-cube中的位置,構(gòu)建劃分塊的 hash-cube ο一般情況下在當前屬性上劃分塊中的元素有重復,若將劃分塊中的元素映射到平面方陣中,并不是一一映射,而是多對一映射。在hash-cube中,重復的元素存放在下一層平面方陣中,劃分塊中的元素可以唯一的hash到確定位置。需要進行hash的元素χ在 hash-cube 中的坐標(i,j,k)為,i = [ (Ximin)/d],j = (x-amin) % d, k =、+1 Qiij 初始值為0,若(i,j)已經(jīng)出現(xiàn)過,自增1)。舉個例子,一個序列A= {5,5,3,4,5,4},每一元素在hash-cube中的坐標如表1, 由序列A構(gòu)成的hash-cube如附圖2。
權(quán)利要求
1.二維表hash排序方法,其特征在于,它包括以下步驟(1)、二維表初始化為鏈表而建立初始劃分塊;(2)、在當前屬性上將劃分塊中的元素hash到hash-cube中;(3)、遍歷hash-cube重構(gòu)劃分塊;(4)、檢查是否所有元素個數(shù)大于1的劃分塊均被重構(gòu)和在所有屬性上是否完成元素個數(shù)大于1的劃分塊被重構(gòu)操作,若是則終止,若否則在下一劃分塊或者下一屬性上進行步驟(2)、(3)、(4)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,鏈表節(jié)點包括 二維表中記錄的初始地址;指向下一個劃分塊的指針; 指向同一劃分塊中下一個元素的指針。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟(2)中,使用的hash方法步驟為 查找在當前屬性上劃分塊中的最小和最大元素amin、amax ;計算hash-cube的平面矩陣的維度d,即行和列的大小,計算劃分塊中每一個數(shù)據(jù)元素在hash-cube中的位置,構(gòu)建劃分塊的hash-cube。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述“計算劃分塊中每一個數(shù)據(jù)元素在 hash-cube中的位置”包括以下步驟根據(jù)公式i = [ (x-afflin) /d]計算元素χ在hash-cube中的行坐標值; 根據(jù)公式j = (x-afflin) % d計算元素χ在hash-cube中的列坐標值; 每一實數(shù)對(i,j)對應一個計數(shù)器,初始值為0,若(i,j)已經(jīng)出現(xiàn)過,則kij = 、+1,、為層坐標值;i、j、k分別表示hash-cube的行、列、層坐標,d為hash-cube的平面矩陣維度,χ為劃分塊中待排序的數(shù)據(jù)元素,amin、amax分別為當前屬性上劃分塊中的最小、最大元素,[]表示向上取整。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,重構(gòu)劃分塊包括 按照層、行、列的順序遍歷hash-cube ;坐標i和坐標j相同,只有坐標k不同的元素屬于同一劃分塊; 劃分塊之間的順序由坐標i和坐標j標識; i、j、k分別表示hash-cube的行、列、層坐標。
全文摘要
本發(fā)明提供了一種二維表hash排序方法,它是一種高效的二維表排序方法,且此方法不會改變二維表中屬性值完全相同的記錄的相對順序,即此二維表排序方法具有穩(wěn)定性。本發(fā)明包括以下步驟(1)二維表初始化為鏈表而建立初始劃分塊;(2)在當前屬性上將劃分塊中的元素hash到hash-cube中;(3)遍歷hash-cube重構(gòu)劃分塊;(4)檢查是否所有元素個數(shù)大于1的劃分塊均被重構(gòu)和在所有屬性上是否完成元素個數(shù)大于1的劃分塊被重構(gòu)操作,若是則終止,若否則在下一劃分塊或者下一屬性上進行步驟(2)、(3)、(4)。
文檔編號G06F17/30GK102306187SQ20111025489
公開日2012年1月4日 申請日期2011年8月31日 優(yōu)先權(quán)日2011年8月31日
發(fā)明者劉勇, 范婧, 蔣云良 申請人:浙江大學