Hướng dẫn python networkx topological sort - sắp xếp cấu trúc liên kết mạng python
________ 4 (g, nbunch = none, lùi = sai) [nguồn] ¶(G, nbunch=None, reverse=False)[source]¶ Trả về một danh sách các nút theo thứ tự sắp xếp cấu trúc. Một loại tôpô là một hoán vị không liên quan đến các nút sao cho một cạnh từ u đến v ngụ ý rằng u xuất hiện trước v theo thứ tự sắp xếp tôpô.
Ghi chú Thuật toán này dựa trên một mô tả và bằng chứng trong hướng dẫn thiết kế thuật toán [1]. Người giới thiệu
Trả về một máy phát các nút theo thứ tự được sắp xếp về mặt cấu trúc. Một loại tôpô là một hoán vị không liên quan đến các nút của biểu đồ có hướng sao cho một cạnh từ u đến v ngụ ý rằng u xuất hiện trước v theo thứ tự sắp xếp tôpô. Đặt hàng này chỉ hợp lệ nếu biểu đồ không có chu kỳ theo hướng. Một biểu đồ acyclic được định hướng (DAG) Mang lại các nút theo thứ tự sắp xếp tôpô. Raises:NetworkXError:NetworkXErrorLoại tôpô được định nghĩa chỉ cho các biểu đồ có hướng. Nếu đồ thị Nếu Nếu Ghi chú Thuật toán này dựa trên một mô tả và bằng chứng trong phần giới thiệu về các thuật toán: một cách tiếp cận sáng tạo [1]. Người giới thiệu [1]1] Manber, U. (1989). Giới thiệu về thuật toán - một cách tiếp cận sáng tạo. Addison-Wesley. Ví dụ Để có được thứ tự ngược của loại tôpô: >>> DG = nx.DiGraph([(1, 2), (2, 3)]) >>> list(reversed(list(nx.topological_sort(DG)))) [3, 2, 1] Nếu Digraph của bạn một cách tự nhiên có các cạnh đại diện cho các tác vụ/đầu vào và nút đại diện cho con người/quy trình bắt đầu các tác vụ, thì Coppological_sort không hoàn toàn là những gì bạn cần. Bạn sẽ phải thay đổi các nhiệm vụ thành các nút với sự phụ thuộc được phản ánh bởi các cạnh. Kết quả là một loại cấu trúc liên kết của các cạnh. Điều này có thể được thực hiện với >>> list(nx.topological_sort(nx.line_graph(DG))) [(1, 2), (2, 3)]3 như sau: >>> list(nx.topological_sort(nx.line_graph(DG))) [(1, 2), (2, 3)] Tôi đã kiểm tra tập lệnh với dữ liệu trong thế giới thực và vì nó lộn xộn hơn dữ liệu chơi, tôi sẽ không nhận được đầu ra mà tôi thích. Giả sử tôi đã có cái này
vẽ như Mặc dù nhóm hoạt động, chỉ số nhóm bên trong sẽ không. Nó ném
Tôi biết rằng trong dữ liệu, a-> b cũng như b-> a có mặt, do đó lỗi chu kỳ. Ý tưởng đầu tiên của tôi là loại bỏ các dòng trùng lặp, nhưng làm thế nào tôi biết liệu tôi có thể giữ cái này hay cái kia không? Ở phía dưới bên trái, chúng ta thấy: Nếu l-> c và c-> a, tôi đã nhận được các hàng cho c-> l và a-> c cũng như trong dữ liệu. Do đó, sau khi loại bỏ DUP, tôi có thể kết thúc với C-> L và C-> A, nhưng điều tôi muốn là con đường thực của L-> C và C-> a. Nó dường như xác định đường dẫn và chỉ mục từ nó, tôi phải biết đường dẫn trước để loại bỏ DUPS? Điều này có phức tạp hay tôi đang nghĩ quá phức tạp? NB: >>> list(nx.topological_sort(nx.line_graph(DG))) [(1, 2), (2, 3)]4 không làm những gì tôi nghĩ nó sẽ làm.Nó không quan tâm đến con đường, dẫn đến >>> list(nx.topological_sort(nx.line_graph(DG))) [(1, 2), (2, 3)]5 cho phía dưới bên trái, thay vì >>> list(nx.topological_sort(nx.line_graph(DG))) [(1, 2), (2, 3)]6.Nhưng các tài liệu rõ ràng tuyên bố >>> list(nx.topological_sort(nx.line_graph(DG))) [(1, 2), (2, 3)]7 rtfm |