算法导论-图算法Part1

1. 图的表示:

1. 邻接链表:稀疏图;

2. 邻接矩阵:稠密图;

2. 广度优先搜索

(1) 算法思想:

1. 初始化结点、队列;同时根结点入队;

2. 出队操作,同时将所有该结点的未被访问到的相邻结点入队;

3. 队列为空则算法结束。

2)伪代码:

第一部分:初始化每个结点,队列;

第二部分:

while Q!=null

    u=DeQueue(Q);

    for  v in G.Adj[u]      

     if v.color=white

              v.color=GRAY;

           v.d=v.d+1;

           v.f=u;

              EnQueue(Q,v);

End if

    u.color=BLACK‘

End while

(注:color 属性标记是否访问,d属性记录根到该结点的最短路径,f属性构建广度优先树)

3)应用:最短路径计算;广度优先树。

2.深度优先搜索

1)算法思想:

1. 初始化结点、全局时间计数器;

2. 对每个结点进行检查,然后使用DFS-VISIT(G,u)遍历;

3. DFS-VISIT(G,u):递归访问u结点的未被访问的邻接点,然后回溯。

2)伪代码:

DFS-VISIT(G,u):

time=time+1;

    u.b=time; //第一次访问,开始时间戳

    u.color=GRAY;

    for v in G:Adj[u]

     if v.color=WHITE //未被访问

          v.f=u;

               DFS-VISIT(G,S)//递归

          End if

    End for

u.color=BLACK;

time=time+1

u.e=time; //回溯,第二次访问,结束时间戳

End

(注:color 属性标记是否访问,f属性深度优先森林,b和e属性括号化结构)

 

二、 分析比较

1. 图表示方法比较:

1. 对于稀疏图,采用邻接链表存储节省空间,链式存储结构,可以结点之间的关系申请链表空间的大小,但是结点的访问速度慢。

2. 对于稠密图,采用邻接矩阵存储,稠密图中边比较多采用矩阵存储(二维数组),访问速度比较快O(1)。

2. 图搜索算法的比较:

1. 广度优先搜索采用队列存储结点;结点的color属性用于标记该结点是否被访问以及邻近结点的状态;d属性用于记录从根结点到该结点的最短距离(含有理论推导证明)f属性用于指向该结点的前驱结点,生产广度优先树。

2. 深度优先搜索采用函数栈存储,递归搜索;结点的color属性用于标记该结点是否被访问以及被访问的次数f属性用于指向该结点的前驱结点,生成深度优先森林b属性记录第一次被访问的时间戳,e属性记录第二次被访问的时间戳。

3. 相关定理:

1. 广度优先搜索的正确性:设是一个有向或者无向图,BFS运行,那么BFS从源点可以到达所有的结点在算法终止时

I对所有的;

II.从源结点到结点其中一条最短路径为从结点s到结点最短路径+

2. 广度优先树;

3. 括号化定理:主要原因是基于递归的函数栈;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值