學習筆記 2020寒假資料結構集訓總結

2022-04-16 21:37:47 字數 2269 閱讀 3097

宣告:本部落格所有隨筆都參照了網路資料或其他部落格,僅為博主想加深理解而寫,如有疑問歡迎與博主討論✧。٩(ˊᗜˋ)و✧*。||

支援:\(1.\)單點修改/查詢

\(2.\)區間加減/查詢(差分)

優點:好理解;**實現簡單

缺點:支援的功能少(其實都是和字首和有關的)

支援:\(1.\)單點修改/查詢

\(2.\)區間加減乘平方/查詢

優點:功能相對多(懶標記挺好用,可以進行很多轉化),可以樹套線段樹之類(例如樹鏈剖分)

缺點:暫時想不到?

這倆原本能解決的問題都很有限,頂多弄個單點修改區間查詢,但是樹狀陣列有了差分,線段樹有了懶標記,於是它們的運用範圍就變廣很多了。

這是最基本的資料結構,在後面也會不斷運用到,所以對於它們的熟練程度應該有★★★★★||

其實這三個資料結構都運用到了同一種重要的思想:倍增

\(st\)表:倍增+動態規劃的思想,是離線處理,先利用倍增的思想處理好 \(f[i][j]\) 陣列(表示 \(i \ - \ i + 2^j\)),查詢則為兩段的並

\(rmq\):實際上就是\(st\)表的運用

\(lca\):相當於把\(st\)表運用到樹上,更為巧妙。同樣為 \(f[i][j]\) 表示 \(i\) 往上走 \(2^j\) 步的父親,查詢時則先跳到同一高度,再一起跳

這三個原理是一樣,都是倍增的思想,而略有不同。但感覺我運用得還不是很多?大概都用上倆去了哈哈哈,熟練程度應為★★★★★||

\(kmp\):優化在於把原來模式串中已匹配過的字首不需再次匹配,大大減小了時間複雜度為 \(o(n+m)\)

\(trie\):這個沒什麼好講的?不過第一次知道的時候還是被其神奇的應用性和簡潔的**驚嘆到了

\(ac\)自動機:把 \(kmp\) 放到 \(trie\) 上用,對於每個節點,都有乙個 \(next\) 指向 最長的為此串的字尾的串的末尾(這句話好繞啊哈哈哈)||

更新乙個值後則 \(splay(x, y)\) 表示將 \(x\) 旋轉為 \(y\) 的兒子,保證 \(bst\) 不會退化為一條鏈(其餘可參考【學習筆記】splay入門(更新中))

相對於 \(splay\) 來說更好理解,有一定的暴力思想,在 \(bst\) 不平衡時直接將整棵樹拍扁重建;

如何知道 \(bst\) 不平衡?自己定義乙個 \(0.5< alpha < 1\)(一般為 \(0.75\),可根據題目需要進行變動),若子樹與整棵樹大小之比超過了 \(alpha\) 則重建||

一些定義

\(1.\)重兒子:兒子中 \(size\) 最大

\(2.\)輕兒子:除去重兒子其餘都為輕兒子

\(3.\)重邊:父親節點和重兒子的連邊

\(4.\)輕邊:父親節點和輕兒子的連邊

\(5.\)重鏈:由重邊連成的鏈(\(\ge 1\))

\(6.\)輕鏈:由輕邊連成的鏈(\(\ge 1\))

支援\(1.\)修改點 \(x\) 到點 \(y\) 路徑上各點的值

\(2.\)查詢點 \(x\) 到點 \(y\) 路徑上各點的值

\(3.\)修改點 \(x\) 子樹上各點的值

\(4.\)查詢點 \(x\) 子樹上各點的值

剩下的其實很簡單了,給所有節點表上新的 \(id\),一般用線段樹來維護(注意:一定不要把原編號與 \(id\) 弄混了

推一篇個人覺得寫得很好的部落格

實際上點分治也是有一些暴力思想的;功能和樹鏈剖分有點像,但是更廣一點,還可求路徑為k等一系列問題;還有更高階的動態點分治

支援:\(1.\)查詢/修改鏈

\(2.\)換根

\(3.\)動態連邊/刪邊

\(4.\)動態維護連通性

由於 \(lct\) 是動態維護的,所以用更靈活的 \(splay\) 來操作。最開始覺得超級難,多複習幾遍就好多了。

個人覺得樹剖和點分治其實都挺好寫的,多做幾道題目就差不多了,都比較類似(當然黑題可能就不是了...)\(lct\) 也是多寫就好了||

原本聽到要學很多 又難又陌生 資料結構時真的有點害怕,但連續的集訓也堅持下來了,收穫真的超級大!誰能知道在這之前我打個線段樹都超級不熟練呢hhh,也從這段學習中悟到了:

\[1.\text

\]\[2.熟能生巧

\]\[3.刷題不在多,在於題型和領悟

\]資料結構虐我千百遍 我待它仍如初戀 2333

2020寒假學習筆記03

實驗內容如下 請用指令碼的方式程式設計計算並輸出下列級數的前 n 項之和 sn,直到 sn 剛好大於或等於 q 為止,其中 q 為大於 0 的整數,其值通過鍵盤輸入 例如,若 q 的值為 50.0,則輸出應為 sn 50.416695。在 repl模式下測試執行,測試樣例 q 1時,sn 2 q 3...

2020版資料結構筆記

2020版資料結構筆記1 1本章涉及的知識點是學好資料結構的基本功 演算法設計部分 書寫規範 介面 假如函式是一台機器,可以用原材料來加工成成品,那麼就可以理解成原材料的入口。可以把介面理解為使用者和函式打交道的地方,通過介面,使用者輸入了自己的資料,得到了自己想要的結果。至此我們可以知道,考研綜合...

資料結構 並查集 自學筆記

為了能夠動態維護若干個不重疊的集合,並支援合併於查詢,我們使用乙個樹形結構儲存每個集合,樹上的每個節點都是乙個元素,根節點是集合的代表元素。並查集的操作包括兩個 get 查詢元素屬於哪乙個集合 返回根節點 merge 將兩個元素 或集合 合併。路徑壓縮 按秩合併 路徑壓縮 可以在每次get操作時,將...