Nhảy chuyển đến

Topology bài tự

Định nghĩa

Topology bài tự ( Topological sorting ) muốn giải quyết vấn đề là như thế nào cấp một cái có hướng vô hoàn đồ sở hữu tiết điểm bài tự.

Chúng ta có thể lên mặt học mỗi học kỳ bài khóa ví dụ tới miêu tả cái này quá trình, tỷ như học tập đại học chương trình học trung có: “Trình tự thiết kế”, “Thuật toán ngôn ngữ”, “Cao đẳng toán học”, “Ly tán toán học”, “Biên dịch kỹ thuật”, “Bình thường vật lý”, “Số liệu kết cấu”, “Cơ sở dữ liệu hệ thống” chờ. Dựa theo ví dụ trung bài khóa, khi chúng ta muốn học tập “Số liệu kết cấu” thời điểm, liền cần thiết trước học được “Ly tán toán học”, học tập xong môn học này sau liền đạt được học tập “Biên dịch kỹ thuật” trước trí điều kiện. Đương nhiên, “Biên dịch kỹ thuật” còn có một cái càng thêm trước chương trình học “Thuật toán ngôn ngữ”. Này đó chương trình học liền tương đương với mấy cái đỉnh điểm,Đỉnh điểm chi gian có hướng biênLiền tương đương với học tập chương trình học trình tự. Phòng Giáo Vụ an bài này đó chương trình học, khiến cho ở logic quan hệ phù hợp dưới tình huống bài xuất thời khoá biểu, chính là Topology bài tự quá trình.

topo

Nhưng là nếu một ngày nào đó bài khóa lão sư ngủ gà ngủ gật, nói muốn muốn học tập số liệu kết cấu, còn phải trước học thao tác hệ thống, mà thao tác hệ thống trước trí chương trình học lại là số liệu kết cấu, như vậy rốt cuộc hẳn là trước học cái nào ( không suy xét đồng thời học tập tình huống )? Ở chỗ này, số liệu kết cấu cùng thao tác hệ thống gian liền xuất hiện một cái hoàn, hiển nhiên các bạn học hiện tại không có biện pháp biết rõ ràng chính mình yêu cầu trước học cái gì, cũng liền không có biện pháp tiến hành Topology bài tự. Bởi vì nếu có hướng đồ trung tồn tại đường vành đai, như vậy chúng ta liền không có biện pháp tiến hành Topology bài tự.

Bởi vậy chúng ta có thể nói ở một cáiDAG ( có hướng vô hoàn đồ )Trung, chúng ta đem đồ trung đỉnh điểm lấy tuyến tính phương thức tiến hành bài tự, khiến cho đối với bất luận cái gì đỉnh điểmĐếnCó hướng biên,Đều có thể cóPhía trước.

Còn có cấp định một cái DAG, nếu từĐếnCó biên, tắc cho rằngỶ lại với.NếuĐếnCó đường kính (Có thể đạt tới), tắc xưngGián tiếp ỷ lại với.

Topology bài tự mục tiêu là đem sở hữu tiết điểm bài tự, khiến cho xếp hạng phía trước tiết điểm không thể ỷ lại với xếp hạng mặt sau tiết điểm.

AOV võng

Sinh hoạt hằng ngày trung, hạng nhất đại công trình có thể coi như là từ bao nhiêu vóc dáng công trình tạo thành tập hợp, này đó tử công trình chi gian nhất định tồn tại nhất định trước sau trình tự, tức nào đó tử công trình cần thiết ở mặt khác một ít tử công trình hoàn thành sau mới có thể bắt đầu.

Chúng ta dùng có hướng đồ tới biểu hiện tử công trình chi gian trước sau quan hệ, tử công trình chi gian trước sau quan hệ vì có hướng biên, loại này có hướng đồ xưng là đỉnh điểm hoạt động internet, tứcAOV võng (Activity On Vertex Network).Một cái AOV võng nhất định là một cái có hướng vô hoàn đồ, tức không mang theo có đường về. Cùng DAG bất đồng chính là, AOV hoạt động đều tỏ vẻ ở đỉnh điểm thượng. ( mặt trên hình vẽ mẫu tức vì một cái AOV võng )

