zoukankan      html  css  js  c++  java
  • 图及算法----遍历算法(迭代实现)

            一直以来,对关于算法怎么一步步的说教不感冒,嗯,这次知道这个问题怎么做怎么做,确实解决了这个问题!但是跟多问题来了,这世界上形形色色的算法太多,

    有的算法流程还超长,还有就是脑子不够用啊,哪里能记住这么多细节啊,就算记住了也不可能长久啊,就算要记也只能记住些典型(划算点)。怎么办爱情甜又酸(vae)?

      不啰嗦了,这次关照的是图遍历(搜索),模型的假设:

    1. 图是一张网,而你是一只爬虫,爬虫想把每个节点检查一下是否牢固;

    2. 作为Actor爬虫,是有状态的对象,每次处于不同的环境需要更新状态;

    3. 每次更新状态的方式是类似的。

      结合本人经验:一个迭代算法通常要考虑-->

    a. 有哪些状态,背景与环境 需要维护;

    b. 如何初始化相关量;

    c. 状态如何更新;

    d. 状态何时更新。

    迭代的循环性质,似乎从哪个切点进入或初始化都可以?

    没错,这与差分方程与微分方程有点像,初始状态很重要

    class Graph: 
        def __init__(self): 
            self.graph: Dict[str, List[str]] = defaultdict(list)
        
        def addEdge(self, u, v): 
            self.graph[u].append(v)
            
    def dfs_traverse(graph, start):
        visited, stack = set(), [start]
        while stack:
            node = stack.pop()
            if node not in visited:
                visited.add(node)
                for nextNode in graph[node]:
                    if nextNode not in visited:
                        stack.append(nextNode)
        return visited
    
    
    def bfs_traverse(graph, start):
        visited, queue = set(), [start]
        while queue:
            node = queue.pop(0)   # 访问的操作包括将该节点纳入被访问集合,并将其子节点纳入待访问队列
            if node not in visited:
                visited.add(node)
                for nextNode in graph[node]:
                    if nextNode not in visited:
                        queue.append(nextNode)
        return visited
    
    # 想象有个Actor在结构上行走,它必须维护它的状态的变更,这是搜索的本质
    
    def BFS(graph, s): 
        visited = set()
        queue = [] 
        queue.append(s)  # 维护已经被访问的节点,并以此来访问其子节点
        while queue: 
            s = queue.pop(0) 
            print(s, end=" ") 
            for i in graph[s]: 
                if i not in visited: 
                    visited.add(i)
                    queue.append(i) 
        return visited
    
    def BFS2(graph, s): 
        visited = set()
        queue = [] 
        while True:
            print(s, end=" ") 
            for i in graph[s]: 
                if i not in visited: 
                    visited.add(i)
                    queue.append(i)
            if queue:
                s = queue.pop(0) 
            else:
                break
            
            print(queue)
        return visited
  • 相关阅读:
    沙龙:超越敏捷 召集中![广州]
    超级扫盲什么是设计模式?
    大话UML
    敏捷开发纵横谈
    超越竞争对手的秘密武器技术重用
    1.1 基础知识——CMMI是什么东西?
    Tutorial 2: Rendering a Triangle
    Tutorial 4: 3D Spaces
    Tutorial 5: 3D Transformation
    D3D11中的绘制
  • 原文地址:https://www.cnblogs.com/wdmx/p/10076336.html
Copyright © 2011-2022 走看看