本發(fā)明涉及計算機,尤其涉及一種區(qū)間數(shù)據(jù)的合并方法和裝置。
背景技術:
1、區(qū)間合并是一種常見的處理重疊區(qū)間的有效手段,通常使用在時間區(qū)間合并的場景中:例如打卡時間計算、營業(yè)時間計算、視頻觀看進度計算等。針對這種場景,一般采用的解決辦法是將用戶所產(chǎn)生的區(qū)間數(shù)據(jù)保存到數(shù)據(jù)庫中,計算時間總長度時,會將之前保存的數(shù)據(jù)全量查詢出來,然后遍歷,逐個判斷能否進行區(qū)間合并以將能合并的區(qū)間內的數(shù)據(jù)進行合并。
2、在實現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術中至少存在如下問題:
3、需要保存用戶所有的時間區(qū)間數(shù)據(jù),消耗大量的數(shù)據(jù)存儲資源;計算時間總長度時,需要查詢全量數(shù)據(jù),查詢效率低,計算次數(shù)較多、計算時間較長。
技術實現(xiàn)思路
1、有鑒于此,本發(fā)明實施例提供一種區(qū)間數(shù)據(jù)的合并方法和裝置,能夠減少數(shù)據(jù)存儲的壓力,節(jié)省數(shù)據(jù)存儲資源。由于基于有序集合對區(qū)間數(shù)據(jù)進行了排序,故而在計算時間總長度時,無需查詢全量數(shù)據(jù),可以快速判斷是否可以進行區(qū)間數(shù)據(jù)合并,從而減少了計算次數(shù)和計算時間,提高了數(shù)據(jù)查詢效率和數(shù)據(jù)計算效率。
2、為實現(xiàn)上述目的,根據(jù)本發(fā)明實施例的一個方面,提供了一種區(qū)間數(shù)據(jù)的合并方法,包括:根據(jù)輸入?yún)?shù)生成區(qū)間數(shù)據(jù)對應的鍵名和鍵值,并根據(jù)所述鍵值計算所述區(qū)間數(shù)據(jù)的權重值;根據(jù)所述鍵名和所述權重值將所述區(qū)間數(shù)據(jù)添加到有序集合中,并獲取所述區(qū)間數(shù)據(jù)在所述有序集合中的索引位置;將所述區(qū)間數(shù)據(jù)與所述有序集合中位于所述索引位置之前的區(qū)間數(shù)據(jù)進行遞歸合并得到合并區(qū)間數(shù)據(jù);將所述合并區(qū)間數(shù)據(jù)與所述有序集合中位于所述索引位置之后的區(qū)間數(shù)據(jù)進行遞歸合并,得到所述有序集合中區(qū)間數(shù)據(jù)的合并結果。
3、可選地,將所述區(qū)間數(shù)據(jù)與所述有序集合中位于所述索引位置之前的區(qū)間數(shù)據(jù)進行遞歸合并得到合并區(qū)間數(shù)據(jù),包括:根據(jù)所述區(qū)間數(shù)據(jù)的索引位置,從所述有序集合中獲取所述區(qū)間數(shù)據(jù)的索引位置的前一個索引位置對應的區(qū)間數(shù)據(jù)作為第一待合并區(qū)間數(shù)據(jù);在所述區(qū)間數(shù)據(jù)和所述第一待合并區(qū)間數(shù)據(jù)可以進行合并的情況下,將所述區(qū)間數(shù)據(jù)和所述第一待合并區(qū)間數(shù)據(jù)進行合并得到第一合并結果,將所述第一合并結果添加到所述有序集合中,并從所述有序集合中刪除所述區(qū)間數(shù)據(jù)和所述第一待合并區(qū)間數(shù)據(jù);將所述第一合并結果作為所述區(qū)間數(shù)據(jù),將所述第一合并結果在所述有序集合中的索引位置作為所述區(qū)間數(shù)據(jù)的索引位置,重復執(zhí)行上述操作,直至所述區(qū)間數(shù)據(jù)和所述第一待合并區(qū)間數(shù)據(jù)無法進行合并;將所述區(qū)間數(shù)據(jù)和所述第一待合并區(qū)間數(shù)據(jù)無法進行合并時的區(qū)間數(shù)據(jù)作為所述合并區(qū)間數(shù)據(jù)。
4、可選地,將所述合并區(qū)間數(shù)據(jù)與所述有序集合中位于所述索引位置之后的區(qū)間數(shù)據(jù)進行遞歸合并,得到所述有序集合中區(qū)間數(shù)據(jù)的合并結果,包括:根據(jù)所述合并區(qū)間數(shù)據(jù)的索引位置,從所述有序集合中獲取所述合并區(qū)間數(shù)據(jù)的索引位置的后一個索引位置對應的區(qū)間數(shù)據(jù)作為第二待合并區(qū)間數(shù)據(jù);在所述合并區(qū)間數(shù)據(jù)和所述第二待合并區(qū)間數(shù)據(jù)可以進行合并的情況下,將所述合并區(qū)間數(shù)據(jù)和所述第二待合并區(qū)間數(shù)據(jù)進行合并得到第二合并結果,將所述第二合并結果添加到所述有序集合中,并從所述有序集合中刪除所述合并區(qū)間數(shù)據(jù)和所述第二待合并區(qū)間數(shù)據(jù);將所述第二合并結果作為所述合并區(qū)間數(shù)據(jù),將所述第二合并結果在所述有序集合中的索引位置作為所述合并區(qū)間數(shù)據(jù)的索引位置,重復執(zhí)行上述操作,直至所述合并區(qū)間數(shù)據(jù)和所述第二待合并區(qū)間數(shù)據(jù)無法進行合并;將所述合并區(qū)間數(shù)據(jù)和所述第二待合并區(qū)間數(shù)據(jù)無法進行合并時得到的有序集合,作為所述有序集合中區(qū)間數(shù)據(jù)的合并結果。
5、可選地,通過以下算法進行兩個區(qū)間數(shù)據(jù)的合并:創(chuàng)建合并結果數(shù)組用于保存待合并的兩個區(qū)間數(shù)據(jù)的合并結果;分別獲取所述兩個區(qū)間數(shù)據(jù)的左端點值和右端點值;將所述兩個區(qū)間數(shù)據(jù)中左端點值較小的區(qū)間數(shù)據(jù)作為第一區(qū)間數(shù)據(jù),左端點值較大的區(qū)間數(shù)據(jù)作為第二區(qū)間數(shù)據(jù);將所述第一區(qū)間數(shù)據(jù)添加到所述合并結果數(shù)組中;在所述第二區(qū)間數(shù)據(jù)的左端點值大于所述第一區(qū)間數(shù)據(jù)的右端點值的情況下,將所述第二區(qū)間數(shù)據(jù)添加到所述合并結果數(shù)組的末尾,得到所述兩個區(qū)間數(shù)據(jù)的合并結果;在所述第二區(qū)間數(shù)據(jù)的左端點值不大于所述第一區(qū)間數(shù)據(jù)的右端點值的情況下,若所述第二區(qū)間數(shù)據(jù)的右端點值大于所述第一區(qū)間數(shù)據(jù)的右端點值,則將所述合并結果數(shù)組中所述第一區(qū)間數(shù)據(jù)的右端點值修改為所述第二區(qū)間數(shù)據(jù)的右端點值,得到所述兩個區(qū)間數(shù)據(jù)的合并結果;否則,不對所述合并結果數(shù)組中所述第一區(qū)間數(shù)據(jù)的右端點值修改,直接得到所述兩個區(qū)間數(shù)據(jù)的合并結果。
6、可選地,在得到所述兩個區(qū)間數(shù)據(jù)的合并結果之后,還包括:在所述合并結果數(shù)組中包括所述兩個區(qū)間數(shù)據(jù),或者所述合并結果數(shù)組的長度為2的情況下,判定所述兩個區(qū)間數(shù)據(jù)無法進行合并。
7、可選地,所述輸入?yún)?shù)包括所述區(qū)間數(shù)據(jù)對應的資源標識、用戶信息、開始時間和結束時間;根據(jù)輸入?yún)?shù)生成區(qū)間數(shù)據(jù)對應的鍵名和鍵值,包括:根據(jù)所述區(qū)間數(shù)據(jù)對應的資源標識和用戶信息生成所述區(qū)間數(shù)據(jù)對應的鍵名;根據(jù)所述區(qū)間數(shù)據(jù)對應的開始時間和結束時間生成所述區(qū)間數(shù)據(jù)對應的鍵值。
8、可選地,根據(jù)所述鍵值計算所述區(qū)間數(shù)據(jù)的權重值,包括:根據(jù)所述鍵值對應的時間區(qū)間的左右端點值計算所述區(qū)間數(shù)據(jù)的權重值。
9、可選地,根據(jù)所述鍵名和所述權重值將所述區(qū)間數(shù)據(jù)添加到有序集合中,包括:根據(jù)所述鍵名獲取對應的目標有序集合;根據(jù)所述權重值將所述區(qū)間數(shù)據(jù)添加到所述目標有序集合中,其中,所述目標有序集合中的區(qū)間數(shù)據(jù)是按照權重值由小到大的順序進行排列的。
10、根據(jù)本發(fā)明實施例的另一方面,提供了一種區(qū)間數(shù)據(jù)的合并裝置,包括:數(shù)據(jù)權重計算模塊,用于根據(jù)輸入?yún)?shù)生成區(qū)間數(shù)據(jù)對應的鍵名和鍵值,并根據(jù)所述鍵值計算所述區(qū)間數(shù)據(jù)的權重值;索引位置獲取模塊,用于根據(jù)所述鍵名和所述權重值將所述區(qū)間數(shù)據(jù)添加到有序集合中,并獲取所述區(qū)間數(shù)據(jù)在所述有序集合中的索引位置;第一遞歸合并模塊,用于將所述區(qū)間數(shù)據(jù)與所述有序集合中位于所述索引位置之前的區(qū)間數(shù)據(jù)進行遞歸合并得到合并區(qū)間數(shù)據(jù);第二遞歸合并模塊,用于將所述合并區(qū)間數(shù)據(jù)與所述有序集合中位于所述索引位置之后的區(qū)間數(shù)據(jù)進行遞歸合并,得到所述有序集合中區(qū)間數(shù)據(jù)的合并結果。
11、根據(jù)本發(fā)明實施例的又一方面,提供了一種電子設備,包括:一個或多個處理器;存儲裝置,用于存儲一個或多個程序,當所述一個或多個程序被所述一個或多個處理器執(zhí)行,使得所述一個或多個處理器實現(xiàn)本發(fā)明實施例所提供的區(qū)間數(shù)據(jù)的合并方法。
12、根據(jù)本發(fā)明實施例的再一方面,提供了一種計算機可讀介質,其上存儲有計算機程序,所述程序被處理器執(zhí)行時實現(xiàn)本發(fā)明實施例所提供的區(qū)間數(shù)據(jù)的合并方法。
13、上述發(fā)明中的一個實施例具有如下優(yōu)點或有益效果:通過根據(jù)輸入?yún)?shù)生成區(qū)間數(shù)據(jù)對應的鍵名和鍵值,并根據(jù)鍵值計算區(qū)間數(shù)據(jù)的權重值;根據(jù)鍵名和權重值將區(qū)間數(shù)據(jù)添加到有序集合中,并獲取區(qū)間數(shù)據(jù)在有序集合中的索引位置;將區(qū)間數(shù)據(jù)與有序集合中位于索引位置之前的區(qū)間數(shù)據(jù)進行遞歸合并得到合并區(qū)間數(shù)據(jù);將合并區(qū)間數(shù)據(jù)與有序集合中位于索引位置之后的區(qū)間數(shù)據(jù)進行遞歸合并,得到有序集合中區(qū)間數(shù)據(jù)的合并結果的技術方案,有序集合中存儲的為不可合并的區(qū)間數(shù)據(jù),故而可以減少數(shù)據(jù)存儲的壓力,節(jié)省數(shù)據(jù)存儲資源。由于基于有序集合對區(qū)間數(shù)據(jù)進行了排序,故而在計算時間總長度時,無需查詢全量數(shù)據(jù),可以快速判斷是否可以進行區(qū)間數(shù)據(jù)合并,從而減少了計算次數(shù)和計算時間,提高了數(shù)據(jù)查詢效率和數(shù)據(jù)計算效率。
14、上述的非慣用的可選方式所具有的進一步效果將在下文中結合具體實施方式加以說明。