emmm。。。
經過12天的培訓,感覺整個人都已懵逼。。。
前言
這次寒假的培訓,講了許多的知識,雖然不能一次性全部消化完,後續還要繼續補充學習,但我還是收穫了許多。
前六天主要講了最短路,生成樹,LCA和樹形DP,而後六天講的就是數論。
可能因爲最短路這些前面有些提及,大部分還是聽得懂,但到數論就真的只能說是一臉懵逼了(相信有很多人跟我是同樣的感覺)。
知識點
最短路:
多源點:
- floyd,特點:三重循環時間複雜度相比較高,但是是現階段唯一一個可以做多源點的算法
單元點:
- dijkstra,特點:首先不能有負邊權,雖然可以修改算法得到正解,但遇到特殊數據會被卡到指數,然後用貪心的思想,由離s前k-1近的點就可以得到s第k近的點。
- bellman-ford,特點:可以處理負邊權,設 dis [ i ] [ j ] 表示從源點 s 最多經過 i 條邊到達終點 j 的最短路長度,則 dis [ i ] [ j ] = min ( dis [ i ] [ j ] , min ( dis [ i - 1 ] [ v ] + w ( v , j ) ) ) 當然,dis要預先處理爲極大值。
- spaf,特點:可以處理負邊權,從源點出發,依次鬆弛每一個點。
生成樹:
- prim,特點:找每一個樹之外的離樹最短的點,複雜度O(V^2),適合稠密圖(V代表點的個數)。
- kurskal,特點:對邊權排序,依次添加,形成環就跳過,複雜度O(ElogE),適合稀疏圖(E代表邊的個數)。
LCA:
- 這個是比較齊的LCA
- 暴力,特點:先處理到相同深度,然後一層一層往上爬,直到相遇,複雜度最高,O(n),好寫,避免卡數據。
- dfs序+rmq(沒太懂,搞清楚再說哈)。
- 倍增,特點:還是先處理到相同的深度,但每次爬2^i次方的高度,複雜度O(logn)。
- tarjan,特點:離線算法,先記錄所有的要查詢的點,一次dfs求出所有點的LCA。
樹形DP:
- 就像DP一樣,只是在樹上做DP。
數論:
- 輾轉相除法,在O(nlogn)的時間內求出兩個數的最大公約數。
- 埃拉託斯特尼篩法,O(nloglogn)求出1~n裏的質數。
- 歐拉篩法,O(n)求出1~n裏的質數。
數論內容太多,這裏不一一列舉了。。。
分析
再來總結一下最近的學習吧。
感覺還是有點跟不上大家的腳步,理解得比較慢,再加上這一次講解的知識很多,沒有來得及消化,所以可能做題情況不是很好。
但是,還是要加油趕啊。
最近兩次考試也不是很理想,總共只有20分,雖然第二次不應該爆零,但是從中也能看出自己的不足。
總結
其實吧,自我感覺還是有點力不從心了,感覺自己快要退役了。
但是,我還是要努力留在編程社。
至少,也要再走一年。
在這一年裏,也要竭盡全力了。
至少要讓自己在編程社的時光不留遺憾!!!