1
我有一組有序的不相交分段甲結構來表示的有序集合不相交的段
S = {[a1 b1] [a2 b2] ... [an bn]}
b1 + 1 < a2, b2 + 1 < a3
用等所有數字都是整數。
我正在尋找一個數據結構來表示該操作的集合insert
。我知道插入段與S
的段之間沒有交集,但是如果b + 1 = ak
或bk + 1 = a
對於某些k
可能需要合併。
我有一組有序的不相交分段甲結構來表示的有序集合不相交的段
S = {[a1 b1] [a2 b2] ... [an bn]}
b1 + 1 < a2, b2 + 1 < a3
用等所有數字都是整數。
我正在尋找一個數據結構來表示該操作的集合insert
。我知道插入段與S
的段之間沒有交集,但是如果b + 1 = ak
或bk + 1 = a
對於某些k
可能需要合併。
如何處理每個節點上的值是一對整數的鏈接列表。 我們需要稍微修改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;
}
}
爲了簡單起見,我忽略了一些角落案例,但您明白了。 – maditya
此外,在你的問題,目前所述,不清楚是否在一個段內 maditya
謝謝你的想法,是的,ai <= bi在每個細分市場。角落案件的數量真的讓我尋找現有的解決方案。我目前使用以下邏輯對其進行了排序。將一個片段插入到該組中。檢查它是否需要與鄰居合併,並將其全部移除。最後,將合併的片段添加到該集合中。 – uranix