本發(fā)明屬于軌跡數(shù)據(jù)計算
技術領域:
,具體涉及一種路網(wǎng)軌跡的無損壓縮方法,包括將路網(wǎng)軌跡轉換為標號序列的數(shù)據(jù)格式,以及產生最優(yōu)標號的方法。
背景技術:
:軌跡數(shù)據(jù)是一種基本的時空數(shù)據(jù),通常定義為位置關于時間的函數(shù)。經車載定位設備采樣得到的軌跡點用(x,y,t)三元組表示,其中x和y分別為經度和緯度,而t為該采樣點的時間戳。于是原始路網(wǎng)軌跡可用一個三元組序列表示,即<(x1,y1,t1),(x2,y2,t2),…,(xn,yn,tn)>,其中,n即為軌跡的長度,而(xi,yi)是車輛在ti時刻的位置。隨著車載定位設備的普及,城市中車輛產生了海量的路網(wǎng)軌跡。這些路網(wǎng)軌跡數(shù)據(jù)承載了大量信息,在分析城市交通狀況、挖掘人的行為模式和預測車輛流動方向等問題中常作為重要決策依據(jù)和信息來源。城市路網(wǎng)用一個有向圖G=(V,E)表示,其中,V為道路的交叉點集合,而E為路口之間的路段集合。道路序列SPT=<e1,e2,…,em>是一種特殊的路網(wǎng)軌跡,專門用于存儲路網(wǎng)軌跡的形狀,即移動目標依次經過的道路。為計算道路序列,我們可以通過地圖匹配技術將軌跡采樣點都修正到地圖中的道路上,以消除采樣誤差,然后對每一個采樣點輸出其對應的路網(wǎng)道路編號。數(shù)據(jù)壓縮算法分為無損壓縮和有損壓縮兩類。無損壓縮不產生信息損失,即壓縮后數(shù)據(jù)可以完全還原為原始數(shù)據(jù);相反有損壓縮通過直接舍棄數(shù)據(jù)中不影響精度要求的部分,來達到更高的壓縮率,但是壓ω縮后數(shù)據(jù)存在信息損失。無損壓縮算法又分為熵編碼和字典式編碼兩種。常用的熵編碼有Huffman編碼和算術編碼;字典式編碼常用Lempel-Ziv編碼及衍生出的其他算法。道路序列是整數(shù)序列,理論上可以直接用傳統(tǒng)無損壓縮方法處理。然而路網(wǎng)中可以包含數(shù)萬乃至數(shù)百萬條邊,因此傳統(tǒng)無損壓縮算法難以有效壓縮道路序列。技術實現(xiàn)要素:本發(fā)明的目的在于提供一種路網(wǎng)軌跡的無損壓縮方法,包括將路網(wǎng)軌跡轉換為標號序列的數(shù)據(jù)格式,以及產生最優(yōu)標號的方法。在壓縮數(shù)據(jù)時,由于熵編碼忽略了數(shù)據(jù)項之間的相關關系,所以熵編碼不如字典式編碼。熵編碼對于獨立同分布的信源,即無記憶信源是最優(yōu)的,但是道路序列中的邊非但不獨立,而且相關性很強。例如,給定道路序列中任意邊ei,并非路網(wǎng)中全部|E|條邊均可作為其后繼,根據(jù)道路序列的連續(xù)性,后一條邊ei+1僅有至多D個選擇,其中D是G=(V,E)中頂點的最大出度。針對道路序列的連續(xù)性,本發(fā)明提出標號算法重新表示道路序列為標號序列,再用熵編碼壓縮標號序列。給定任意一條邊ei=<vx,vy>,設頂點vy的出度為d,且從vy出發(fā)的d條邊為{e1,e2,…ed}。則我們可以給這d條邊分配d個不同的標號l(e)∈{1,2,…d},不妨設為{l(e1),l(e2),…l(ed)}。這樣根據(jù)前驅邊ei和標號l(ei+1),就能唯一確定后繼邊ei+1。對于道路序列SPT=<e1,e2,…,em>,只需保存第一條邊e1和后續(xù)m-1邊的標號,我們就得到了標號序列LT=<e1,l(e2),l(e3),…l(em)>。從道路序列建立標號序列和從標號序列還原道路序列的時間復雜度均為O(|T|),在此過程中需要讀取路網(wǎng)信息和標號信息。下面我們給出路網(wǎng)標號的定義。定義1:邊的標號。給定圖中任意邊ei=<vx,vy>,其標號l(ei)是一個整數(shù)。l(ei)取值范圍為{1,2,…d},其中,d為vx的出度,且l(ei)應與vx其他出邊的標號不同。定義2:頂點的標號。給定圖中任意頂點vx,設頂點vx的出度為d,且從vy出發(fā)的d條邊為{e1,e2,…ed},則其標號是從vx的出邊集合{e1,e2,…ed}到{1,2,…d}的一一映射。定義3:圖的標號。給定任意圖G=(V,E),設圖中頂點的最大出度為D,則圖G的標號LG(e)是從圖中邊集合E到{1,2,…D}的映射,并滿足同一個頂點vx出邊的標號取值于{1,2,…d}且兩兩不同,其中d為頂點vx的出度。標號的取值范圍僅在{1,2,…D},而路網(wǎng)中邊的取值范圍為{1,2,…|E|},換言之,原來一條邊需要比特來存儲,重新表示后一個標號只需要比特??紤]到D遠遠小于|E|,故而原始道路序列相比,標號序列的大小已經大幅降低。盡管標號算法已經達到了數(shù)據(jù)壓縮的效果,但我們還能對標號序列進一步編碼。由于道路序列中各邊相關性強,但標號序列中各標號相對獨立,導致此時熵編碼和字典式編碼的差距不大。所以,本發(fā)明采用熵編碼對標號序列作進一步壓縮。顯然,對于圖中任意一個頂點,只需滿足是到{1,2,…d}的雙射,在此基礎上無論如何分配這些標號都能滿足標號序列到道路序列的一一對應。因此,對于一個頂點有dout(v)!種標號方法,對于一個圖更是有Πv∈Vdout(v)!種不同的標號方法。不同的標號方案產生不同的標號序列,這些標號序列中符號的分布也不同。我們可以通過優(yōu)化標號方案來使得提高熵編碼的壓縮效果:最優(yōu)的標號方案將使得熵最小,也即熵編碼的平均編碼長度最小。接下來我們給出最優(yōu)的標號算法——最小熵標號算法(MinimumEntropyLabeling,MEL)。給定包含大量道路序列的訓練集,我們可以通過訓練集統(tǒng)計圖中每條邊的出現(xiàn)頻率,并以此頻率估計每條邊出現(xiàn)的概率。設∑|Ti|為訓練集中包含的總邊數(shù),而count(e)為邊e在訓練集中出現(xiàn)的次數(shù),則e的出現(xiàn)頻率為f(e)=count(e)/∑|Ti|。同理,任意標號l的出現(xiàn)頻率為:f(l)=Σl(e)=lcount(e)Σ|Ti|]]>而頻率又可作為標號出現(xiàn)概率的估計,即p(l)~f(l)。在此基礎上我們可以定義標號的分布和標號的熵。定義4:標號分布和標號的熵。標號的分布根據(jù)訓練集統(tǒng)計得到,表示為一個概率分布列{p(1),p(2),…p(D)}。標號的熵直接由標號分布計算得到:定理:上述算法給出的標號具有最小的熵值H(LG)。證明:為了證明MEL的最優(yōu)性,首先需要定義一些記號。我們用一個排列來給出頂點的標號,如頂點v的標號Lv可以表示為排列σv:σv=e1e2...edl1l2...ld]]>在排列中l(wèi)v(ei)=li。定義標號l關于頂點v的剩余頻率為:gv(l)=Σl(e)=lstart(e)≠vf(e)]]>其中,start(e)為邊的起始點。對于任意start(e)=v,根據(jù)剩余頻率的定義得:gv(l)+f(e)=f(l)其中,f(e)和f(l)分別為邊e和標號l的頻率。在證明的第一部分,先給出頂點標號Lv的一個重要性質,稱為可調整性。給定任意路網(wǎng)標號LG,可以根據(jù)如下兩條不等式對頂點的出邊和標號排序:f(e1)≥f(e2)≥…f(ed)gv(l1)≥gv(l2)≥…gv(ld)之后排序后的出邊和標號一一對應,即構成了一個頂點標號:σvN=e1e2...edl1l2...ld]]>我們稱這樣符合兩個不等式的標號為不可調整的標號,反之若無法同時滿足兩個不等式,則是不可調整的標號。接下來,從任意可調整標號σ′v開始,構造一系列標號其中且最終將標號σ′v轉化為不可調整標號并證明在此過程中,路網(wǎng)標號的熵H(LG)遞減。假設對于頂點v出邊集合{e1,e2,…ed}和標號集合{l1,l2,…ld}有:f(e1)≥f(e2)≥…f(ed)gv(l1)≥gv(l2)≥…gv(ld)則通過如下策略來調整標號,首先將l1和第一個標號交換得到然后將l2和第二個標號交換得到這樣重復k次,即可得到例如,給定一個頂點標號,將作如下調整:σv′=σv0=e1e2e3e4e5e6l6l1l5l2l4l3]]>σv1=e1e2e3e4e5e6l1l6l5l2l4l3]]>σv2=e1e2e3e4e5e6l1l2l5l6l4l3]]>σv3=e1e2e3e4e5e6l1l2l3l6l4l5]]>σv4=e1e2e3e4e5e6l1l2l3l4l6l5]]>σvN=σv5=e1e2e3e4e5e6l1l2l3l4l5l6]]>考慮上述過程中的任意一步,不妨設為第i步,計算熵H(LG)的變化:σvi=e1e2...eiei+1...ej...l1l2...lix...li+1...]]>σvi+1=e1e2...eiei+1...ej...l1l2...lili+1...x...]]>于是,根據(jù)剩余頻率的定義有如下四條等式成立:gv(li+1)+f(ei+1)=fi+1(li+1)gv(li+1)+f(ej)=fi(li+1)gv(x)+f(ej)=fi+1(x)gv(x)+f(ei+1)=fi(x)又因為x≥i+1,所以根據(jù)兩條不等式分別有gv(li+1)≥gv(x)且f(ei+1)≥f(ej)。因此有:gv(x)+f(ej)=fi+1(x)≤gv(li+1)+f(ej)=fi(li+1)gv(li+1)+f(ej)=fi(li+1)≤gv(li+1)+f(ei+1)=fi+1(li+1)所以得:fi+1(x)≤fi(li+1)≤fi+1(li+1)。同時,由于fi(li+1)+fi(x)=gv(li+1)+f(ei+1)+gv(x)+f(ej)=fi+1(li+1)+fi+1(x)所以得:fi(li+1)+fi(x)=fi+1(li+1)+fi+1(x)。給定X為一離散隨機變量,其樣本空間為{a,b},設p(a)=x,則p(b)=1-x。易得H(X)=-xlogx-(1-x)log(1-x),其函數(shù)圖像如圖1所示。從圖2中可見,當p(a)和p(b)的和一定時,它們的差越大,則熵越小??紤]到我們使用頻率來估計概率,則有:p(x)=f(x)Σi=1Df(i)]]>又因為即訓練集大小為常數(shù),所以可以將上述所有等式和不等式中的f(x)等價替換為p(x),并得到:pi+1(x)≤pi(li+1)≤pi+1(li+1)所以有:|pi(li+1)-pi(x)|≤|pi+1(li+1)-pi+1(x)|又因為pi(li+1)+pi(x)=pi+1(li+1)+pi+1(x)故得:pi(li+1)logpi(li+1)+pi(x)logpi(x)≥pi+1(li+1)logpi+1(li+1)+pi+1(x)logpi+1(x)而圖標號的熵定義為由于除去pi(li+1)logpi(li+1)和+pi(x)logpi(x)兩項,其余各項的值不改變,所以得到即證明的第二部分將排除上述不等式中的等號,以證明我們的調整過程保證熵單調遞減。用反證法,假設則必有:H(LG′)=H(LG0)=H(LG1)=...H(LGk)=H(LGN)]]>即在調整過程的任意一步都有:pi(li+1)logpi(li+1)+pi(x)logpi(x)=pi+1(li+1)logpi+1(li+1)+pi+1(x)logpi+1(x)|pi(li+1)-pi(x)|=|pi+1(li+1)-pi+1(x)|將p(x)等價替換回f(x),得:|fi(li+1)-fi(x)|=|fi+1(li+1)-fi+1(x)|所以有fi+1(li+1)=fi(li+1)或fi+1(x)=fi(li+1),即gv(li+1)=gv(x)或f(ei+1)=f(ej)成立。接下來我們用數(shù)學歸納法證明σ′v本身就是不可調整的。歸納基礎為是不可調整的,再歸納假設是不可調整的,即對于:σvi+1=e1e2...eiei+1...ej...l1l2...lili+1...x...]]>有:f(e1)≥f(e2)≥…f(ei)≥f(ei+1)≥…f(ej)≥…gv(l1)≥gv(l2)≥…gv(li)≥gv(li+1)≥…gv(x)≥…注意映射對(ej,x)可能和證明第一部分中的位置不一樣,但可以保證(ej,x)必然出現(xiàn)在(ei+1,li+1)之后。如果gv(li+1)=gv(x)成立,則可以交換x和li+1得到:e1e2...eiei+1...ej...l1l2...lix...li+1...=σvi]]>且滿足f(e1)≥f(e2)≥…f(ei)≥f(ei+1)≥…f(ej)≥…gv(l1)≥gv(l2)≥…gv(li)≥gv(li+1)=…=gv(x)≥…同理,如果f(ei+1)=f(ej)成立,只需要交換ej和ei+1得到:e1e2...eiej...ei+1...l1l2...lili+1...x...=e1e2...eiei+1...ej...l1l2...lix...li+1...=σvi]]>且滿足f(e1)≥f(e2)≥…f(ei)≥f(ei+1)=…=f(ej)≥…gv(l1)≥gv(l2)≥…gv(li)≥gv(li+1)≥…gv(x)≥…以上兩種情況,無論滿足哪一種,都可以證得也為不可調整的標號。綜上所述σ′v是不可調整的,產生矛盾。于是假設不成立,即因此,必有成立。在證明的第三部分,我們證明,如果在圖中沒有可調整的頂點標號,那么該路網(wǎng)標號必然等價于MEL給出的標號設LG為一圖的標號,且所有標號按照下述不等式排序:f(lm1)≥f(lm2)≥…f(lmD)對于圖中任意頂點v的標號Lv:σv=e1e2...edl1l2...ld]]>由于gv(l)+f(e)=f(l),所以有:gv(lm1)+f(em1)≥gv(lm2)+f(em2)≥…gv(lmd)+f(emd)如果gv(lmx)+f(emx)≥gv(lmy)+f(emy)且gv(lmx)<gv(lmy),則有f(emx)≥f(emy)。而如果gv(lmx)+f(emx)≥gv(lmy)+f(emy),且gv(lmx)≥gv(lmy),則Lv必然是不可調整的,也有f(emx)≥f(emy)。所以對于Lv必然滿足:f(em1)≥f(em2)≥…f(emd)gv(lm1)≥gv(lm2)≥…gv(lmd)換言之,對于每個Lv,我們都給頻率第i大的邊分配了標號lmi。不妨取lmi=i,則任意不可調整的LG都和MEL給出的標號等價。綜上所述,給定任意標號LG,如果它不可調整,則必然和MEL給出的標號等價;反之如果可以調整,我們將不斷調整并嚴格減小它的熵值直至它和等價。因此MEL給出的標號是最優(yōu)的。證畢。根據(jù)以上論述,本發(fā)明提出的路網(wǎng)軌跡的無損壓縮方法,具體歸納如下:首先,將路網(wǎng)軌跡重新表示為標號序列的格式;然后,用熵編碼方法壓縮標號序列。設城市路網(wǎng)用一個有向圖G=(V,E)表示,其中,V為道路的交叉點集合,而E為路口之間的路段集合。道路序列SPT=<e1,e2,…,em>是一種特殊的路網(wǎng)軌跡,專門用于存儲路網(wǎng)軌跡的形狀,即移動目標依次經過的道路。路網(wǎng)軌跡數(shù)據(jù)是一種基本的時空數(shù)據(jù),通常定義為位置關于時間的函數(shù)。經車載定位設備采樣得到的軌跡點用(x,y,t)三元組表示,其中x和y分別為經度和緯度,而t為該采樣點的時間戳。于是原始路網(wǎng)軌跡可用一個三元組序列表示,即<(x1,y1,t1),(x2,y2,t2),…,(xn,yn,tn)>,其中,n即為軌跡的長度,而(xi,yi)是車輛在ti時刻的位置。本發(fā)明中,所述將路網(wǎng)軌跡重新表示為標號序列的格式,就是將原始路網(wǎng)軌跡中的道路編號轉換為標號,其中:(1)所述原始路網(wǎng)軌跡為道路網(wǎng)絡中的道路序列SPT=<e1,e2,…,em>,道路網(wǎng)絡被表示為一個有向圖G=(V,E),其中,V為圖頂點(即道路的交叉路口)集合,而E為連接圖頂點之間邊(即連接路口之間的路段)的集合;(2)所述標號序列為道路序列的首邊e1和后續(xù)m-1邊的標號構成的序列,即LT=<e1,l(e2),l(e3),…l(em)>;(3)所述標號為道路編號到標號的映射,具體為,給定圖中任意邊ei=<vx,vy>,其標號l(ei)是一個整數(shù),l(ei)取值范圍為{1,2,…d},其中,d為vx的出度,且l(ei)應與vx其他出邊的標號不同;(4)也可用地圖的頂點序列來表示空間數(shù)據(jù),即SPT=<v0,v1,v2,…,vm>,其中vi為有向邊邊ei-1的終點,或邊ei的起點,而用頂點表示道路序列和用邊表示是等價的;因此若用頂點序列作空間數(shù)據(jù),可先將其轉化為道路序列再生成標號序列。產生最優(yōu)標號的方法——最小熵標號算法(MinimumEntropyLabeling,MEL)。對于道路網(wǎng)絡G=(V,E)和道路序列訓練集,計算所述的標號,且該標號的分布具有最小的熵值;其基本步驟為:(1)統(tǒng)計G中每條邊ei在訓練集中的出現(xiàn)頻率f;(2)對G中每個頂點v:對v的每一條后繼ei按f由高到低排序,再按照排序結果從1開始依次對ei標號,記錄到l(ei);(3)存儲l作為最優(yōu)標號。其中,涉及的計算式:設Σ|Ti|為訓練集中包含的總邊數(shù),而count(e)為邊e在訓練集中出現(xiàn)的次數(shù),則e的出現(xiàn)頻率為f(e)=count(e)/∑|Ti|。同理,任意標號l的出現(xiàn)頻率為:f(l)=Σl(e)=lcount(e)Σ|Ti|]]>頻率又可作為標號出現(xiàn)概率的估計,即p(l)~f(l)。在此基礎上我們可以定義標號的分布和標號的熵:標號的分布根據(jù)訓練集統(tǒng)計得到,表示為一個概率分布列{p(1),p(2),…p(D)};標號的熵直接由標號分布計算得到:該標號方法本身并不復雜,時間復雜度僅為O(|V|DlogD),但是它卻給出了最有利于熵編碼壓縮標號序列的標號方案。得到最優(yōu)標號后,即可采用任意一種熵編碼算法壓縮標號序列。附圖說明圖1為熵函數(shù)圖像。圖2為熵值變化圖像。圖3為道路網(wǎng)絡局部。圖4為Huffman樹。具體實施方式如圖3所示,給定道路網(wǎng)絡局部包含12個頂點(路口)和17條邊(道路)。首先給定任意包含足夠多數(shù)量軌跡的歷史數(shù)據(jù)集,我們可以統(tǒng)計每條邊在數(shù)據(jù)集中的出現(xiàn)頻率。例如圖3中,從v5出發(fā)有兩條邊e4和e8,如果統(tǒng)計得e4出現(xiàn)5次和e8出現(xiàn)10次,則根據(jù)出現(xiàn)頻率由高到低可以給e4標號2,給e8標號1。如此根據(jù)權利2中所述的最優(yōu)標號方法,可以得到全圖中每一條邊的標號,且滿足同一個頂點出發(fā)的邊,其對應的標號彼此不同。又根據(jù)說明書中對于該標號方法最優(yōu)性的證明,可知該標號得到的標號分布熵值最小。給定原道路序列首先將道路序列的第一條邊e8直接加入標號序列,然后依次把之后3條邊的標號加入標號序列即可得到從標號序列還原到原始道路序列也是簡單的,給定標號序列首先將首邊直接加入還原后的道路序列,然后依次根據(jù)標號唯一確定后繼邊,如:根據(jù)e8可以知道后繼邊只有可能是e5和e9,分別對應標號2和標號1,由于下一個標號是2所以確定下一條邊是e5;根據(jù)e5和標號1確定后繼邊為e2;最后根據(jù)e2和標號1確定最后一條邊為e3。參見表1。之后即可對標號序列中每一個標號作熵編碼,假設完整道路網(wǎng)絡包含4個標號,他們分別是1、2、3和4,且這4個標號的頻率為40、30、20和10,如表2所示。則構建Huffman樹如圖4所示,這四個標號的編碼為1、01、000和001。因此給定標號序列我們首先將首邊轉化為二進制表示01000,其位數(shù)根據(jù)路網(wǎng)中邊數(shù)決定,這里至少有17條邊,因此至少要5位二進制來表示首邊。之后依次把標號轉換為對應的熵編碼,得到最終壓縮結果為010000111,共只有9位二進制,而原始數(shù)據(jù)直接編碼需要20位二進制。表1為示例道路序列和標號序列T1(e8,e5,e2,e3)(e8,2,1,1)T2(e15,e12,e9,e10)(e15,2,1,1)T3(e12,e5,e2,e3)(e12,2,1,1)表2所有標號的全局出現(xiàn)頻率當前第1頁1 2 3