System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本申請屬于計算機數據結構與算法領域,具體涉及一種區間數據集合中查找與給定區間數據相交的區間的方法及裝置。
技術介紹
1、區間數據可以很方便地表示占用一段連續時間片段的事件。我們通常將相關的多個區間數據放在一起進行管理,成為區間數據集合。在很多場景中,我們需要查詢在給定時間段內發生了哪些事件,或者判斷是否存在區間相交的事件的情況,下面是一些與區間數據集合相關的常見的應用場景:
2、日程安排管理:在日程管理系統中,可以使用區間來表示用戶的日程安排。每個日程可以表示為一個時間區間,如何快速查詢某個時間點是否與已有的日程發生重疊,以避免時間沖突。
3、碰撞檢測:在計算機圖形學和游戲開發中,碰撞檢測是一個重要的問題。將物體的邊界框(boundingbox)表示為區間,如何高效地找出與某個物體相交的所有其他物體,從而進行碰撞檢測。
4、時間沖突檢測:在會議管理系統或者航班調度系統中,每個會議或航班可以表示為一個時間區間,如何檢測是否存在時間上的重疊,以避免會議或航班的沖突。當貨船在海上行駛時,需要提前向目的港口申請進港卸貨時間,港口同時會有多艘貨船進行卸貨,為貨船安排未來某段時間在某個卸貨口進行卸貨需要梳理未來一段時間的港口卸貨時間安排,如何能快捷準確的判斷貨船申請的時間段是否能夠安排合適的卸貨口是港口進行工作調度的關鍵難點,也是一個復雜的技術問題。
5、路徑規劃(機器人技術):在機器人技術中,路徑規劃是一個關鍵的問題。在路徑規劃中,將障礙物的邊界表示為區間,如何確定機器人的路徑與障礙物之間的
6、動畫碰撞檢測(計算機圖形學):在計算機圖形學中,動畫碰撞檢測是用于模擬和控制動畫對象之間的碰撞情況。在動畫碰撞檢測中,將動畫對象的邊界表示為區間,如何確定哪些動畫對象之間存在碰撞,從而實現更加逼真的動畫效果。
7、任務調度:在任務調度系統中,可以使用區間來表示任務的執行時間段,如何判斷任務之間是否會發生重疊或者沖突。
8、以上應用場景均是與區間相交查詢有關的問題。在現有技術中,通常利用一定的數據結構來存儲區間數據集合,使用計算機程序對數據結構進行處理,以實現快速的查詢事件、判斷重疊事件等。
9、現有的區間數據集合的維護方法主要有:
10、使用線段樹:線段樹是一種二叉樹數據結構,可以有效地支持區間數據查詢操作,比如查詢某個區間的最大值、最小值等。但是線段樹通常用于靜態區間數據的維護,對于經常需要變化的數據的維護時操作復雜、效率較低。
11、使用平衡樹:平衡樹(如紅黑樹、avl樹等)也可以用于區間數據集合的維護。通過在樹節點中存儲區間數據,可以實現區間數據的插入、刪除和查詢等操作。但是平衡樹通常實現復雜,維護成本高。
技術實現思路
1、本申請的目的在于克服現有區間數據集合維護方法實現復雜、效率低、維護成本高的缺陷。
2、為了實現上述目的,本申請提出了一種區間數據集合的維護方法,基于區間鏈表實現;
3、所述區間鏈表為基于跳躍表的數據結構;
4、所述方法包括:
5、利用所述區間鏈表的數據節點存儲區間數據;
6、所述區間數據包括低端點、高端點;所述低端點為該區間數據的左端點;所述高端點為該區間數據的右端點;數據節點按區間的低端點排序,如果低端點相同,則按高端點排序。
7、所述區間鏈表的索引節點中包含:指向數據節點的指針、指向下一層索引節點的指針、指向同一層右側索引節點的指針,以及max屬性;
8、所述max屬性,為該索引節點與左側索引節點之間的所有區間數據中高端點的最大值;所述所有區間數據不包含左側索引節點的數據節點,包含當前索引節點的數據節點。
9、本申請還提供一種區間數據集合插入數據的方法,基于上述的區間數據集合的維護方法實現,包括:
10、步驟a1:從頭索引節點開始沿著索引鏈表遍歷,找到底層數據鏈表中新節點的插入位置并插入數據節點,維護相關索引節點的max屬性;
11、步驟a2:根據隨機概率條件為新插入的數據節點創建索引節點,設置新索引節點的max屬性。
12、作為上述方法的一種改進,所述維護相關索引節點的max屬性,包括:
13、在每一層索引鏈表中,對于首個不小于新插入區間數據的索引節點a,如果新插入區間數據的高端點大于索引節點a的max屬性,則更新a的max屬性為新插入區間數據的高端點,否則不進行更新。
14、作為上述方法的一種改進,所述設置新索引節點的max屬性包括:
15、第一種情況:當新插入的索引節點沒有導致索引層級增加時,新索引節點的max屬性為從左索引節點到新索引節點之間的區間數據中高端點的最大值;其中,所述從左索引節點到新索引節點之間的區間數據,不包括左索引節點的區間數據,包括新索引節點的區間數據;
16、如果新索引節點的max屬性不小于右索引節點的max屬性,右索引節點的max屬性更新為從新索引節點到右索引節點之間的區間數據中高端點的最大值;其中,所述從新索引節點到右索引節點之間的區間數據,不包括新索引節點的區間數據,包括右索引節點的區間數據;
17、第二種情況:當新插入的索引節點導致索引層級增加時,新的索引層級中,新索引節點的max屬性為在底層數據鏈表中的從第一個區間數據到新插入區間數據的所有區間數據中高端點的最大值。其他層級的max屬性更新策略與第一種情況相同。
18、本申請還提供一種區間數據集合刪除數據的方法,基于上述的區間數據集合插入數據的方法實現,包括:
19、步驟b1:從區間鏈表中刪除節點;從頭索引節點開始沿著索引鏈表進行遍歷,在底層數據鏈表中找到要刪除的區間數據并進行刪除,更新遍歷過程中遇到的每個不小于被刪除區間數據的索引節點的max屬性;
20、步驟b2:更新索引列表;如果被刪除節點有索引節點,在每一層級中,如果被刪除的索引節點的max屬性不小于其右索引節點的max屬性,則重新計算右索引節點的max屬性。
21、作為上述方法的一種改進,所述更新遇到的每個不小于被刪除區間數據的索引節點的max屬性,包括:
22、如果被刪除的區間數據的高端點的值等于該索引節點的max屬性值,則重新計算該索引節點的max屬性值。
23、本申請還提供一種區間數據集合中查找與給定區間數據相交的區間的方法,基于上述區間數據集合刪除數據的方法實現,包括:
24、通過獲取可能包含給定區間數據的數據鏈表的范圍方法,得到區間數據鏈表中可能包含給定區間數據x的范圍,該范圍的左側數據節點為b,右側數據節點為e;
25、取左側數據節點b的右數據節點b.next為當前數據節點n,如果n為空則返回空,否則判斷x與n的區間數據是否相交,如果相交,則返回n的區間數據n.value,否則將n的右側數據節點n.next作為新的本文檔來自技高網...
【技術保護點】
1.一種區間數據集合的維護方法,基于區間鏈表實現;
2.一種區間數據集合插入數據的方法,基于權利要求1所述的區間數據集合的維護方法實現,包括:
3.根據權利要求2所述的區間數據集合插入數據的方法,其特征在于,所述維護相關索引節點的max屬性,包括:
4.根據權利要求2所述的區間數據集合插入數據的方法,其特征在于,所述設置新索引節點的max屬性包括:
5.一種區間數據集合刪除數據的方法,基于權利要求2所述的區間數據集合插入數據的方法實現,包括:
6.根據權利要求5所述的區間數據集合刪除數據的方法,其特征在于,所述更新遇到的每個不小于被刪除區間數據的索引節點的max屬性,包括:
7.一種區間數據集合中查找與給定區間數據相交的區間的方法,基于權利要求5所述的區間數據集合刪除數據的方法實現,其特征在于,包括:
8.根據權利要求7所述的區間數據集合中查找與給定區間數據相交的區間的方法,其特征在于,所述判斷x與n的區間數據是否相交,包括:
9.根據權利要求7所述的區間數據集合中查找與給定區間數據相
10.一種區間數據集合中查找與給定區間數據相交的區間的裝置,基于權利要求7-9任一所述區間數據集合中查找與給定區間數據相交的區間的方法實現,其特征在于,所述裝置包括:
...【技術特征摘要】
1.一種區間數據集合的維護方法,基于區間鏈表實現;
2.一種區間數據集合插入數據的方法,基于權利要求1所述的區間數據集合的維護方法實現,包括:
3.根據權利要求2所述的區間數據集合插入數據的方法,其特征在于,所述維護相關索引節點的max屬性,包括:
4.根據權利要求2所述的區間數據集合插入數據的方法,其特征在于,所述設置新索引節點的max屬性包括:
5.一種區間數據集合刪除數據的方法,基于權利要求2所述的區間數據集合插入數據的方法實現,包括:
6.根據權利要求5所述的區間數據集合刪除數據的方法,其特征在于,所述更新遇到的每個不小于被刪除區間數據的索引節點的max屬...
【專利技術屬性】
技術研發人員:楊艷林,栗垚,何彥君,劉魯京,陳浩然,王佳,張妍,李汶曉,張秀婷,
申請(專利權)人:國家電投集團數字科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。