• 选择排序SelectionSort
    【算法】Notes for Chapter 3

  • 冒泡排序Bubblesort,比较输入数据中的相邻元素,如果是逆序就交换它们的位置,重复多次以后,其中最大的元素就沉到列表的最后一个位置,第二遍操作将第二大的元素沉入列表的倒数第二个位置,如此一直做,直到n-1次【起泡】以后,整个输入数据的列表就排序好了。
    【算法】Notes for Chapter 3

  • 选择排序和冒泡排序的时间效率都是O(n2)O(n^2).

  • 关于顺序查找的技巧】将待查元素插入到查找范围的末尾,这样就可以不必考虑边界的范围。

  • 最近点对问题一个关于最近点对的重要应用是统计学中的聚类分析,对于n个数据点的集合,层次聚类分析希望基于某种相似度度量标准将数据点构成的簇按照层次关系组织起来。对于数值型数据,相似度度量标准通常采用欧几里得距离,对于文本和其它的非数值类型,通常采用诸如汉明距离、哈密顿距离这样的相似度度量标准。

  • 凸包问题】凸包能够方便地提供目标形状或给定数据集的一个近似,例如在计算机动画中,用物体的凸包替换物体本身,可以加快碰撞检测的速度,同样的方法也能应用于火星探测车的路径规划任务中;在地理信息系统中,也应用凸包问题根据卫星图像计算可通达地图(Accessibility Map) ;一些数理统计方法也利用该技术进行异常值检测。

  • 对于平面上的一个点集合,如果以集合中任意两点ppqq为端点的线段都在这个集合之中,那么我们说这个集合是凸的。一个点集合SS的凸包(Convex Hull)是包含SS的最小凸集合,形象地说就是用一根弹性无限好的橡皮圈矿主所有的点,橡皮圈收缩后的那个点集合就是凸包。

  • 哈密顿回路】对图中的每一个顶点都穿越一次,并且只穿越一次的回路。

  • 背包问题】给定n个重量为w1,w2,...,wnw_1,w_2,...,w_n,价值为v1,v2,...,vnv_1,v_2,...,v_n的物品和一个承重为WW的背包,想要得到一个能装入背包中,并且价值最大的物品组合。

  • 分配问题】有n个任务要分配给n个人,一个任务和一个人一一对应,将第jj个任务分配给第ii个人所需要的成本是Cost[i,j]Cost[i,j],想要得到一个成本最小的分配方案。对于该问题有一个高效的算法—匈牙利方法Hungarian Method,纪念匈牙利数学家König和Egerváry的贡献。

  • DFS】从图中的任意一个顶点开始访问,将该顶点标记为【VisitedVisited】,在每次迭代时,DFS处理与当前顶点邻接的未访问顶点,若这样的顶点有多个,可以任意选择一个(实际上是由存储图的数据结构,邻接矩阵或邻接链表决定的)。当算法后退到起始顶点,并且起始顶点也终止时,DFS终止。

  • 以栈Stack来跟踪DFS的查找顺序非常自然,当一个顶点第一次被访问时(即开始对这个顶点访问时),我们将这个顶点入栈;当该顶点成为终点(即它的所有邻接顶点都被访问到了时),我们将该顶点出栈。

  • DFS森林】DFS的同时能够构造出一个对应的森林,起始顶点作为森林中第一棵树的根,当第一次访问到一个顶点vv时,若它是从顶点uu被访问到的,就将其作为uu的孩子,连接这样两个顶点的边(u,v)(u,v)称为树向边Tree Edge,所用树向边的集合构成了一棵树。如果该图不是一个连通图,即它由kk个连通分量组成,那么DFS森林中就有kk棵树。DFS过程中也可能会遇到从vv指向一个标记为【VisitedVisited】顶点uu的边,并且uuvv的非父母祖先,这样的一条边称为回边Back Edge.

  • 【算法】
    【算法】Notes for Chapter 3
    【算法】Notes for Chapter 3

  • DFS会产生两种顶点排列顺序,一是顶点入栈的顺序,二是顶点出栈的顺序。

  • DFS的应用】检查连通性和无环性。对于连通性而言,从任意一个顶点开始执行DFS算法,若算法结束后图中所有顶点都被访问过了,那么这个图是具有连通性的。对于无环性而言,如果DFS所得的森林中没有回边,该图就是一个无环图。

  • BFS】BFS以一种类似同心圆的方式访问所有顶点,任选一个起始顶点SS,第一次迭代时访问与SS邻接的未访问顶点,然后是距离SS两条边的所有未访问顶点,依此类推,直到所有与SS在同一个连通分量中的顶点都被访问过。如果图中依旧有未访问顶点,那么该算法必须从剩余的顶点中任选一个继续执行。

  • 使用队列Queue来跟踪BFS的执行过程是自然的,注意与DFS的差别。该队列从BFS执行的初始顶点开始,将该顶点标记为【VisitedVisited】并将其入队,在每次迭代时,BFS找出所有和队列头Front邻接的顶点,将他们标记为【VisitedVisited】,再将它们入队,同时移除原来的Front。

  • BFS森林】和DFS一样,BFS遍历的同时,也可以构造BFS森林。初始顶点SS可以作为森林中第一棵树的根,无论何时,只要第一次遇到一个新的未访问顶点vv,它是从顶点uu被访问到的,就将uu附加为vv的子女,边(v,u)(v,u)称为树向边Tree Edge. 如果遇到一条边它指向曾经被访问的顶点vv,并且vv不是此刻顶点的父母,这样的边称为交叉边Cross Edge.

  • 【算法】
    【算法】Notes for Chapter 3
    【算法】Notes for Chapter 3

  • BFS的应用【算法】Notes for Chapter 3
    【算法】Notes for Chapter 3

  • DFS与BFS的性质
    【算法】Notes for Chapter 3

相关文章: