Rope 高效字串處理資料結構

2021-08-15 08:28:11 字數 1305 閱讀 9750

乙個rope 資料結構用來高效的處理字串的拼接、查詢、刪除、及隨機訪問。rope的乙個典型應用場景是:在乙個文字編輯程式裡,用來儲存較長的文字字串。如下圖,字串「hello_my_name_is_simon」的表示

從上圖可以看出,乙個rope 是乙個二叉查詢樹,葉節點包含了的是字串的子串。非頁節點包含的是權重 = 左子樹葉節點的所有字元和。乙個字串被分隔為兩個部分,左子樹包含了字串的左邊部分。右子樹包含了字串的右邊部分。

index(i)

返回i位置的字元。時間複雜度o(logn)。我們通過遞迴的形式實現搜尋。

偽**實現:

function

index

(ropenode node, integer i)

ifnode.weight

<= i

then

return

index

(node.right, i - node.weight)

endif

exists

(node.left)

then

return

index

(node.left, i)

endreturn

node.string[i]

end

例如:我們要搜尋i = 10位置的字元。我們可以通過以下的方式進行搜尋。

兩個rope的鏈結操作是非常簡單的,建立乙個root節點,root.left = s1, root.right = s2。然後進行root節點weight的更新,時間大概是o(long)在平衡樹的情況下。大部分實現中在concat後需要對樹重新進行平衡。

字串分隔。分隔字串s在i位置 為兩個字串s1和s2。s1= c1,,,,ci。s2 = ci+1,,,,cm。時間複雜度為o(logn)。

例如下面:分隔字串在中間。

在字串分隔後,樹需要重新進行平衡。

資料結構 c 字串的處理

1.字串的逆轉 using system class output string arry new string arrychar console.write arry console.readkey 2.輸入一字串要求輸出後只有數字和字母,其它的空格特殊字元都不要 using system cla...

資料結構 字串

1 字串 include string.h include stdio.h include stdlib.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define ma...

資料結構 字串

字串是由0個或多個字元構成的序列,可記為s a1a2a3 an 其中ai可以是字母,也可是數字或者其他字元,零個字元的串稱為空串。而字串的順序結構就是用簡單的char型別陣列來儲存沒什麼好說的,下面介紹一下bf演算法與kmp演算法 bf演算法就是比較平常的雙重迴圈,如果匹配成功打斷迴圈,否則子串的比...