Для решения этой проблемы вам не нужно networkX
, numpy
может это сделать, если вы понимаете математику за ней. Неориентированный, невзвешенный график всегда может быть представлен матрицей смежности [0,1]. nth
полномочия этой матрицы представляют количество шагов от (i,j)
после n
шагов. Мы можем работать с марковской матрицей, которая является нормированной по строкам формой adj. матрица. Полномочия этой матрицы представляют собой случайное блуждание по графу. Если график невелик, вы можете взять полномочия матрицы и посмотреть на интересующий вас индекс (start, end)
. Сделайте последнее состояние поглощающим, когда прогулка попадает туда, куда он не может убежать. При каждой мощности n
вы получите вероятность того, что вы рассеетесь от (i,j)
. Время удара может быть вычислено из этой функции (как вы знаете точный время удара для дискретных шагов).
Ниже приведен пример с простым графиком, определяемым списком краев. В конце я рисую эту функцию времени удара. В качестве точки отсчета, это график используется:

from numpy import *
hit_idx = (0,4)
# Define a graph by edge list
edges = [[0,1],[1,2],[2,3],[2,4]]
# Create adj. matrix
A = zeros((5,5))
A[zip(*edges)] = 1
# Undirected condition
A += A.T
# Make the final state an absorbing condition
A[hit_idx[1],:] = 0
A[hit_idx[1],hit_idx[1]] = 1
# Make a proper Markov matrix by row normalizing
A = (A.T/A.sum(axis=1)).T
B = A.copy()
Z = []
for n in xrange(100):
Z.append(B[hit_idx])
B = dot(B,A)
from pylab import *
plot(Z)
xlabel("steps")
ylabel("hit probability")
show()

ВАУ. это один классный ответ, который у вас есть. Поэтому я предполагаю, что мне нужно использовать Матрицу Google (или преобразовать мой график в матрицу), прежде чем выполнять алгоритм времени удара? – DjangoRocks
networkX имеет метод pagerank, встроенный в: http://networkx.lanl.gov/reference/algorithms.link_analysis.html – EdChum
@EdChum, поскольку я не совсем точно знаком с алгоритмом pagerank, как это связано со средним временем первого прохода (что я думаю, что OP называет время удара)? Я представил это решение в качестве педагогического упражнения, чтобы помочь любому решить проблему в целом. Пожалуйста, опубликуйте решение networkx, если вы можете показать, что оно решает проблему напрямую, чтобы я мог найти правильный способ ее решения с помощью библиотеки. – Hooked