Ở AOV võng trung, đỉnh điểm tỏ vẻ hoạt động, hình cung tỏ vẻ hoạt động gian ưu tiên quan hệ. AOV võng trung không nên xuất hiện hoàn, như vậy là có thể đủ tìm được một cái đỉnh điểm danh sách, khiến cho mỗi cái đỉnh điểm đại biểu hoạt động đi đầu hoạt động đều xếp hạng nên đỉnh điểm phía trước, như vậy danh sách xưng là Topology danh sách ( một cái AOV võng Topology danh sách không phải duy nhất ), từ AOV võng cấu tạo Topology danh sách quá trình xưng là Topology bài tự. Bởi vậy, Topology bài tự cũng có thể giải thích làm tướng AOV võng trung sở hữu hoạt động xếp thành một cái danh sách, khiến cho mỗi cái hoạt động đi đầu hoạt động đều xếp hạng nên hoạt động phía trước ( một cái AOV võng trung Topology bài tự cũng không phải duy nhất ).

  • Đi đầu hoạt động: Có hướng biên khởi điểm hoạt động xưng là chung điểm đi đầu hoạt động ( chỉ có đương một cái hoạt động đi đầu toàn bộ đều hoàn thành sau, cái này hoạt động mới có thể tiến hành ).

  • Nối nghiệp hoạt động: Có hướng biên chung điểm hoạt động xưng là khởi điểm nối nghiệp hoạt động.

Kiểm tra đo lường AOV võng trung hay không mang hoàn phương thức là cấu tạo Topology danh sách, xem hay không bao hàm sở hữu đỉnh điểm.

Cấu tạo Topology danh sách bước đi

  1. Từ đồ trúng tuyển chọn một cái nhập độ bằng không điểm.
  2. Phát ra nên đỉnh điểm, từ đồ trung xóa bỏ này đỉnh điểm và sở hữu ra biên.

Lặp lại mặt trên hai bước, thẳng đến sở hữu đỉnh điểm đều phát ra, Topology bài tự hoàn thành, hoặc là đồ trung không tồn tại nhập độ bằng không điểm, lúc này thuyết minh đồ là có hoàn đồ, Topology bài tự vô pháp hoàn thành, lâm vào chết khóa.

Mấu chốt đường nhỏ cùng AOE võng

Cùng AOV võng đối ứng chính làAOE võng ( Activity On Edge Network)Tức biên tỏ vẻ hoạt động võng. AOE võng là một cái mang quyền có hướng vô hoàn đồ, trong đó, đỉnh điểm tỏ vẻ sự kiện, hình cung tỏ vẻ hoạt động liên tục thời gian. Thông thường, AOE võng có thể dùng để tính ra công trình hoàn thành thời gian. AOE võng hẳn là vô hoàn, thả tồn tại duy nhất nhập độ bằng không lúc đầu đỉnh điểm ( nguyên điểm ), cùng với duy nhất ra độ bằng không hoàn thành đỉnh điểm ( hối điểm ).

topo

AOE võng trung có chút hoạt động là có thể song hành tiến hành, cho nên hoàn thành toàn bộ công trình ngắn nhất thời gian là từ bắt đầu điểm đến hoàn thành điểm dài nhất hoạt động đường nhỏ chiều dài ( nơi này theo như lời đường nhỏ chiều dài là chỉ đường nhỏ thượng các hoạt động liên tục thời gian chi cùng, tức hình cung quyền giá trị chi cùng, không phải đường nhỏ thượng hình cung số lượng ). Bởi vì hạng nhất công trình yêu cầu hoàn thành sở hữu công trình nội hoạt động, cho nên dài nhất hoạt động đường nhỏ cũng là mấu chốt đường nhỏ, nó quyết định công trình hoàn thành tổng thời gian.

