2015-09-19 56 views
1

我有一組有序的不相交分段甲結構來表示的有序集合不相交的段

S = {[a1 b1] [a2 b2] ... [an bn]} 

b1 + 1 < a2, b2 + 1 < a3用等所有數字都是整數。

我正在尋找一個數據結構來表示該操作的集合insert。我知道插入段與S的段之間沒有交集,但是如果b + 1 = akbk + 1 = a對於某些k可能需要合併。

回答

1

如何處理每個節點上的值是一對整數的鏈接列表。 我們需要稍微修改insert操作,我們將其稱爲insertAndMerge

def insertAndMerge(segment, head) { 
    curr = head; 
    // find element to insert after 
    while (segment.a < curr.b) { 
     curr = curr.next; 
    } 

    // if bk + 1 = a case occurs, merge with existing element, otherwise insert the new one 
    if (curr.b + 1 = segment.a) { 
     curr.b = segment.b; 
    } else { 
     segment.next = curr.next; 
     curr.next = segment; 
     curr = curr.next; 
    } 

    // the insertion or merge above could trigger the b + 1 = ak case, necessitating a merge with the element after it 
    if (curr.b + 1 = curr.next.a) { 
     toRemove = curr.next; 
     curr.next = toRemove.next; 
     curr.b = toRemove.b; 
     delete toRemove; 
    } 
} 
+0

爲了簡單起見,我忽略了一些角落案例,但您明白了。 – maditya

+0

此外,在你的問題,目前所述,不清楚是否在一個段內 maditya

+0

謝謝你的想法,是的,ai <= bi在每個細分市場。角落案件的數量真的讓我尋找現有的解決方案。我目前使用以下邏輯對其進行了排序。將一個片段插入到該組中。檢查它是否需要與鄰居合併,並將其全部移除。最後,將合併的片段添加到該集合中。 – uranix

相關問題