Q
打印度和
1
A
回答
1
爲每個節點維護一個散列表並將其初始化爲零。做BFS的時候,當你碰到一個與當前頂點增量值相鄰的頂點(即正被命中)的哈希表中的一個頂點時,一個頂點的入度就是頂點的頂點度。對於頂級度來說,做同樣的事情(也就是說,當你有節點連接到它時,它的值增加1並迭代(BFS))。
6
注:爲簡潔起見,我用「O」代替theta。
不需要BFS。
如果鄰接表中包含一個有向邊的列表,則維護兩個頂點數映射,一個用於in-degrees,另一個用於out-degrees。每個頂點應該初始映射爲零。然後遍歷每個邊,u,v
並增加out-degree(u)和in-degree(v)。迭代遍歷所有邊後,可以遍歷每個頂點,並從映射中打印結果。迭代遍歷每個邊是O(m),遍歷每個頂點(一次初始化映射,一次實際打印它們)是O(n)。他們的總和是O(m + n)。
示例代碼:
#python-ish, untested
V = set([1,2,3,4,5])
#{(u,v}
E = set([(1,2),(1,3),(2,3)])
in_degree_count = {}
out_degree_count = {}
#initialize the mappings to 0
#O(n)
for u in V:
in_degree_count[u] = 0
out_degree_count[u] = 0
#iterate through each edge, incrementing the respective mappings for u,v
#O(m)
for u,v in E:
out_degree_count[u] += 1
in_degree_count[v] += 1
#iterate through each vertex to print them
#O(n)
for u in V:
print 'out_degree({0}):'.format(u), out_degree_count[u]
print 'in_degree({0}):'.format(u), in_degree_count[u]
可以使用了頂點計數映射關係的關聯圖。如果你使用hashmap,你會得到一個分攤的恆定時間操作,並且它不會影響整個算法的複雜性。但是,如果您知道頂點處於沒有間隙的範圍內,例如[1,n],則可以使用計數數組,其索引代表具有其值的頂點。所以:
in_degrees = [0] * (n + 1) #array/list of zeros, of size n,
# index 0 is disregarded since there is no vertex named 0
in_degree[1] = 0 # will mean that vertex `1` has an in-degree of zero.
etc.
這顯然是給你一定的時間映射操作。
+0
這是一個非常有效的答案,如果你已經正確地維護了你的數據結構,就不需要在圖上做一個BFS – AnkitSablok
相關問題
- 1. 打印圖像打印灰度圖像
- 2. wkhtmltopdf:打印機不打印灰度
- 3. Firefox濾鏡灰度和打印
- 4. 錯誤的寬度和打印模式
- 5. 從sed和awk打印詳細進度
- 6. 打印和will_paginate
- 7. 打印和UnicodeEncodeError
- 8. 同步pdf打印和標準打印
- 9. 打印預覽和打印在wpf
- 10. Pipsta打印機和打印列表
- 11. 斑馬打印機和法國打印
- 12. 打印機和打印對話框
- 13. JavaFX和打印愛普生打印機
- 14. c打印陣列長度
- 15. 幀高度打印0
- 16. 打印長度爲k
- 17. Android NV21灰度打印
- 18. 在Java中打印高度
- 19. 帶刻度打印的SVG
- 20. 更改打印透明度
- 21. Windbg:打破定時器/調度程序中斷和打印EIP
- 22. 打印長度可變寬度
- 23. 以精確度打印雙精度
- 24. 如何在打印時使寬度和高度均爲100%
- 25. 打印零寬度和高度個性在bash
- 26. 父母div跨度和子div跨度中的打印變量?
- 27. 在Python中打印雙精度指數的格式化打印
- 28. 打印鍵和List
- 29. CSS列和打印
- 30. 如何獲得在300 dpi標籤打印機上打印的文本的高度和寬度?
這聽起來像一個家庭作業問題。我的提示:嘗試修改BFS樹生成算法。具體來說,你如何處理每個節點已經找到的邊。 – imallett
除非知道所有頂點v,例如'in_degree(v)= 0',否則BFS樹將不起作用。 – didierc
並順便說一句OP想要一個算法,使用鄰接列表,我認爲BFS使用鄰接矩陣(如果我沒有錯)? –