分桶法:給乙個n個元素的陣列a[0...n],分桶法的思想是將這n個元素進行均分,均分成√n組,每組裡有√n個元素,這裡「組」的意思與「桶」等價。這種分法也稱之「平方分割」。
這樣會帶來哪些處理上的好處呢?其實類似於線段樹,分桶法的思想也是每個桶分別維護各自桶內部的資訊,然後在處理區間問題上帶來快捷。這裡以rmq(range minimum query)為例:
給出乙個n個元素的陣列a,我們的任務有兩個:
這裡我們用b代表」桶寬「,取b=[√n], 然後依次在每個桶中放入b個元素:
b=(int) sqrt(n);
vector
bucket[max_n/b];
for(int i=0;i)
每個桶所維護的便是它的區間裡的最小的數,記為val[i]
任務1:查詢
而查詢區間[l,r]時,我們需要遍歷的元素個數不超過n/b個,這部分的複雜度是o(√n);而詢問各個桶維護的最小值所要的複雜度也是o(√n),所以查詢時的總的複雜度是o(√n)。
任務2:更新
//值得注意更新時不可以採用x與桶k維護的值val[k]直接比較取min,因為桶不知道替換掉的是誰,可能是val[k]所在的a[i]被x替換了(不過感覺大家不會出這種錯啦~
更新時僅需遍歷乙個桶,因此其複雜度也是o(√n)。
這樣,如果總的運算元是m,那麼總的操作複雜度就是o(m√n),條件不苛刻是還是推薦使用的,畢竟實現起來比線段樹簡單。
推薦題目:k-th number(poj 2104)
分桶法和平方分割
分桶法 bucketmethod 是把一排物品或者平面分成桶,每個桶分別維護自己內部的資訊,以達到高效計算的目的的方法。其中,平方分割 sqrtdecomposition 是把排成一排的n個元素每根號n個分在乙個桶內進行維護的方法的統稱。這樣的分割方法可以使對區間的操作的複雜度降至o 根號n 和線段...
分桶法和平方分割
分桶法 bucket method 是把一排物品或者平面分成桶,每個桶分別維護自己內部的資訊,以達到高校計算的目的的方法。其中,平方分割 sqrt decomposition 是把排成一排的n個元素每n 1 2 分在乙個桶內進行維護的方法的總稱。這樣的分割方法可以使對區間操作的複雜度降至o n 1 ...
關於Fragment使用的一些見解
下面來看一下我自定義的fragment的 public abstract class myfragment extends fragment public myfragment getparentmyfragment public void showfragments myfragment myfr...