zoukankan      html  css  js  c++  java
  • 图算法概论

    1. 图的表示

    图的表示法有两种,邻接表和邻接矩阵法,这两种方法既可以表示有向图也可以用于表示无向图。邻接表方法在稀疏的图中比较节省资源,但是邻接矩阵法在密度比较高的情况下比较好。

    2. 搜索算法

    搜索一个图示有序地沿着图的边访问所有的定点,图的搜索技术是图算法领域的核心

    a. 广度优先搜索(Breadth-first search,BFS)

    过程:

    对于无向图来说,广度优先搜索也是获得最短路径的算法之一。

    广度优先搜索会产生广度优先树。

    b. 深度优先搜索(Depth-first search, DFS)

    过程:

    深度优先搜索会产生深度优先森林。

    3. 最小生成树

    将所有的顶点连接,并且所有边权值之和最小的树。 最小生成树并不是唯一的,但是权值之和是唯一的。最小生成树,两种贪心方法,Kruskal(/kru:ska:/ 克鲁卡尔)和Prim(普利姆)。

    a. Kruskal算法

    算法的主要思想是:

          I. 将所有边的权值排序,

          II. 在未选过的边中,选择其中权值最小的边,如果该边是安全边(连接两个不同的树),就将选择该边,否则丢弃。

    b. Prim算法

         I.随意选择一个顶点,从该顶点开始,构造树,每次选与该树临近的并且权值最小的顶点。

    4. 最短路径

    路径,就是从一个顶点到另一个顶点的所有边。一个顶点到另一个顶点的路径有多种,其中路径中边和最小的那个路径叫最短路径。

    最短路径有几种情况:

    1. 单源最短路径

    单源表示单个源节点,单源最短路径就是计算单个源节点到其他各个节点的最短路径。计算方法有 Bellman-ford算法(广泛,可以在存在负权边的情况下)和Dijkstra(/jikstra:/迪杰斯特拉,在不存在负权边的情况下,比bellman-ford有更好的表现)。

    2. 一对顶点间的最短路径

    可以有单源最短路径计算。

    2. 每对顶点间的最短路径

    按理来说,单源最短路径可以直接用来计算每对顶点间最短路径,但是在每对顶点间最短路径上是有特殊优化的。计算方法有Floyd-warshall算法(属于动态规划算法)和稀疏图上的Johnson算法。

    5. 最大流

    什么叫最大流? 举一个简单的例子,假设每条有向边认为是传输物质的管道,每个管道的最大物质通过速度是固定的,管道相互连接,最大流就是物质从入口到出口流动的最大速率。

    最大流里面有几个概念,流网络G=(V,E)是一个有向图,每条边(u,v)的权重都是非负的,源点s是入口点,汇点t是出口点。多源点和多汇点的流网络可以简化为单源点,单汇点的问题。

    解决最大流的算法有Ford-Fulkerson方法。一些组合问题可以很容易的转换为最大流问题,如最大二分匹配问题。

    6. 欧拉路

    欧拉路概念:

    欧拉回路概念:

    7. 哈密顿路

    哈密顿路概念:

    8. 匹配与覆盖

    9. 网络流

    残量网络概念:

    增广路径概念:

    最小费用流:

    10. 独立集、团与支配集

    独立集:

  • 相关阅读:
    win32: 静态控件(Static)
    malloc() 和 calloc()有啥区别
    win32: WM_PAINT 实现双缓冲缓图
    char 与 unsigned char的本质区别
    iconv: iconv_open(pToCharset, pFromCharset); 的附加参数//IGNORE
    c语言: 生成随机数
    深圳市住房公积金管理中心
    利用latex制作个人简历
    分布式系统概念与设计中文版(第三版)
    数据结构-红黑树
  • 原文地址:https://www.cnblogs.com/stonehat/p/3612509.html
Copyright © 2011-2022 走看看