我寫了一些**,在樹狀流網路中找到給定範圍上游的所有路徑。例如,如果我表示以下網路:4 -- 5 -- 8
2 --- 6 - 9 -- 10
1 -- 11
3 ----7
作為一組父子對:
^$它將返回節點上游的所有路徑,例如:get_paths(h, 1) # edited, had 11 instead of 1 in before
[[reach(2), reach(6), reach(9), reach(11)], [reach(2), reach(6), reach(9), reach(10)], [reach(2), reach(4), reach(5), reach(8)], [reach(3), reach(7)]]
**包含在下面。在
我的問題是:我把這個應用到乙個非常大的地區(例如新英格蘭)的每乙個河段,任何乙個河段都可能有數百萬條路徑。可能沒有辦法避免這是乙個非常長的操作,但是有沒有一種python式的方法來執行這個操作,這樣每次執行都不會生成新的路徑?在
例如,如果我執行get_paths(h,2)並且找到了從2開始的所有上游路徑,那麼以後是否可以執行get_paths(h,1),而不重新追蹤2中的所有路徑?在import collections
# object representing a stream reach. used to construct a hierarchy for accumulation function
class reach(object):
def __init__(self):
self.name = none
self.ds = none
self.us = set()
def __repr__(self):
return "reach({})".format(self.name)
def build_hierarchy(flows):
hierarchy = collections.defaultdict(lambda: reach())
for reach_id, parent in flows:
if reach_id:
hierarchy[reach_id].name = reach_id
hierarchy[parent].name = parent
hierarchy[reach_id].ds = hierarchy[parent]
hierarchy[parent].us.add(hierarchy[reach_id])
return hierarchy
def get_paths(h, start_node):
def go_up(n):
if not h[n].us:
for us in h[n].us:
go_up(us.name)
if current_path:
current_path.pop()
paths =
current_path =
go_up(start_node)
return paths
test_tree =
h = build_hierarchy(test_tree)
p = get_paths(h, 1)
幾周前,我問了乙個類似的問題,關於在乙個網路中尋找「所有」上游河段,得到了乙個非常快的極好答案:class node(object):
def __init__(self):
self.name = none
self.parent = none
self.children = set()
self._upstream = set()
def __repr__(self):
return "node({})".format(self.name)
@property
def upstream(self):
if self._upstream:
return self._upstream
else:
for child in self.children:
self._upstream.add(child)
self._upstream |= child.upstream
return self._upstream
import collections
edges =
nodes = collections.defaultdict(lambda: node())
for node, parent in edges:
nodes[node].name = node
nodes[parent].name = parent
nodes[node].parent = nodes[parent]
nodes[parent].children.add(nodes[node])
我注意到這段**的def upstream():部分按順序新增上游節點,但由於它是乙個迭代函式,所以我找不到乙個好的方法將它們追加到單個列表中。也許有一種方法可以修改此**以保持順序。在
python尋路 A 尋路演算法 python實現
coding utf 8 import math import cv2 as cv class point object def init self,position,parent self.position position self.parent parent self.f 0 self.g 0...
python尋路 Python版的A 尋路演算法
關閉 致敬愛的及本站會員的一封信 作為碼農集市 coder100 平台的站長,我不得已採取這樣的方式來和各位來到我們平台逛逛的小伙們做一次推心置腹的暢談。真誠的希望您能夠抽出寶貴的一點時間認真閱讀以下我所闡述的內容,以此讓我們彼此之間能夠達成一定的共識,這樣對於彼此非常重要!為了讓我的闡述更加的直白...
python迷宮尋路 迷宮尋路問題 A 演算法
迷宮尋路問題 a 演算法 迷宮尋路問題是人工智慧中的有趣問題,如何表示狀態空間和搜尋路徑是尋路問題的重點,本文的主要內容是a 搜尋演算法的理解和應用,首先對基本知識和演算法思想進行了解,再通過其對迷宮問題求解應用,編寫 python 程式進行深入學習。1.搜尋區域 我們假設某個人要從 start 點...