資料結構 線段樹

2021-09-25 12:20:28 字數 968 閱讀 7501

一、目標:1.如何快速的查詢出下列陣列arr[2,5]的和  2。以及更新arr[4]為6。

用普通的方法查詢的複雜度為o(n),更新的複雜度為o(1)。

這時候我們可以用線段樹來快速完成這些操作,複雜度為logn。

二、內容:如何建立,查詢,更新線段樹

public class qurqpd ;

int tree=new int[10000];

build_tree(arr,tree,0,0,5);

system.out.println(qury_tree(arr, tree, 0, 0, 5, 4, 4));

update_tree(arr, tree, 0, 0, 5, 4, 6);

system.out.println(qury_tree(arr, tree, 0, 0, 5, 4, 4)); }

/* * 建立線段樹

*/static void build_tree(int arr,int tree,int node,int start,int end)

else }/*

* 查詢陣列下標[l,r]陣列的和。

*/static int qury_tree(int arr,int tree,int node,int start,int end,int l,int r)

else if(start==end)

else if(start>=l&&end<=r)

else }/*

* 更新下標為num的值為val

*/static void update_tree(int arr,int tree,int node,int start,int end,int num,int val)

else

}}

資料結構 線段樹

啦啦啦啦啦啦線段樹是個好東西 好吧並沒有什麼好的 但貌似還是很好啊 線段樹就是一棵樹!顧名思義 又是這個詞 就是求關於一段的某些什麼什麼東西。比如區間最大值啊什麼的。引用百科知識 線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。對於線段樹中...

資料結構 線段樹

線段樹是一顆平衡的二叉搜尋樹,他以空間換區時間,讓線性查詢加速log級別的查詢,用到的演算法主要是二分搜尋和遞迴。例如 有陣列data 我有乙個需求,我需要頻繁的查詢區間i j的sum和。這裡先給出兩個解決方案 如果使用最普通的演算法遍歷,那麼查詢和更新的複雜度為o n 當然你還可以使用動態規劃,定...

資料結構 線段樹

摘自 演算法競賽高階指南 線段樹是一種基於分治思想的二叉樹結構,用於在區間上進行資訊統計。線段樹的基本特徵 1.線段樹的每個節點都代表乙個區間。2.線段樹具有唯一的根節點,代表的區間是整個統計範圍,如 1,n 3.線段樹的每個葉節點都代表乙個長度為1的元區間 x,x 4.對於每個內部節點 l,r 它...