我的數據如下所示:查找圖表所有可能的路徑與時間約束
source target
time
0.5 96253 94861
1.0 96652 95091
1.5 94861 95091
2.5 95091 95409
3.5 95409 97221
4.5 97221 96781
5.5 96781 97707
6.5 97707 98191
7.5 98191 99096
8.5 99096 100016
8.5 99096 100013
9.5 100013 98663
9.5 100016 98658
10.5 98658 99573
10.5 98663 99589
11.5 99589 100506
11.5 99573 100490
- 內
source
和target
列每個整數引用一個點。 - 每一行都是兩個點之間的鏈接。
time
索引是指可以找到鏈接的時間點。
一個聰明的算法是找到包含在數據集內的所有可能的軌跡。
例如在前面的例子中,4個軌跡存在:
[96253, 94861, 95091, 95409, 97221, 97221, 96781, 97707, 98191, 99096, 100016, 98658, 99573, 100490]
[96652, 95091, 95409, 97221, 97221, 96781, 97707, 98191, 99096, 100016, 98658, 99573, 100490]
[96253, 94861, 95091, 95409, 97221, 97221, 96781, 97707, 98191, 99096, 100013, 98663, 99589, 100506]
[96652, 95091, 95409, 97221, 97221, 96781, 97707, 98191, 99096, 100013, 98663, 99589, 100506]
此問題就可以恢復爲圖形理論問題。請參見下圖,它與開始時顯示的數據相對應。
的想法是要找到在該圖所有可能的路徑與約束尊重時間的邏輯:一個軌跡的點(節點)的有序列表,它只能從t
去t+1
(不能過去)。
該算法將在Python中實現。因此,任何Python技巧都是允許的:-)
這是不完全清楚,我的軌跡是如何建立起來的,即例如,爲什麼95091連接到94861,95409和96652。另外,你有沒有去寫一些算法和編碼?如果是這樣,請發佈您的代碼。另外,如果你還沒有看過這個庫,我建議你看看:https://www.udacity.com/wiki/creating-network-graphs-with-python –
源數據集來自一個軟件( TrackMate插件爲斐濟)在一個獨特的軌道內,混合不同的拆分和合並事件。這就是爲什麼一個點可以在未來有兩個點。這是因爲這個單點實際上是兩個點。這足夠清楚了嗎? – HadiM