【trie樹】
trie樹
存在的問題
1.空間大
不能用陣列存(一般)
如果字母表特別特別大
(1.鄰接表+hash
(2.平衡樹存字母表
2.縮編加速
a->b->c->d----》a->bcd
【字尾樹】
用tre來實現kmp的功能
把文字串的所有字尾建乙個trie樹
--》字尾樹
兩個字尾的最長公共字首
就是字尾樹(trie樹)中對應葉子節點的lca
字尾陣列,
把字尾陣列放在那,從左往右看每個葉子節點的編號所構成的陣列,就是字尾陣列
笛卡爾樹
從字尾數組建字尾樹
字尾陣列實際上就是將所有字尾按字典序排序
如何快速的講兩個字尾陣列排序?
用倍增演算法。
因為很有可能出現大量重複。
我們可以很輕鬆的用桶給單個字元排序
那麼同樣,我也可以通過已經排好序的單個字元,給長度為二的字串排序,
長度為4,長度為8的。。。同理
所以時間複雜度是o(nlogn)
這個時間實際上是非常快的
字尾陣列的應用
(1 求某兩個字尾陣列的最長公共字首
sa表示字尾陣列(已經排好序的)
例 :abcabd
sa=1 abcabd
4 abd
2 bcabd
5 bd
3 cabd
6 dhight[n]=sa[n-1]和sa[n+1]的最長公共1字首
某兩個字尾的最長公共字首,等於這兩個字尾在字尾陣列裡的排名中間所有的hight的最小值
如何求hight?
h表示每乙個字尾最多能匹配多少位
證明:h[i+1]>=h[i]-1;
h[i]<=1;一定成立
h[i]>1
h[i]=hifht[rank[i]]
【整理】
sa每乙個字尾的編號
排序後的sa值存進陣列
rank第i個數對應的對應字尾陣列中的哪個數
heght相鄰兩個字尾陣列中的字尾的最長公共字首
有乙個性質:lca(i,j)=rmq(height[rand[i+1],height[rand[j]),求區間最小值
利用這個性質求出任意字尾的最長公共字首
【概率與期望】p(e)
事件e什麼情況會出現在你的事件裡
隨機變數x
x=a1,a2,a3,.....,an
p(x)=ai;
期望平均的取值就是期望
ex=sigma pi ai (i=1......n)
方差=e(x-ex)^2
dv[x]=1;
期望的線性性
e(x+y)=ex+ey
期望的獨立性
x=x1....xn y=y1......yn
p(x=xi,y=yi)=p(x=xi)p(y=yi)
在獨立性的前提下
e(x*y)=ex*ey
注:只有在獨立的情況下乘法才能滿足線性
9 1課堂筆記
課堂筆記 一 1 file類的構造方法 public file string pathname 根據parent抽象的路徑名和child路徑名字串建立乙個新的file物件。pathname指路徑名字串,parent父抽象路徑名 父抽象路徑名既可以是字串,也可以是file物件 public file ...
9 7課堂筆記
課堂筆記 執行緒的同步 為什麼需要 執行緒同步 執行緒間共享 和資料可以節省系統開銷,提高程式執行效率,但同時也導致了資料的 訪問衝突 問題,如何實現執行緒間的有機互動 並確保共享資源在某些關鍵時段只能被乙個執行緒訪問,即所謂的 執行緒同步 synchronization 就變得至關重要。臨界資源 ...
2018 3 8課堂筆記
選擇器的優先級別可以如下方式計算 a 行內樣式權重1000,b id選擇器權重100 c 類 偽類和屬性選擇器權重10,d 標籤選擇器和偽元素選擇器權重為1 對於網頁中背景的修改 都是以background開頭的,例如 background position背景的定位 background size...