這幾天斷斷續(xù)續(xù)看完了《啊哈讼油!算法》,做點小復筆記
冒泡排序:比較相鄰的元素呢簸,如果順序不一樣就將他們調(diào)換順序矮台,直到完成排序
快速排序:選擇基準數(shù),頭尾指針往中間靠攏根时,如果兩個指針指向的數(shù)字與基準數(shù)的比較有問題瘦赫,則將其交換(跳躍式的交換)。然后再通過二分的思想遞歸進行這樣的步驟蛤迎,直到排序完成确虱。
棧:先進后出
隊列:先進先出
鏈表:方便插入、刪除節(jié)點
深度優(yōu)先搜索:關鍵在于解決當前該如何做替裆,如果當前有沒有被訪問過的點校辩,則訪問該點,遞歸進行此步驟辆童。若沒有需要訪問的點宜咒,則回到上一個點訪問下一個點。直到所有點都被訪問把鉴。
廣度優(yōu)先搜索:訪問當前點的所有相鄰的點(加入隊列)故黑,將他們加入隊列,然后再遞歸進行此操作,直到完成所有點纸镊。
圖遍歷中倍阐,廣度優(yōu)先搜索更加適用于所有邊權值相同的情況。
圖的鄰接矩陣表示法:使用二維數(shù)組來儲存圖逗威。
Floyd-Warshall:每個頂點有可能使另外兩個定點之間的路程變短峰搪。
每經(jīng)過一個點,更新數(shù)組中的距離凯旭。
Dijkstra(單源最短路):
從選中的點開始概耻,選出離當前點最近的點,對最近點的所有出邊進行“松弛”(與現(xiàn)有的距離進行比較罐呼,如果比現(xiàn)有的距離小則更新距離)鞠柄。
可以使用鄰接表進行優(yōu)化(當邊數(shù)M遠小于點數(shù)N的平方時)
樹:不包含回路的連同無向圖
n個結(jié)點有n-1條邊,任意兩點有且只有一條路徑聯(lián)通嫉柴。
二叉樹:每個節(jié)點最多有兩個子節(jié)點厌杜。
滿二叉樹:所有的葉節(jié)點都有同樣的深度,深度為h且有2的h次方-1個節(jié)點
完全二叉樹:高度為h的二叉樹,第h層從右向左連續(xù)缺若干節(jié)點夯尽。父節(jié)點編號為k瞧壮,左子節(jié)點為2k,右為2k+1匙握。子節(jié)點編號為x(無論左右)咆槽,父節(jié)點為x/2(取整)。
堆:所有父節(jié)點都比子節(jié)點大或者小的完全二叉樹圈纺。
***插入秦忿、刪除節(jié)點的步驟
并查集(不相交集數(shù)據(jù)結(jié)構(gòu)):靠左+擒賊先擒王原則,將孤立的點合并為樹蛾娶。