版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、二分法 與統(tǒng)計問題 江蘇省淮陰中學 李睿,簡介,一定范圍內(nèi)計數(shù)問題特點:1 描述簡單2 要求對數(shù)據(jù)動態(tài)維護,動態(tài)計算解決手段:特殊的統(tǒng)計模式和結構,線段樹,動態(tài)處理可以映射在一個坐標軸上的一些固定線段,例如求并區(qū)間的總長度,或者并區(qū)間的個數(shù)等等。 優(yōu)點:隨時插入一個區(qū)間或刪除一個已有區(qū)間,并同時用低耗費維護需要的性質。,線段樹-構造思想,下圖顯示了一個能夠
2、表示[1,10]的線段樹:,,線段樹-動態(tài)數(shù)據(jù)結構,TypeTnode=^Treenode;Treenode=recordB,E:integer; Count:integer;LeftChild,Rightchild:Tnode;End; 其中B和E表示了該區(qū)間為[B,E];Count為一個計數(shù)器,通常記錄覆蓋到此區(qū)間的線段的個數(shù)。LeftChild和RightChild分別是左右子樹的根。,線
3、段樹-靜態(tài)數(shù)據(jù)結構,用數(shù)組B[],E[],C[],LSON[],RSON[]。設一棵線段樹的根為v。那么B[v],E[v]就是它所表示區(qū)間的界。C[v]用來作計數(shù)器。LSON[v],RSON[v]分別表示了它的左兒子和右兒子的根編號。,線段樹-建樹,從根對應的區(qū)間[a,b]出發(fā),每次分成兩個部分,分別建立對應的左右子樹,直到面臨一個初等區(qū)間[x,x+1]。,線段樹-插入刪除線段,將區(qū)間[c,d]插入線段樹T(a,b),并設T(a,b)的
4、根編號為v procedure INSERT(c,d;v)Begin mid=(B[v]+E[v]) div 2;if c≤B[v] and E[v]≤d then C[v] ← C[v]+1else if cmid then INSERT(c,d;RSON[v]);end,線段樹-一個特殊性質舉例,要得到線段樹上線段并集的長度,增加一個數(shù)據(jù)域 M[v],討論: C[v]>0,M[v] = E[v]-
5、B[v];C[v]=0 且v是葉子結點,M[v]=0;C[v]=0 且v是內(nèi)部結點,M[v]=M[LSON[v]]+M[RSON[v]];,線段樹-變形,對點統(tǒng)計,,[例一],一位顧客要進行n(1≤n≤5000)天的購物,每天他會有一些帳單。每天購物以后,他從以前的所有帳單中挑出兩張帳單,分別是面額最大的和面額最小的一張,并把這兩張帳單從記錄中去掉。剩下的帳單留在以后繼續(xù)統(tǒng)計。輸入的數(shù)據(jù)保證,所有n天的帳單總數(shù)不超過1000000,
6、并且每份帳單的面額值是1到1000000之間的整數(shù)。保證每天總可以找到兩張帳單。,建立點線段樹,范圍是[1,1000000],即每種面額的帳單設為一個葉結點。 如果C[LSON[v]]>0,那么樹v中的最小值一定在它的左子樹上。如果C[RSON[v]]>0,它的最大值在右子樹上;,一種靜態(tài)統(tǒng)計方法,[例二]IOI2001 MOBILES :在一個N*N的方格中,開始每個格子里的數(shù)都是0。現(xiàn)在動態(tài)地提出一些問題和修改:
7、提問的形式是求某一個特定的子矩陣(x1,y1)-(x2,y2)中所有元素的和;修改的規(guī)則是指定某一個格子(x,y),在(x,y)中的格子元素上加上或者減去一個特定的值A?,F(xiàn)在要求你能對每個提問作出正確的回答。1≤N≤1024,提問和修改的總數(shù)可能達到60000條。,一維序列求和,設序列的元素存儲在a[]中,a的下標是1..n的正整數(shù),需要動態(tài)地更新某個a[x]的值,同時要求出a[x1]到a[y1]這一段所有元素的和。,對于序列a[1..
8、n],我們設一個數(shù)組C[1..n],C[i]=a[i-2k+1]+…+a[i],其中k為i在二進制下末尾0的個數(shù) 1001010110010000 k =4 計算C[x]對應的2k LOWBIT(x)2k =x and (x xor (x-1)),修改一個a[x]的值 與哪些C相關? 例如x=76=(1001010)2,從形式上進行觀察,可以得到: p1= 1001010 p2= 1001100 p
9、3= 1010000 p4= 1100000 p5=10000000修改C[p1],C[p2],…,,procedure UPDATA(x,A)begin p←x while (p<=n) do begin C[p]←C[p]+A p←p+LOWBIT(p) endend 維護的費用:logn,求a[1]-a[x]的和function
10、SUM(x)beginans ← 0p ← xwhile (p>0) do begin ans←ans+C[p] p←p-LOWBIT(p) endreturn ansend,C[p]=a[p- 2k +1]+^+a[p]下一個p=x- 2k,推廣為原來的二維問題,把C構造成 C[x,y],其每一維定義與原來相同。推廣后算法:兩層嵌套,一次維護費用
11、為O(log2n),集合{3,4,5,8,19,6},,靜態(tài)二叉排序樹實現(xiàn),構造過程1 遞歸:,建立所有點坐標的映射Xp ← 0 作為X映射中的指針procedure BUILD(ID:integer) beginif (ID*2≤n) then BUILD(ID*2); p←p+1; V[ID]=X[p]; if (ID*2+1≤n) then BUILD(ID*2+1);end在
12、主程序中調(diào)用BUILD(1),構造過程2 非遞歸:,方法,依次找出當前點的后繼點的下標第一個點first一定為最下層最左邊的一個位置,若n個點有L層,則first=2 L-1若當前的點位置為now: 如果它有右兒子,即now*2+1<=n,則下一 個位置是右子樹最左下的點 如果沒有右兒子,當now是奇數(shù)時,將now除以2,直到now是偶數(shù),最后再將now除以2。,插入一個點x,procedure INSERT(
13、x)beginnow ← 1repeat SUM[now]←SUM[now]+1 if (V[now]=x) break if (V[now]>x) now←now*2 else now←now*2+1until falseEnd其中SUM是記錄一棵子樹上結點總數(shù)刪除 的方法是類似的,怎樣解決例二,procedure INSERT2(x,A)beginnow ← 1repeat
14、 if (xx) now←now*2 else now←now*2+1until falseendLESS為根及其左子樹上所有點位置的權和,求a[1..x]的元素和function SUM(x):longintbeginans ← 0now ←1repeat if (V[now]x) now←now*2 else now←now*2+1until false retu
15、rn ansend,[例三]采礦(KOP),金礦的老師傅年底要退休了。經(jīng)理為了獎賞他的盡職盡責的工作,決定送他一塊長方形地。長度為S,寬度為W。老師傅可以自己選擇這塊地。顯然其中包含的采金點越多越好。你的任務就是計算最多能得到多少個采金點。如果一個采金點的位置在長方形的邊上,它也應當被計算在內(nèi)。任務:讀入采金點的位置。計算最大的價值。輸入:文件KOP.IN的第一行是S和W,(1<=s,w<=10 00
16、0);他們分別平行于OX坐標和OY坐標,指明了地域的尺寸。接下來一行是整數(shù)n (1<=n<=15 000),表示采金點的總數(shù)。然后是n行,每行兩個整數(shù),給出了一個采金點的坐標。坐標范圍是(-30 000<=x,y<=30 000)。輸出:一個整數(shù),最多的采金點數(shù)。,樣例圖示,,初步,對X離散化后,圖示,,對于每一種坐標y,建立成兩個點事件(y,+1),(y+w+1,-1),例
17、如在一個帶狀區(qū)域內(nèi)有5個點的縱坐標分別是{5,3,9,1,9},w=2 ,標成(1,+1),(4,-1),(3,+1),(6,-1),(5,+1),(8,-1),(9,+1),(12,-1), (9,+1),(12,-1),再將他們按照y的坐標排序,得(1,+1),(3,+1),(4,-1), (5,+1), (6,-1), (8,-1), (9,+1), (9,+1),(12,-1), (12,-1)我們把后面的標號反映在一個y坐
18、標的映射上,然后從低到高求和,坐標下的求和,這些和中最大的一個就是該帶狀區(qū)域中一個包含最多點數(shù)的矩形 在插入或者刪除一個點事件之后,能夠維持坐標下∑的值;能夠在很短時間內(nèi)得到∑中最大的一個值。,,,實現(xiàn):,SUM[now]對應子樹上所有+1,-1標號的和。實現(xiàn)極簡單MAXSUM[now],子樹上和最大的一個前綴的值。MAXSUM[1]是一種狀態(tài)下得到最優(yōu)解。如何維護?MAXSUM[]有哪幾種可能?1 最大值在左樹上;2 最大值
19、正好包含根結點;3 最大值在右樹上。,自下而上維護樹的特性,找到當前坐標對應點序號now,修正標號為kRepeat SUM[now]←SUM[now]+k MAXSUM[now]←Max{ MAXSUM[now*2],SUM[now]-SUM[now*2+1],SUM[now]-SUM[now*2+1]+MAXSUM[now*2+1]} n
20、ow ← now div 2until now = 0,二分法虛擬實現(xiàn)樹,二叉樹使用之前必須構造出一個空的二叉樹 對于任何一個有序表,在對其進行二分查找時,實際上就等于在一個二叉樹上進行查找,對于一個表{1,3,4,8,9}的二分查找,等價于在如下圖的二叉排序樹上進行查找:,,舉插入結點的例子,來說明這種虛實現(xiàn)的方法,設LESS表示根及其左樹上結點的個數(shù):,procedure INSERT(x)beginl←1,r←nwh
21、ile (l<=r) do begin m=(l+r) div 2 if x<=V[m] LESS[m]←LESS[m]+1if x =V[m] breakif x<V[m] then r ←m –1 else l←m+1 endend,[例四]最長下
22、降序列,給定一個整數(shù)序列a,求最長下降序列的長度。,,O(n2),對P進行特殊的限制,即,在所有等價的決策j中,P選擇a[j]最大的那一個 在處理完a[1..x-1]之后,對于所有長度為M[x]-1的下降序列,P[x]的決策只跟其中末尾最大的一個有關。 用另外一個動態(tài)變化的數(shù)組b,當我們計算完了a[x]之后,a[1..x]中得到的所有下降序列按照長度分為L類,每一類中只需要一個作為代表,這個代表在這個等價類中末尾的數(shù)最大,我們把它記
23、為b[j],1≤j≤L。 處理當前的一個數(shù)a[x],我們無需和前面的a[j](1≤j≤x-1)作比較,只需要和b[j](1≤j≤L)進行比較。,首先,如果a[x]=b[1],這時a[x] 僅能構成長度為1的下降序列,同時它又必然是最大的,所以它作為b[1]的代表,b[1]=a[x]。 如果前面的情況都不存在,我們肯定可以找到一個j,2≤j≤L,有b[j-1]>a[x],b[j]≤a[x],這時分析,a[x]必然接在b[j-1]
24、后面,行成一個新的長度為j的序列。,這幾種情況實際上都可以歸結為:處理a[x],令b[L+1]為無窮小,從左到右找到第一個位置j,使b[j]≤a[x],然后則只要將b[j]=a[x],如果j=L+1,則L同時增加。x處以前對應的最長下降序列長度為M[x]=j。 L ←0for x←1 to n do beginb[L+1]←無窮小 j←1 while (b[j]>
25、a[x]) j←j+1 b[j]←a[x] if j>L then L←j end,更改成: j←1,k←L while (j≤k) do begin m ← (j+k) div 2 if b[m]>a[i] j←
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二分法說課稿
- 0618與二分法的學習
- 政治與行政二分法評述
- 0618與二分法的學習
- 二分法求函數(shù)零點教案
- 基于二分法的DPWM模塊設計與應用.pdf
- 用二分法求方程的近似解說課稿
- 《用二分法求方程的近似解》習題
- 政治與行政二分法的批判性分析.pdf
- 論思想與表達二分法原則的法律適用.pdf
- 淺析經(jīng)濟法體系“二分法”的基本構成
- 用二分法求方程的近似解教學設計
- 從語義和功用上探析思想與表達二分法
- 著作權法的思想與表達二分法研究.pdf
- 課題2用二分法求方程的近似解
- 淺析經(jīng)濟法體系“二分法”的基本構成
- 2二分法求解非線性方程的根
- “用二分法求方程的近似解”教學設計
- 著作權法中思想與表達二分法原則研究.pdf
- 用二分法求方程的近似解教學設計與教學反思
評論
0/150
提交評論