《啊哈!算法》小总结

这几天断断续续看完了《啊哈!算法》,做点小复笔记

冒泡排序:比较相邻的元素,如果顺序不一样就将他们调换顺序,直到完成排序

快速排序:选择基准数,头尾指针往中间靠拢,如果两个指针指向的数字与基准数的比较有问题,则将其交换(跳跃式的交换)。然后再通过二分的思想递归进行这样的步骤,直到排序完成。

栈:先进后出

队列:先进先出

链表:方便插入、删除节点

深度优先搜索:关键在于解决当前该如何做,如果当前有没有被访问过的点,则访问该点,递归进行此步骤。若没有需要访问的点,则回到上一个点访问下一个点。直到所有点都被访问。

广度优先搜索:访问当前点的所有相邻的点(加入队列),将他们加入队列,然后再递归进行此操作,直到完成所有点。

图遍历中,广度优先搜索更加适用于所有边权值相同的情况。

图的邻接矩阵表示法:使用二维数组来储存图。

Floyd-Warshall:每个顶点有可能使另外两个定点之间的路程变短。

每经过一个点,更新数组中的距离。

Dijkstra(单源最短路):

从选中的点开始,选出离当前点最近的点,对最近点的所有出边进行“松弛”(与现有的距离进行比较,如果比现有的距离小则更新距离)。

可以使用邻接表进行优化(当边数M远小于点数N的平方时)

树:不包含回路的连同无向图

n个结点有n-1条边,任意两点有且只有一条路径联通。

二叉树:每个节点最多有两个子节点。

满二叉树:所有的叶节点都有同样的深度,深度为h且有2的h次方-1个节点

完全二叉树:高度为h的二叉树,第h层从右向左连续缺若干节点。父节点编号为k,左子节点为2k,右为2k+1。子节点编号为x(无论左右),父节点为x/2(取整)。

堆:所有父节点都比子节点大或者小的完全二叉树。

***插入、删除节点的步骤

并查集(不相交集数据结构):靠左+擒贼先擒王原则,将孤立的点合并为树。

    原文作者:EdwdChen
    原文地址: https://www.jianshu.com/p/b32687600fe6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