替罪羊樹 簡單粗暴的資料結構

2022-10-09 00:27:15 字數 805 閱讀 6778

替罪羊樹——簡單粗暴的資料結構

正題如果在一棵平衡的二叉搜尋樹內進行查詢等操作,時間就可以穩定在log(n),但是每一次的插入節點和刪除節點,都可能會使得這棵樹不平衡,最壞情況就是退化成一條鏈,顯然我們不想要這種樹,於是各種維護的方法出現了,大部分的平衡樹都是通過旋轉來維護平衡的,但替罪羊樹就很厲害了,一旦發現不平衡的子樹,立馬拍扁重建,這就是替罪羊樹的核心:暴力重建

lc,rc分別表示i的左右子樹

對以p為根的子樹重構當且僅當

siz[lc]>siz[p]*alpha

或者siz[rc]>siz[p]*alpha

alpha(∈[0.5,1])alpha(∈[0.5,1])是自己設定的乙個引數,規定了這棵樹的平衡程度

當alpha==0.5alpha==0.5時,幾乎每次都要重構,樹為平衡樹,但是重構次數太多

當alpha==1.0alpha==1.0時,不會重構,此時是普通的二叉搜尋樹,有可能卡成鏈

重構方法:先對以p為根的子樹dfs(中序遍歷),將序號存在乙個陣列裡。因為是中序遍歷,因此陣列內點的值是有序的,可以直接build

重構操作

首先將要重構的子樹拍平(遍歷一次得到乙個陣列),然後利用這個陣列進行重構。每次的節點為這個區間的中點,然後遞迴呼叫去把[l, mid - 1]重構左子樹,[mid + 1, r]重構有子樹。記得在每層函式返回之前進行子樹大小的維護。

首先中序遍歷得到乙個有序的陣列(由於我比較懶,所以用的vector,建議儲存節點的位址或下標,不要只儲存資料)

找到mid,然後遞迴生成它的左子樹和右子樹:

為了體現當l > r時,直接return null

悲催的CISO 資料洩露事故的替罪羊

ciso有時候需要經過一番努力才能獲得與其他高管同等的地位,但其實有些辦法可讓他們獲得更多的尊重。根據threattracksecurity在2014年7月進行的一項調查報告稱,在受訪的203名美國c級高管中,74 認為ciso 不值得在董事會擁有一席之地,不應該成為企業領導團隊的一部分 這突出了這...

bzoj 3600 沒有人的算術 替罪羊樹

為什麼我沒有copy題面呢?看到題面你就懂了.hh 題意 定義乙個二元組 二元組的兩個元素可以是二元組 如 x,y 其中x可以是 a,b,c 之類的 定義二元組的比較方式 先比較左邊,左邊相同再比較右邊。遞迴比較可以用隨便哪顆平衡樹維護,70分 考慮對於每個 二元組,對他定義乙個實數的對映來表示它的...

簡單的資料結構

題目描述 慄醬有一天在網上衝浪的時候發現了一道很有意思的資料結構題。該資料結構形如長條形。一開始該容器為空,有以下七種操作。1 a從前面插入元素a 2 從前面刪除乙個元素 3 a從後面插入乙個元素 4 從後面刪除乙個元素 5 將整個容器頭尾翻轉 6 輸出個數和所有元素 7 對所有元素進行從小到大排序...