專利名稱::創(chuàng)建用于轉(zhuǎn)換數(shù)據(jù)表的編輯腳本的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及在通信終端中轉(zhuǎn)換數(shù)據(jù)表的方法,特別地,但不限于用于創(chuàng)建可在更新移動(dòng)通信中的數(shù)據(jù)時(shí)使用的編輯腳本的方法。
背景技術(shù):
:空中編程(Overtheairprogramming,OTAP)已經(jīng)被開(kāi)發(fā),因此可使用新軟件或數(shù)據(jù)重新編程位于無(wú)線網(wǎng)絡(luò)中的移動(dòng)終端,而無(wú)需將這些終端重返至中央管理網(wǎng)點(diǎn)。在移動(dòng)終端中保持的數(shù)據(jù)通常以表格格式存儲(chǔ),其可以各種方式更新,典型地,可通過(guò)發(fā)送可以替代該舊表的全新表,或通過(guò)發(fā)送轉(zhuǎn)換該舊表以創(chuàng)建該新表的編輯腳本或其他文件。例如,在US5832520和US7003534中描述了包含編輯腳本的系統(tǒng)。創(chuàng)建編輯腳本典型地包括確定舊表和新表之間的差異并創(chuàng)建一段相對(duì)短的包括例如插入、刪除和重置標(biāo)簽操作的代碼。然后,該腳本從該中央網(wǎng)點(diǎn)通過(guò)無(wú)線廣播至每個(gè)需要升級(jí)的終端。當(dāng)不同終端組包含不同的表或具有不同數(shù)據(jù)的相同表時(shí),可能需要多個(gè)不同的編輯腳本。為了使處理更有效,被用于創(chuàng)建、廣播和執(zhí)行該編輯腳本的時(shí)間應(yīng)該少于被用于簡(jiǎn)單廣播該新數(shù)據(jù)的時(shí)間。已存在大量用于確定兩個(gè)文件間區(qū)別的算法,例如標(biāo)準(zhǔn)文本區(qū)別算法和二進(jìn)制區(qū)別算法。其它用于轉(zhuǎn)換一個(gè)序列符號(hào)至另一序列的算法,包括計(jì)算編輯圖形內(nèi)路徑長(zhǎng)度或編輯距離矩陣,也已經(jīng)被開(kāi)發(fā)[1]。當(dāng)該數(shù)據(jù)以例如表或樹(shù)的等級(jí)形式可用時(shí),這些算法相當(dāng)沒(méi)有效率。因此當(dāng)該舊的和新的數(shù)據(jù)被表現(xiàn)為有根、有序、標(biāo)記了的樹(shù)時(shí),已開(kāi)發(fā)出更有效的算法以找到最小成本的編輯腳本[2]。例如,在US7,287,0中描述了一個(gè)基于最近樹(shù)的系統(tǒng)。編輯距離矩陣可由兩個(gè)適當(dāng)構(gòu)造的樹(shù)形成。該矩陣的兩個(gè)軸典型地由包含數(shù)據(jù)值的樹(shù)的節(jié)點(diǎn)形成。接著該矩陣可被用于確定這些樹(shù)之間的編輯路徑。該路徑由使用插入、刪除或重置標(biāo)簽操作連接矩陣的頂點(diǎn)的有向圖來(lái)確定。編輯路徑可被用于恢復(fù)用來(lái)轉(zhuǎn)換一個(gè)樹(shù)成另一個(gè)的編輯腳本。用于優(yōu)化或至少減少其長(zhǎng)度以及編輯路徑的其它處理成本的各種算法是已知的。[l]EugeneMyers,"An0(ND)DifferenceAlgorithmanditsVariations,,,Algorithmica,vol1,p251_266(1986).[2]SudarshanChawathe,"ComparingHierarchicalDatainExternalMemory,,,VLDB'99,Proceedingsof25thInternationalConferenceonVeryLargeDatabases,September7-10,1999,p90_101(MorganKaufmann,1999).
發(fā)明內(nèi)容因此本發(fā)明的目的是提供用于轉(zhuǎn)換數(shù)據(jù)表的改進(jìn)方法,或者至少提供一個(gè)現(xiàn)有方法的有用的替換方法。本發(fā)明的一個(gè)方面是一種創(chuàng)建用于將舊的數(shù)據(jù)表轉(zhuǎn)換成新的數(shù)據(jù)表的編輯腳本的方法,包括從該舊表和新表分別創(chuàng)建舊數(shù)據(jù)樹(shù)和新數(shù)據(jù)樹(shù),確定第一部分腳本,其將該舊樹(shù)轉(zhuǎn)換成與該新樹(shù)具有相同長(zhǎng)度的中間樹(shù),確定第二部分腳本,其將該中間樹(shù)轉(zhuǎn)換成新樹(shù),并且合并該第一和第二部分腳本。優(yōu)選地,該第一部分腳本被確定為僅僅在舊數(shù)據(jù)樹(shù)中引起插入和刪除的最小成本的一系列編輯。在該舊數(shù)據(jù)樹(shù)中只有完全子樹(shù)被插入或刪除。優(yōu)選地,該第二部分腳本被確定為僅僅在中間樹(shù)中引起替換的最小成本的一系列編輯。優(yōu)選地,使用編輯距離矩陣確定該第一部分腳本,該編輯距離矩陣具有行優(yōu)先形式的舊樹(shù)和中間樹(shù)。使用編輯距離矩陣確定該第二部分腳本,該編輯距離矩陣具有行優(yōu)先形式的中間樹(shù)和新樹(shù)??蛇x地,使用編輯距離矩陣確定該第二部分腳本,該編輯距離矩陣具有列優(yōu)先形式的中間樹(shù)和新樹(shù)。優(yōu)選地,該方法還包括確定第二腳本,該第二腳本使用行優(yōu)先形式轉(zhuǎn)換中間樹(shù)成新樹(shù),確定第二腳本,該第二腳本使用列優(yōu)先形式轉(zhuǎn)換中間樹(shù)成新樹(shù),基于成本從這些第二腳本中選擇該第二部分腳本。優(yōu)選地,這些數(shù)據(jù)樹(shù)是由來(lái)自各個(gè)表中的數(shù)據(jù)形成的有根、有序、標(biāo)記了的樹(shù)。優(yōu)選地,這些數(shù)據(jù)樹(shù)還僅僅包含度為0、1、2的節(jié)點(diǎn)并且僅僅度為2的節(jié)點(diǎn)包含來(lái)自該各個(gè)表中的數(shù)據(jù)。本發(fā)明的另一方面是一種用于更新移動(dòng)通信設(shè)備中的數(shù)據(jù)的方法,該方法包括確定存在于該設(shè)備中的舊數(shù)據(jù)表,確定在該設(shè)備中所需的新數(shù)據(jù)表,確定轉(zhuǎn)換該舊數(shù)據(jù)表成新數(shù)據(jù)表的編輯腳本,傳送該編輯腳本至該設(shè)備,以及驅(qū)使該設(shè)備執(zhí)行該編輯腳本,其中使用如上所述的方法確定該編輯腳本。本發(fā)明的優(yōu)選實(shí)施例將參照所附附圖描述,其中圖1概略地示出由無(wú)線網(wǎng)絡(luò)中的無(wú)線單元使用的數(shù)據(jù)表,圖2示出了用于創(chuàng)建轉(zhuǎn)換數(shù)據(jù)庫(kù)中的多個(gè)數(shù)據(jù)表的編輯腳本的例程,圖3A-;3B示出了用于為單個(gè)表創(chuàng)建編輯腳本的例程,圖4A-4B示出了用于計(jì)算舊樹(shù)和新樹(shù)之間編輯距離的例程,圖5示出了用于轉(zhuǎn)換表成行優(yōu)先樹(shù)的例程,圖6示出了用于轉(zhuǎn)換行優(yōu)先樹(shù)成列優(yōu)先樹(shù)的例程,圖7示出了個(gè)用于創(chuàng)建部分編輯腳本的例程,圖8示出了用于轉(zhuǎn)換舊樹(shù)成具有相同長(zhǎng)度的中間樹(shù)的例程,圖9示出了用于創(chuàng)建轉(zhuǎn)換該舊樹(shù)成中間樹(shù)的編輯腳本的例程,圖10示出了用于從有向圖創(chuàng)建編輯腳本的例程,圖IlAUlB是舊表和新表的簡(jiǎn)單示例,圖12AU2B對(duì)應(yīng)于圖IlAUlB的舊樹(shù)和新樹(shù)的示例,圖13是用于圖IlAUlB中舊樹(shù)和新樹(shù)的編輯距離矩陣,圖14示出了通過(guò)圖13中矩陣的允許例程,圖15示出了對(duì)編輯距離矩陣中頂點(diǎn)的更新、插入、刪除步驟,圖16A、16B、16C示出了用于對(duì)圖15中更新、插入、刪除步驟的計(jì)算成本的例程,圖17A至17F示出了對(duì)圖14的矩陣中的編輯路徑計(jì)算成本的步驟,圖18示出了用于圖14的優(yōu)化編輯路徑,圖19A、19B示出了從圖18恢復(fù)的編輯腳本的兩種形式,圖20A、20B示出了圖14以行優(yōu)先和列優(yōu)先形式的中間樹(shù),圖21示出了圖14以列優(yōu)先形式的新樹(shù);圖22A、22B示出了對(duì)應(yīng)于圖20A、20B和圖21、以及優(yōu)化編輯路徑的編輯距離矩陣;圖23示出了從圖20B恢復(fù)的編輯腳本,以及圖M示出了通過(guò)合并圖19B和23的腳本形成的編輯腳本。具體實(shí)施例方式參照附圖將意識(shí)到本發(fā)明可被以大量不同方式實(shí)施以用于各種移動(dòng)無(wú)線系統(tǒng),以及潛在的其它不相關(guān)系統(tǒng),這些系統(tǒng)以等級(jí)形式使用和更新數(shù)據(jù)。在此所述的實(shí)施例只是作為示例。為了清楚起見(jiàn),許多常規(guī)無(wú)線系統(tǒng)的細(xì)節(jié)已經(jīng)被省略,但是仍舊可以本領(lǐng)域技術(shù)人員理解。圖1示出了一個(gè)簡(jiǎn)單無(wú)線網(wǎng)絡(luò),其具有通過(guò)網(wǎng)關(guān)11連接至基站12的中央管理計(jì)算機(jī)10。使用一個(gè)或多個(gè)RF信道在移動(dòng)終端13和基站之間傳送無(wú)線信號(hào)。實(shí)際上這種網(wǎng)絡(luò)可以包括若干個(gè)不同種類的中央計(jì)算機(jī)、很多不同設(shè)置的基站、以及在一個(gè)寬廣的地域內(nèi)使用的一群多達(dá)一千或更多的移動(dòng)終端。每個(gè)移動(dòng)終端包含能夠使用OTAP更新的軟件和數(shù)據(jù)。該數(shù)據(jù)典型地以表格形式存儲(chǔ),在此表現(xiàn)為“舊表”,要被更新或轉(zhuǎn)換為“新表”。該管理計(jì)算機(jī)包含數(shù)據(jù)庫(kù)14,其存儲(chǔ)與終端相關(guān)的數(shù)據(jù),包括由每個(gè)終端存儲(chǔ)的舊表的備份。該管理計(jì)算機(jī)還包含客戶端軟件15和服務(wù)器軟件16。典型的移動(dòng)無(wú)線終端的部署和更新處理如下進(jìn)行1)在本領(lǐng)域中使用前,無(wú)線終端13由該客戶端軟件15編程。這就允許該客戶端軟件將所需軟件和配置數(shù)據(jù)部署至該終端。該客戶端軟件在該中央管理數(shù)據(jù)庫(kù)中記錄該終端的狀態(tài)。2)客戶端軟件15稍后被使用以修改該所需應(yīng)用軟件版本和/或在這些終端中所需的配置數(shù)據(jù),如同存儲(chǔ)在該中央管理數(shù)據(jù)庫(kù)中的數(shù)據(jù)。3)服務(wù)器軟件16為要被發(fā)送至終端的任何已更新軟件創(chuàng)建補(bǔ)丁文件。4)服務(wù)器軟件16為任何配置數(shù)據(jù)的改變創(chuàng)建更新文件。該更新文件包含由各個(gè)終端使用的轉(zhuǎn)換舊表成新表的編輯腳本。5)服務(wù)器軟件16創(chuàng)建數(shù)據(jù)消息并使用該數(shù)據(jù)網(wǎng)關(guān)通過(guò)無(wú)線廣播這些消息至終端。6)終端13異步發(fā)送響應(yīng)消息至該固定網(wǎng)絡(luò)。7)一旦已確認(rèn)所有的更新已經(jīng)由終端13接收,該服務(wù)器軟陣發(fā)送激活命令至該終端??蛇x地,這個(gè)步驟可以需要來(lái)自一群管理員的輸入,他們手動(dòng)初始化對(duì)這些更新的激活。8)一旦收到激活命令,這些終端13應(yīng)用這些更新至該軟件和配置數(shù)據(jù)。依賴于該終端的配置,這些更新的應(yīng)用可以是a)—旦收到該命令;b)在下次開(kāi)機(jī)時(shí);c)在由該無(wú)線使用者初始化時(shí)。圖2描繪了根據(jù)在一群終端中存在的舊數(shù)據(jù)表和對(duì)應(yīng)的隨后所需的新表之間的差異,一個(gè)或多個(gè)編輯腳本如何在該中央管理數(shù)據(jù)庫(kù)14中被創(chuàng)建。對(duì)于數(shù)據(jù)庫(kù)中的每個(gè)表,該客戶端軟件15將舊表和新表轉(zhuǎn)換成在之后編輯距離矩陣中使用的舊樹(shù)和新樹(shù)表示。接著僅使用影響該舊表長(zhǎng)度的一個(gè)有限范圍操作來(lái)計(jì)算編輯路徑,并且恢復(fù)第一部分編輯腳本。通過(guò)應(yīng)用該腳本至該舊表數(shù)據(jù),生成該數(shù)據(jù)的中間樹(shù)表示。接著在中間樹(shù)和使用行優(yōu)先和列優(yōu)先形式兩者的新樹(shù)之間計(jì)算一對(duì)編輯路徑和相應(yīng)的部分編輯腳本。每個(gè)這些第二部分腳本的成本被計(jì)算并且選擇成本最小的那個(gè)。接著通過(guò)合并該第一部分腳本與所選擇的第二部分腳本,以形成用于轉(zhuǎn)換該舊表成該新表的完整編輯腳本。與圖2相關(guān),該舊和新表可被優(yōu)選地轉(zhuǎn)換為樹(shù),通過(guò)將表中數(shù)據(jù)的每一項(xiàng)考慮為深或度為2的葉子節(jié)點(diǎn)。在行優(yōu)先形式下,該表的每行變成子樹(shù),該子樹(shù)具有包含被加至具有空值的度為1的節(jié)點(diǎn)的數(shù)據(jù)值的葉子。在列優(yōu)先形式下,該表的每列類似地變成子樹(shù),該子樹(shù)具有包含被加入具有空值的度為1的節(jié)點(diǎn)的數(shù)據(jù)的葉子。這些葉子據(jù)此由這些數(shù)據(jù)值標(biāo)記。所有度為1的節(jié)點(diǎn)被加至度為0的根節(jié)點(diǎn),也就是空值。由連續(xù)行或列形成的子樹(shù)被從左至右排序,以“先序”。通過(guò)在樹(shù)中向下移動(dòng),每個(gè)節(jié)點(diǎn)被連續(xù)編號(hào),并且從左至右。用這種方法將表轉(zhuǎn)換成樹(shù)的示例由圖11A、12A和11B、12B給出。仍舊與圖2相關(guān),優(yōu)選地,該編輯距離矩陣由兩個(gè)度為2的有根、有序、標(biāo)記了的樹(shù)形成。該矩陣的兩個(gè)軸由各自的度標(biāo)簽對(duì)序列形成。以這種方式形成的矩陣示例由圖12A、12B、13給出。還與圖2相關(guān),優(yōu)選地,該第一部分腳本僅僅由影響該舊樹(shù)長(zhǎng)度的操作形成,因此該中間樹(shù)的長(zhǎng)度和新樹(shù)的長(zhǎng)度是相同的。僅僅那些在舊樹(shù)中包含完全子樹(shù)的插入或刪除的操作才被認(rèn)為是有效的。那些包含各個(gè)節(jié)點(diǎn)的插入或刪除的操作是無(wú)效的。以這種方式形成的編輯路徑的示例在圖18中給出。相比之下,該第二部分腳本僅僅使用在中間樹(shù)中重新標(biāo)記節(jié)點(diǎn)的操作而被計(jì)算。以這種方式形成的編輯路徑的示例在圖22A、22B中給出。圖3描繪了用于為單個(gè)表創(chuàng)建編輯腳本的例程。該例程的輸入是兩張數(shù)據(jù)表,即,為舊表和新表。該例程首先檢查該表適合打補(bǔ)丁?;谝唤M最基本的要素,該要素被識(shí)別用于更新在遠(yuǎn)程終端上的數(shù)據(jù)庫(kù),沒(méi)有方式創(chuàng)建改變列(在域中數(shù)據(jù)位的個(gè)數(shù))的長(zhǎng)度或增加或移除列的腳本。任何這種改變將意味著該表的整個(gè)內(nèi)容必須被發(fā)送。如果這些表的結(jié)構(gòu)(它們的定義)相等,則該處理如之前所述的繼續(xù)處理。圖4描繪了具有兩層嵌套循環(huán)的例程,其被用于處理該兩個(gè)樹(shù)并且計(jì)算它們之間的編輯距離。首先,一些變量被初始化。last_sub_tree[]是持有矩陣最后列的陣列,其持有在水平軸上的子樹(shù)的根節(jié)點(diǎn)。當(dāng)一個(gè)完整的子樹(shù)(或行)正在被處理時(shí),即,刪除操作,其與唯一被執(zhí)行的該例程主體的計(jì)算相關(guān)。previous_column[]持有外層循環(huán)在之前索引的列,其被需要用于計(jì)算更新操作的成本。subtreejength(其被用在大量計(jì)算中)被初始化為列的數(shù)目(在該原始表)加1。額外的增加用于說(shuō)明該子樹(shù)的根節(jié)點(diǎn)(樹(shù)中順序?yàn)?的節(jié)點(diǎn)),其在表至樹(shù)的轉(zhuǎn)換中被增加。在該例程中的外部循環(huán)從1運(yùn)行至該原始表的長(zhǎng)度。其處理該矩陣的每一列。由于該編輯腳本僅僅對(duì)該根節(jié)點(diǎn)(第0列的第0個(gè)索引)感興趣,第0列可被忽略。該方法限制了兩個(gè)樹(shù)中的節(jié)點(diǎn)和在該原始表中的列索引與在該目的表的列索引匹配的頂點(diǎn)的比較。該限制帶來(lái)的后果是沒(méi)有葉子節(jié)點(diǎn)的插入或刪除。為此,該內(nèi)層循環(huán)被初始化為原始表的索引(來(lái)自該外層循環(huán)的循環(huán)計(jì)數(shù)值)-1以子樹(shù)長(zhǎng)度為模(有效地識(shí)別在該目的樹(shù)內(nèi)與在原始樹(shù)位置匹配的列的偏移)。該內(nèi)層循環(huán)接著在每次迭代的末尾由該子樹(shù)的長(zhǎng)度增加。這意味著只有那些在源中的列索引和在目的中的列索引匹配的頂點(diǎn)才被考慮用于該外層循環(huán)的每次迭代。該內(nèi)層循環(huán)的每次迭代計(jì)算執(zhí)行更新操作的成本。如果該外層循環(huán)計(jì)數(shù)器由該子樹(shù)的長(zhǎng)度恰好除盡,則我們正處于子樹(shù)的根并且在該內(nèi)層循環(huán)的每次迭代過(guò)程中插入和刪除的成本也被計(jì)算。當(dāng)遇到了該矩陣中的最終節(jié)點(diǎn),那個(gè)操作(該有向圖中的最終節(jié)點(diǎn)表示該編輯腳本)被從該例程中返回。圖5描繪了用于轉(zhuǎn)換表成有根、有序、標(biāo)記了的樹(shù)的例程(以先序或行優(yōu)先)。度為0的節(jié)點(diǎn)被用作整個(gè)樹(shù)的根。接著對(duì)于每行來(lái)說(shuō),度為1的節(jié)點(diǎn)被用作子樹(shù)的根。對(duì)于每列來(lái)說(shuō),當(dāng)前行的值被增加為樹(shù)中度為2的節(jié)點(diǎn)。度為1的節(jié)點(diǎn)被用作一個(gè)終結(jié)符以簡(jiǎn)化插入和刪除操作的計(jì)算。圖6描繪了轉(zhuǎn)換行優(yōu)先(先序)樹(shù)成列優(yōu)先(后序)樹(shù)的例程。這意味著以行優(yōu)先的順序讀樹(shù)并且以列優(yōu)先的順序?qū)憳?shù)。該流程圖展示了這樣操作的方法,其選擇以迭代整個(gè)輸出樹(shù)并且基于由當(dāng)前行索引與子樹(shù)長(zhǎng)度相乘加上感興趣的列從源樹(shù)計(jì)算該讀取位置。圖7描繪了用于恢復(fù)僅僅包含影響該表長(zhǎng)度的操作的子集(插入和刪除操作)的部分編輯腳本的例程。該例程顛倒該有向圖中的邊(或操作)的順序并且接著將不是插入或刪除的任何操作轉(zhuǎn)換至空操作。圖8描繪了用于將來(lái)自圖7的部分編輯腳本應(yīng)用至該源樹(shù)以創(chuàng)建與該目的樹(shù)相同長(zhǎng)度的中間樹(shù)的例程。這個(gè)中間樹(shù)會(huì)保持來(lái)自源樹(shù)的、排除了那些已經(jīng)被刪除的行的數(shù)據(jù),除了那些已經(jīng)被插入的行(其中該數(shù)據(jù)將與該目的樹(shù)的數(shù)據(jù)相匹配)外。對(duì)于空操作來(lái)說(shuō),該例程拷貝來(lái)自源樹(shù)的數(shù)據(jù)至該中間樹(shù)。對(duì)于刪除操作來(lái)說(shuō),該例程增加該源樹(shù)中的指針并且不執(zhí)行更新至中間樹(shù)。對(duì)于插入操作來(lái)說(shuō),該例程拷貝來(lái)自該目的樹(shù)的數(shù)據(jù)并且不在該源樹(shù)中增加該指針。圖9描繪了一旦這些樹(shù)知道長(zhǎng)度相同則計(jì)算該編輯腳本的例程。這是該主編輯距離處理的簡(jiǎn)化版本。該算法簡(jiǎn)單地與為索引兩個(gè)樹(shù)中每個(gè)位置比較索引以及確定該標(biāo)簽是否應(yīng)當(dāng)被更新相關(guān)。圖10描繪了負(fù)責(zé)從有向圖恢復(fù)該編輯腳本的例程。邊以它們?cè)谟邢驁D中出現(xiàn)的順序讀入(因此從兩樹(shù)的末端后退至源頭)。相同操作類型的鄰近邊被連接起來(lái)以形成更大的操作(跨越樹(shù)中更多節(jié)點(diǎn)的操作)。一旦一條邊不能和圖中的下條邊連接則它被輸出至該腳本。這個(gè)一直被重復(fù)直到?jīng)]有更多的邊要被處理。圖11至30涉及轉(zhuǎn)換舊數(shù)據(jù)表至新數(shù)據(jù)表的簡(jiǎn)化的例子。圖IlAUlB示出了具有三列的表“Animal”,其包含存儲(chǔ)為P-string的一種動(dòng)物的名字;首字節(jié)被用以存儲(chǔ)字符串中一定數(shù)量的字符,該字符串中的每個(gè)字符被連續(xù)地存儲(chǔ)在隨后的字節(jié)中,“#legs”,其包含該類動(dòng)物通常具有腿的個(gè)數(shù),其被存儲(chǔ)為一個(gè)單字節(jié),“Colour”,其包含與作為P-string的動(dòng)物類型通常最相關(guān)的顏色。圖12A示出了表現(xiàn)為有根、有序、標(biāo)記了的樹(shù)的圖IlA中舊表數(shù)據(jù)的表示。樹(shù)中的每個(gè)節(jié)點(diǎn)由其序號(hào)注釋。節(jié)點(diǎn)按先序編號(hào)。每個(gè)節(jié)點(diǎn)旁邊的文字標(biāo)簽包含該節(jié)點(diǎn)的度(樹(shù)的深度)和它的標(biāo)簽(在樹(shù)中用于那個(gè)單元的數(shù)據(jù))。圖12B示出了表現(xiàn)為有根、有序、標(biāo)記了的樹(shù)的圖IlB中新表的表示。注釋和圖12A相同。在這種情況下這些改變可以被發(fā)現(xiàn)。第二個(gè)子樹(shù)(根在節(jié)點(diǎn)幻現(xiàn)在持有不同的細(xì)節(jié)。根在9的子樹(shù)含有之前根在5的數(shù)據(jù)。額外的子樹(shù)(根在17)已經(jīng)被添加至該樹(shù)。這表示一個(gè)行的插入、另一行的刪除、以及附加一個(gè)新行至該表結(jié)尾。圖13示出了由圖12A、12B中的這些樹(shù)形成的被存儲(chǔ)為標(biāo)簽度對(duì)陣列的編輯距離矩陣。舊和新數(shù)據(jù)分別沿著水平軸和垂直軸。圖14示出了在圖13的矩陣中可用的有限范圍的編輯路徑。不可能或效率不高的操作不被考慮,具體的操作包括插入或刪除各個(gè)度為2的節(jié)點(diǎn)、或重置標(biāo)識(shí)對(duì)于在矩陣中目的頂點(diǎn)表示具有不同度的節(jié)點(diǎn)。每個(gè)可用編輯路徑的成本必須由頂點(diǎn)之間各個(gè)指針的步驟來(lái)確定。圖15和16A、16B、16C表明了在編輯路徑中各步驟可能如何被計(jì)算成本。該矩陣的一列被一次性地載入到該管理計(jì)算機(jī)的存儲(chǔ)器中。在任何時(shí)間點(diǎn),在當(dāng)前列時(shí),先前列(如果存在)和舊數(shù)據(jù)(如果存在)中度為1的節(jié)點(diǎn)的最后列被包含在存儲(chǔ)器中。通過(guò)把節(jié)點(diǎn)成本的最小值移動(dòng)至圖中當(dāng)前節(jié)點(diǎn)的左邊,依次計(jì)算遍歷當(dāng)前列中每個(gè)節(jié)點(diǎn)的成本。通過(guò)該節(jié)點(diǎn)本身的成本加上從之前節(jié)點(diǎn)遍歷至當(dāng)前節(jié)點(diǎn)操作的成本來(lái)計(jì)算節(jié)點(diǎn)移動(dòng)至左邊的成本。插入成本(Cl)、刪除成本(CD)、以及更新成本(CU)的最小成本被用來(lái)確定該根以及當(dāng)前節(jié)點(diǎn)的成本。圖15中節(jié)點(diǎn)D的成本會(huì)被如下計(jì)算=CostD=min{CU,Cl,CD}其中CU=CostA+uCI=CostB+iCD=CostC+d在此考慮的特定案例中這是復(fù)雜的,原因是該數(shù)據(jù)的表結(jié)構(gòu)阻止允許插入或刪除在單個(gè)節(jié)點(diǎn)上操作。這意味著僅僅在行開(kāi)始的節(jié)點(diǎn)對(duì)于刪除和插入操作以及那些遍歷至之前行的起始點(diǎn)的操作是有效的。用于圖16A中更新成本的示例代碼將左手鄰居(當(dāng)前頂點(diǎn)斜左方的頂點(diǎn))的成本添加至在源樹(shù)中更新當(dāng)前節(jié)點(diǎn)的成本以匹配該目的樹(shù)。如果該源和目的節(jié)點(diǎn)的標(biāo)簽相等,那么該操作的成本是0。否則,如果之前操作也不是寫(xiě)操作,那么這個(gè)操作也引起移動(dòng)該指針至在源表中當(dāng)前位置的成本。該更新操作成本的剩余部分是基于為該目的節(jié)點(diǎn)的標(biāo)簽傳送數(shù)據(jù)的成本。LabelCost為該樹(shù)的特定節(jié)點(diǎn)計(jì)算要傳送標(biāo)簽的字節(jié)數(shù),舉例來(lái)說(shuō),對(duì)于“Animal”或“Colour”列來(lái)說(shuō),該標(biāo)簽的成本對(duì)于字符數(shù)來(lái)說(shuō)是1字節(jié),并且接著每字符1字節(jié),對(duì)于“#legs”列來(lái)說(shuō),該成本是1字節(jié)。用于插入成本的示例代碼添加左手鄰居(當(dāng)前頂點(diǎn)上方的頂點(diǎn))的成本至在當(dāng)前位置插入一行的成本。插入一行的成本依賴于是否任何之前的插入或刪除操作在該圖中已經(jīng)遇到了。如果沒(méi)有則拷貝該表和重命名該表的額外成本對(duì)于這個(gè)操作已發(fā)生。如果左手鄰居不是一個(gè)插入操作,則當(dāng)前操作也發(fā)生移動(dòng)該指針以及從該原始表拷貝一個(gè)或多個(gè)行數(shù)據(jù)至新表的成本。用于刪除成本的示例代碼將左手鄰居(與當(dāng)前頂點(diǎn)左方水平的頂點(diǎn))的成本添加至在當(dāng)前位置刪除一行的成本。刪除一行的成本依賴于是否任何之前的插入或刪除操作在該圖中已經(jīng)遇到了。如果沒(méi)有,則拷貝該表和重命名該表的額外成本對(duì)于該操作已發(fā)生。如果左手鄰居不是刪除操作,則當(dāng)前操作發(fā)生從該原始表拷貝一個(gè)或多個(gè)行數(shù)據(jù)至目的表的成本。如果該左手操作是刪除操作,對(duì)于刪除額外的連續(xù)行沒(méi)有額外的成本發(fā)生。下列常數(shù)已經(jīng)被用于這些示例,而例如位組裝和組裝開(kāi)銷的關(guān)注在成本計(jì)算中已經(jīng)被忽略了。常數(shù)cost_of_cursor_move8字節(jié)cost_of_copy_table4字節(jié)cost_of_rename_table4字節(jié)cost_of_copy_rows:10字節(jié)圖17A至17F示出了圖14的矩陣中在用于對(duì)編輯路徑計(jì)算成本的例程中的迭代,而圖18示出了該優(yōu)化的編輯路徑。在圖17A中,該原始節(jié)點(diǎn)的成本是0并且所有其它在列中的節(jié)點(diǎn)是不能到達(dá)的,以及因此發(fā)生了無(wú)限大的成本(這被用于從考慮中排除所有達(dá)到該圖中這些節(jié)點(diǎn)的路徑)。在圖17B中成本計(jì)算被如下執(zhí)行第0個(gè)節(jié)點(diǎn)不能被到達(dá)。成本無(wú)限大。第1個(gè)節(jié)點(diǎn)標(biāo)簽相等。成本為0。第2個(gè)節(jié)點(diǎn)至第4個(gè)節(jié)點(diǎn)不能被到達(dá)。成本無(wú)限大。第5個(gè)節(jié)點(diǎn)插入一行。這是該路徑上的第一個(gè)插入或刪除(返回至原始的最便宜路徑包括一個(gè)成本為0的“更新”操作。left.cost+cost_of_copy_table+cost_of_rename_table+cost_of_cursor_move+cost_of_copy_rows+LabelCost(horse)+LabelCost(4)+LabelCost(brown)==0+4+4+8+10+6+1+6==39第6個(gè)節(jié)點(diǎn)至第8個(gè)節(jié)點(diǎn)不能被到達(dá)。成本無(wú)限大。第9個(gè)節(jié)點(diǎn)插入一行。這不是第一個(gè)插入或刪除。之前的操作是一個(gè)插入操作。左成本為39。left.cost+LabelCost(mantis)+LabelCost(6)+LabelCost(green)==39+7+1+6==53由于到達(dá)了圖17A至17F中每次迭代的末端,僅僅那些在矩陣中是部分有效路徑的頂點(diǎn)被保持在存儲(chǔ)器中。因此在圖19的第四次迭代的末端,該程序在存儲(chǔ)器中保持第二、第三和第四列,但是釋放該第三列。由于還沒(méi)有遇到其它度為1的列,該第二個(gè)仍是需要的。由于之前列輸入至下個(gè)迭代,該第四列仍是需要的。第三列中那些不是任何有效有向圖一部分的頂點(diǎn)可在這個(gè)點(diǎn)上被釋放。在這種情況下,在圖17C的第六次迭代的末端,該程序到達(dá)第一行數(shù)據(jù)的末端。此處,可計(jì)算插入和刪除操作。圖19A示出了應(yīng)當(dāng)從圖14中示出的矩陣恢復(fù)的腳本。在恢復(fù)該腳本的過(guò)程中,所有表示同類操作的鄰近邊被連接以形成單個(gè)操作。在被用于構(gòu)建該矩陣的成本算法中,這個(gè)處理被識(shí)別。這個(gè)腳本接著被重寫(xiě)以生成僅僅包含改變?cè)摫黹L(zhǎng)度的操作(插入行或刪除行)的腳本。該產(chǎn)生的重寫(xiě)腳本在19B中示出。其將會(huì)形成與圖2相關(guān)所提及的該第一部分腳本。圖20A、20B示出了分別以行優(yōu)先和列優(yōu)先兩種形式應(yīng)用的具有來(lái)自圖19B的長(zhǎng)度腳本的舊樹(shù)。圖21示出了為確定與圖2相關(guān)所提及的該第二部分腳本,被轉(zhuǎn)換為列優(yōu)先的新樹(shù)。圖22A、22B示出了分別與在圖20A、20B行優(yōu)先和列優(yōu)先形式的中間樹(shù)相關(guān)的用于新樹(shù)的編輯距離矩陣。優(yōu)化編輯路徑只包含重新標(biāo)簽步驟,并且因此是對(duì)角線,這是由于該中間樹(shù)的長(zhǎng)度匹配于該新樹(shù)的長(zhǎng)度。被計(jì)算用于列優(yōu)先形式的路徑被看成具有最低成本。圖23示出了從圖22B生成的編輯腳本,其應(yīng)當(dāng)形成該第二部分編輯腳本以與來(lái)自圖19B的腳本合并。在這種情況下,舊和新數(shù)據(jù)表相對(duì)來(lái)說(shuō)很小,并且在圖22A、22B中示出的編輯路徑成本大約相等。每個(gè)都可能被選擇具有最低成本的腳本。實(shí)際上,這些數(shù)據(jù)表可以包含成千個(gè)行或列,并且由它們各自樹(shù)的行優(yōu)先和列優(yōu)先形式創(chuàng)建的差異可能會(huì)更明Mo圖M示出了根據(jù)圖19B和圖23中的腳本生成的合并腳本。這個(gè)腳本可被用來(lái)將舊表轉(zhuǎn)換成新表。權(quán)利要求1.一種創(chuàng)建編輯腳本用于轉(zhuǎn)換舊數(shù)據(jù)表成新數(shù)據(jù)表的方法,包括根據(jù)舊表和新表分別創(chuàng)建舊數(shù)據(jù)樹(shù)和新數(shù)據(jù)樹(shù);確定第一部分腳本,該第一部分腳本將舊樹(shù)轉(zhuǎn)換成與新樹(shù)具有相同長(zhǎng)度的中間樹(shù);確定第二部分腳本,該第二部分腳本將中間樹(shù)轉(zhuǎn)換成新樹(shù),以及合并該第一和第二部分腳本。2.根據(jù)權(quán)利要求1的方法,其中該第一部分腳本被確定為僅僅在舊數(shù)據(jù)樹(shù)中引起插入和刪除的最小成本的一系列編輯。3.根據(jù)權(quán)利要求2的方法,其中該第一部分腳本僅僅在該舊數(shù)據(jù)樹(shù)中插入或刪除完全子樹(shù)。4.根據(jù)權(quán)利要求1的方法,其中該第二部分腳本被確定為僅僅在中間樹(shù)中引起替換的最小成本的一系列編輯。5.根據(jù)權(quán)利要求1的方法,其中使用編輯距離矩陣確定該第一部分腳本,該編輯距離矩陣具有行優(yōu)先形式的舊樹(shù)和中間樹(shù)。6.根據(jù)權(quán)利要求1的方法,其中使用編輯距離矩陣確定該第二部分腳本,該編輯距離矩陣具有行優(yōu)先形式的中間樹(shù)和新樹(shù)。7.根據(jù)權(quán)利要求1的方法,其中使用編輯距離矩陣確定該第二部分腳本,該編輯距離矩陣具有列優(yōu)先形式的中間樹(shù)和新樹(shù)。8.根據(jù)權(quán)利要求1的方法還包括確定第二腳本,該第二腳本使用行優(yōu)先形式轉(zhuǎn)換中間樹(shù)成新樹(shù);確定第二腳本,該第二腳本使用列優(yōu)先形式轉(zhuǎn)換中間樹(shù)成新樹(shù);以及基于成本從第二腳本中選擇第二部分腳本。9.根據(jù)權(quán)利要求1的方法,其中這些數(shù)據(jù)樹(shù)是由來(lái)自各個(gè)表中的數(shù)據(jù)形成的有根、有序、標(biāo)記了的樹(shù)。10.根據(jù)權(quán)利要求9的方法,其中數(shù)據(jù)樹(shù)僅僅包含度為0、1、2的節(jié)點(diǎn),并且僅僅度為2的節(jié)點(diǎn)包含來(lái)自該各個(gè)表的數(shù)據(jù)。11.一種用于更新移動(dòng)通信終端中的數(shù)據(jù)的方法,包括確定存在于設(shè)備中的舊數(shù)據(jù)表;確定在該設(shè)備中所需的新數(shù)據(jù)表;確定轉(zhuǎn)換舊數(shù)據(jù)表成新數(shù)據(jù)表的編輯腳本;傳送該編輯腳本至該設(shè)備;以及驅(qū)使該設(shè)備執(zhí)行該編輯腳本,其中,使用如上所述的方法確定該編輯腳本。全文摘要一種創(chuàng)建用于轉(zhuǎn)換數(shù)據(jù)表的編輯腳本,本發(fā)明有助于在通信終端中轉(zhuǎn)換舊數(shù)據(jù)表成新數(shù)據(jù)表。通過(guò)根據(jù)該舊表和新表分別創(chuàng)建舊的和新的數(shù)據(jù)樹(shù),以創(chuàng)建編輯腳本。然后確定第一部分腳本,該第一部分腳本將該舊樹(shù)轉(zhuǎn)換成一個(gè)與該新樹(shù)具有相同長(zhǎng)度的中間樹(shù)。還確定第二部分腳本,該第二部分腳本將該中間樹(shù)轉(zhuǎn)換成新樹(shù)。然后合并該第一和第二部分腳本,以提供能夠被發(fā)送至該終端的腳本。優(yōu)選地,該第一部分腳本是僅僅在舊數(shù)據(jù)樹(shù)中引起插入和刪除的最小成本的一系列編輯。優(yōu)選地,該第二部分腳本是僅僅在中間樹(shù)中引起替換的最小成本的一系列編輯。文檔編號(hào)G06F17/30GK102236703SQ201110141630公開(kāi)日2011年11月9日申請(qǐng)日期2011年4月8日優(yōu)先權(quán)日2010年4月9日發(fā)明者H·A·史密斯申請(qǐng)人:太特電子有限公司