AOE võng tương quan cơ bản khái niệm

  • Hoạt động: AOE võng trung, hình cung tỏ vẻ hoạt động. Hình cung quyền giá trị tỏ vẻ hoạt động liên tục thời gian, hoạt động ở này đi đầu sự kiện ( tức nên hình cung khởi điểm ) bị kích phát sau bắt đầu.

  • Sự kiện: AOE võng trung, đỉnh điểm tỏ vẻ sự kiện, sự kiện ở nó sở hữu đi đầu hoạt động ( tức chỉ hướng nên biên hình cung ) toàn bộ hoàn thành bị kích phát.

  • Sự kiện ( đỉnh điểm )Sớm nhất phát sinh thời gian: Nên sự kiện sớm nhất khả năng phát sinh thời gian, nhớ vì,Nó quyết định lấy nên đỉnh điểm bắt đầu hoạt động sớm nhất phát sinh thời gian, hiển nhiên nguyên điểm sớm nhất phát sinh thời gian vì 0, bởi vì sự kiện phát sinh yêu cầu này sở hữu đi đầu hoạt động toàn bộ hoàn thành, cho nên nó tương đương mới bắt đầu điểm đến nên đỉnh điểm đường nhỏ chiều dài cực đại, viết thành đệ đẩy:,Trong đóTỏ vẻ j đến i biên quyền giá trị ( tức j đến i hoạt động liên tục thời gian ),Tỏ vẻ i sở hữu đi đầu sự kiện tập hợp.

  • Sự kiện ( đỉnh điểm )Nhất muộn phát sinh thời gian: Ở không chậm lại toàn bộ kỳ hạn công trình tiền đề hạ, nên sự kiện nhất vãn có thể chịu đựng phát sinh thời gian, nhớ vì,Nó quyết định sở hữu lấy nên trạng thái kết thúc hoạt động nhất muộn phát sinh thời gian, nó tương đương sự kiện sở hữu nối nghiệp hoạt động nhất muộn bắt đầu thời gian nhỏ nhất giá trị, tức,Trong đóTỏ vẻ i đến j biên quyền giá trị ( tức i đến j hoạt động liên tục thời gian ),Tỏ vẻ i sở hữu sau đuổi sự kiện tập hợp.

  • Hoạt động ( hình cung )Sớm nhất bắt đầu thời gian: Nên hoạt động sớm nhất khả năng phát sinh thời gian, nhớ vì,Hiển nhiên, nó tương đương này đi đầu sự kiện sớm nhất phát sinh thời gian, tức.

  • Hoạt động ( hình cung )Nhất muộn bắt đầu thời gian: Ở không chậm lại toàn bộ kỳ hạn công trình tiền đề hạ, hoạt động bắt đầu nhất vãn có thể chịu đựng thời gian, nhớ vì,Nó tương đương sau đó vợ kế kiện nhất muộn phát sinh thời gian - nên sự kiện liên tục thời gian ( quyền giá trị ), tức,Trong đóTỏ vẻ u đến v biên quyền giá trị ( tức u đến v hoạt động liên tục thời gian ).

  • Mấu chốt đường nhỏ: AOE võng trung từ nguyên điểm đến hối điểm dài nhất đường nhỏ chiều dài.

  • Mấu chốt hoạt động: Tức mấu chốt đường nhỏ thượng hoạt động, nó sớm nhất bắt đầu thời gian cùng nhất muộn bắt đầu thời gian bằng nhau.

Đệ tìm hiểu sớm nhất cùng nhất muộn phát sinh thời gian

Ấn Topology trình tự cầu, sớm nhất phát sinh thời gian từ trước sau này đệ đẩy, nhất muộn phát sinh thời gian từ sau đi phía trước đệ đẩy, đệ đẩy công thức như trênAOE võng tương quan cơ bản khái niệmSở kỳ.

Kahn thuật toán

Quá trình

Mới bắt đầu trạng thái hạ, tập hợpTrang sở hữu nhập độ vìĐiểm,Là một cái không danh sách.

Mỗi lần từTrung lấy ra một cái điểm( có thể tùy tiện lấy ) để vào,Sau đó đemSở hữu biênXóa bỏ. Đối với biên,Nếu đem nên biên xóa bỏ sau điểmNhập độ biến thành,Tắc đemĐể vàoTrung.

Không ngừng lặp lại trở lên quá trình, thẳng đến tập hợpVì không. Kiểm tra đồ trung hay không tồn tại bất luận cái gì biên, nếu có, như vậy cái này đồ nhất định có đường vành đai, nếu không phản hồi,Trung đỉnh điểm trình tự chính là cấu tạo Topology danh sách kết quả.

Đầu tiên xem ra tựWikipediaNgụy số hiệu

Thực hiện
1
2
3
4
5
6
7
8
9
10
11
12
13
L ← Empty list that will contain the sorted elements
S ← Set of all nodes with no incoming edges
while S is not empty do
remove a node n from S
insert n into L
for each node m with an edge e from n to m do
remove edge e from the graph
if m has no other incoming edges then
insert m into S
if graph has edges then
return error (graph has at least one cycle)
else
return L (a topologically sorted order)

Số hiệu trung tâm là duy trì một cái nhập độ vì 0 đỉnh điểm tập hợp.

Có thể tham khảo nên đồ

topo

