第四章笔记:遍历--算法学中的万能钥匙

摘要:1. 简介 2. 公园迷宫漫步 3. 无线迷宫与最短(不加权)路径问题 4. 强连通分量

1. 简介

在计算机科学裡,树的遍历(也称为树的搜索)是圖的遍歷的一种,指的是按照某种规则,不重复地访问某种樹的所有节点的过程。具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。两种著名的基本遍历策略:深度优先搜索(DFS) 和 广度优先搜索(BFS)。参考:https://zh.wikipedia.org/wiki/%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86

遍历不单单指对显式图结构的遍历,比如 序列化某个复杂的数据结构;列出文件系统的所有文件和部分文件;管理软件包之间的依赖关系 等待都会用到遍历。同时,遍历还是许多其他算法的关键组成部分和基本原理。

连通分量就是指目标图中最大且独立的连通子图。通过遍历获得图结构的连通分量。

2. 公园迷宫漫步

#递归版的深度优先搜索
def rec_dfs(G, s, S=None):
    if S is None: S = set()
    S.add(s)
    for u in G[s]:
        if u in S :continue
        rec_dfs(G, u, S)
#迭代版深度优先搜索
def iter_dfs(G, s):
    S, Q = set(), []
    Q.append(s)
    while Q:
        u = Q.pop()
        if u in s : 
            continue
        S.add(u)
        Q.extend(G[u])
        yield u
#通用性的图遍历函数
def traverse(G, s, qtype=set):
    S, Q = set(), qtype()
    Q.add(s)
    while Q:
        u = Q.pop()
        if u in S :
            continue
        S.add(u)
        for v in G[u]:
            Q.add(v)
        yield u

 以及,深度优先的时间戳与拓扑排序

3.无线迷宫与最短(不加权)路径问题

猜你喜欢

转载自www.cnblogs.com/vangaohao/p/11419219.html