Python 圖算法

Python 圖算法

圖在解決許多重要的數(shù)學難題中是非常有用的數(shù)據(jù)結(jié)構(gòu)。例如計算機網(wǎng)絡拓撲或分析化學化合物的分子結(jié)構(gòu)。它們還用于城市交通或路線規(guī)劃,甚至用于人類語言和語法。所有這些應用程序都有使用它們的邊遍歷圖的共同挑戰(zhàn),并確保圖的所有節(jié)點都被訪問。有兩種常見的已建立的方法來進行這種遍歷,下面將對其進行描述。

 

深度優(yōu)先遍歷:

也稱為深度優(yōu)先搜索(DFS),該算法遍歷深度病房運動中的圖形,并使用堆棧記住在任何迭代中發(fā)生死角時開始搜索的下一個頂點。我們使用設置的數(shù)據(jù)類型在python中實現(xiàn)DFS圖表,因為它們提供了跟蹤訪問和未訪問節(jié)點所需的功能。

class graph:

    def __init__(self,gdict=None):
        if gdict is None:
            gdict = {}
        self.gdict = gdict
# Check for the visisted and unvisited nodes
def dfs(graph, start, visited = None):
    if visited is None:
        visited = set()
    visited.add(start)
    print(start)
    for next in graph[start] - visited:
        dfs(graph, next, visited)
    return visited

gdict = { "a" : set(["b","c"]),
                "b" : set(["a", "d"]),
                "c" : set(["a", "d"]),
                "d" : set(["e"]),
                "e" : set(["a"])
                }


dfs(gdict, 'a')

當上面的代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果 -

a b d e c

 

廣度第一次遍歷

也稱為寬度優(yōu)先搜索(BFS),該算法遍歷圖的寬度運動,并使用隊列記住在任何迭代中發(fā)生死角時開始搜索的下一個頂點。請訪問我們網(wǎng)站的鏈接,了解BFS圖表步驟的詳細信息。

我們使用之前討論的隊列數(shù)據(jù)結(jié)構(gòu)在python中實現(xiàn)BFS。當我們繼續(xù)訪問相鄰的未訪問節(jié)點并繼續(xù)將其添加到隊列中時。然后,我們開始只出現(xiàn)沒有未訪問節(jié)點的節(jié)點。當沒有下一個相鄰節(jié)點被訪問時,我們停止程序。

import collections
class graph:
    def __init__(self,gdict=None):
        if gdict is None:
            gdict = {}
        self.gdict = gdict

def bfs(graph, startnode):
# Track the visited and unvisited nodes using queue
        seen, queue = set([startnode]), collections.deque([startnode])
        while queue:
            vertex = queue.popleft()
            marked(vertex)
            for node in graph[vertex]:
                if node not in seen:
                    seen.add(node)
                    queue.append(node)

def marked(n):
    print(n)

# The graph dictionary
gdict = { "a" : set(["b","c"]),
                "b" : set(["a", "d"]),
                "c" : set(["a", "d"]),
                "d" : set(["e"]),
                "e" : set(["a"])
                }

bfs(gdict, "a")

當上面的代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果 -

a c b d e

下一節(jié):Python 大O符號

Python 數(shù)據(jù)結(jié)構(gòu)

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频