Đối này bài tự kết quả chính là: 2 -> 8 -> 0 -> 3 -> 7 -> 1 -> 5 -> 6 -> 9 -> 4 -> 11 -> 10 -> 12

Thời gian phức tạp độ

Giả thiết cái này đồỞ khởi động lại nhập độ vìTập hợpThời điểm liền yêu cầu biến lịch toàn bộ đồ, cũng kiểm tra mỗi một cái biên, cho nên cóPhức tạp độ. Sau đó đối nên tập hợp tiến hành thao tác, hiển nhiên cũng là yêu cầuThời gian phức tạp độ.

Cho nên tổng thời gian phức tạp độ liền có

Thực hiện

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
intn,m;
vectorint>G[MAXN];
intin[MAXN];// tồn trữ mỗi cái giao điểm nhập độ

booltoposort(){
vectorint>L;
queueint>S;
for(inti=1;in;i++)
if(in[i]==0)S.push(i);
while(!S.empty()){
intu=S.front();
S.pop();
L.push_back(u);
for(autov:G[u]){
if(--in[v]==0){
S.push(v);
}
}
}
if(L.size()==n){
for(autoi:L)couti' ';
returntrue;
}
returnfalse;
}

DFS thuật toán

Thực hiện

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
usingGraph=vectorvectorint>>;// sát nhau biểu

structTopoSort{
enumclassStatus:uint8_t{to_visit,visiting,visited};

constGraph&graph;
constintn;
vectorStatus>status;
vectorint>order;
vectorint>::reverse_iteratorit;

TopoSort(constGraph&graph)
:graph(graph),
n(graph.size()),
status(n,Status::to_visit),
order(n),
it(order.rbegin()){}

boolsort(){
for(inti=0;in;++i){
if(status[i]==Status::to_visit&&!dfs(i))returnfalse;
}
returntrue;
}

booldfs(constintu){
status[u]=Status::visiting;
for(constintv:graph[u]){
if(status[v]==Status::visiting)returnfalse;
if(status[v]==Status::to_visit&&!dfs(v))returnfalse;
}
status[u]=Status::visited;
*it++=u;
returntrue;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
fromenumimportEnum,auto


classStatus(Enum):
to_visit=auto()
visiting=auto()
visited=auto()


deftopo_sort(graph:list[list[int]])->list[int]|None:
n=len(graph)
status=[Status.to_visit]*n
order=[]

defdfs(u:int)->bool:
status[u]=Status.visiting
forvingraph[u]:
ifstatus[v]==Status.visiting:
returnFalse
ifstatus[v]==Status.to_visitandnotdfs(v):
returnFalse
status[u]=Status.visited
order.append(u)
returnTrue

foriinrange(n):
ifstatus[i]==Status.to_visitandnotdfs(i):
returnNone

returnorder[::-1]

Thời gian phức tạp độ:Không gian phức tạp độ:

Hợp lý tính chứng minh

Suy xét một cái đồ, xóa rớt nào đó nhập độ vìTiết điểm lúc sau, nếu tân đồ có thể Topology bài tự, như vậy nguyên đồ nhất định cũng có thể. Trái lại, nếu nguyên đồ có thể Topology bài tự, như vậy xóa rớt sau cũng có thể.

Ứng dụng

Topology bài tự có thể phán đoán đồ trung hay không có hoàn, còn có thể dùng để phán đoán đồ hay không là một cái liên. Topology bài tự có thể dùng để cầu AOE võng trung mấu chốt đường nhỏ, tính ra công trình hoàn thành ngắn nhất thời gian.

Cầu từ điển tự lớn nhất / nhỏ nhất Topology bài tự

Đem Kahn thuật toán trung đội ngũ thay đổi thành lớn nhất đôi / nhỏ nhất đôi thực hiện ưu tiên đội ngũ có thể, lúc này tổng thời gian phức tạp độ vì.

Bài tập

CF 1385E:Yêu cầu thông qua Topology bài tự cấu tạo.

Luogu P1347:Topology bài tự khuôn mẫu.

Tham khảo

  1. Ly tán toán học và ứng dụng. ISBN:9787111555391
  2. https://blog.csdn.net/dm_vincent/article/details/7714519
  3. Topological sorting,https://en.wikipedia.org/w/index.php?title=Topological_sorting&oldid=854351542
  4. https://blog.csdn.net/time_money/article/details/109857779
  5. https://zhuanlan.zhihu /p/164751109