根據依賴關係排序

2021-08-25 17:00:01 字數 1726 閱讀 3361

就為了盡快實現功能,效能可能不是很好

[[1, 2], [1, 3], [2, 3], [3, none], [3, 4], [4, 5]]

[[1, 2], [1, 3], [2, 3], [3, none], [3, 4], [4, 2]]

[5, 4, 3, 2, 1]

exception: 存在迴圈依賴: [[1, 2], [1, 3], [2, 3], [3, none], [3, 4], [4, 2]]

**如下

def

depend_services_order

(depend_list, already_list=none):

"""按照depend_services為service排序

時間有限,不整啥拓撲排序有向圖了,太磨嘰

1. 不依賴其他項的優先排序

2. 從待排序節點中刪除這些節點

1. 如果不在已排序佇列,並加入已排序佇列,將所有值為none

2. 在已排序佇列,忽略

3. 判斷

1. 已排序佇列長度等於總待排序佇列,遞迴結束

2. 遞迴呼叫1

3. 本輪沒有篩出來節點,但待排序佇列依然有值,則存在迴圈依賴,丟擲異常

parameters

----------

depend_list:list(list)

依賴佇列:[[a, b], [a, c], [b, c], [c, none]]

a依賴bc,b依賴c,c不依賴任何項

already_list:int

已排序好的佇列

returns

-------

"""if already_list is

none:

already_list =

# 當前佇列中所有的節點集合

all_set = set(j for i in depend_list for j in i if j is

notnone)

# 獲取所有依賴了其他節點的節點

depend_set =

# 本輪被篩出來的沒有依賴其他節點的節點

not_depend_set = all_set - depend_set

# 將節點加入已排序佇列

for i in not_depend_set:

if i not

in already_list:

# 本輪篩選完畢,依然剩下的所有節點,並將被曬出來的節點置為none

depend_list = [i if i[1] not

in not_depend_set else [i[0], none] for i in depend_list if i[0] in depend_set]

# 如果本輪沒有篩出來節點,但待排序佇列依然有值,則存在迴圈依賴,丟擲異常

if len(not_depend_set) == 0

and len(depend_list) > 0:

raise exception("存在迴圈依賴: {}".format(depend_list))

elif len(depend_list) == 0:

return already_list

else:

return depend_services_order(depend_list, already_list)

按照依賴關係排序

import copy import utils.functool utils.functool.settimeout timeout 15 def dependsonsort testfunnames,dependrelation 有個問題就是如果出現a依賴b,而b又依賴a就會出現問題 param...

依賴關係 關聯關係

一 依賴關係 a物件作為b物件的區域性變數或是方法形參的,b依賴於a,這時候我們稱a與b之間存在一種依賴關係 給土豪打 物件作為形式引數 void calltuhaowithphone czphone phone void sendmessagetodiaosi 1 什麼是引數依賴 當a物件作為另外...

關聯關係和依賴關係

關聯 一種結構關係,表現為乙個物件能夠獲得另乙個物件的是類引用並呼叫他的服務。關聯 association 表示兩個類之間存在某種語義上的聯絡。例如,乙個人為一家公司工作,一家公司有許多辦公室。我們就認為人和公司 公司和辦公室之間存在某種語義上的聯絡。在分析設計的類圖模型中,則在對應人類和公司類 公...