Kiểm tra / Xác định phân loại tô pô


8

Bạn đang đưa ra một tập hợp các Đạo mạch hở đồ thị trên cùng một bộ đỉnh . Bạn cũng được cung cấp một hoán vị của tập hợp các đỉnh . Thuật toán tốt nhất có thể xác định các biểu đồ trong số có là một loại cấu trúc liên kết là gì? Ai đó có thể kiểm tra xem có phải là một loại cấu trúc liên kết của DAG trên trong thời gian tuyến tính không? nG1,G2,...,GnmV(v1,v2,...,vm)G1,G2,...,Gn(v1,v2,...,vm)(v1,v2,...,vm)GV


6
Bạn có thể xây dựng cấu trúc dữ liệu dựa trên tập hợp các biểu đồ trước khi được trình bày theo thứ tự các đỉnh không? Bạn cần xem xét tất cả biểu đồ và tất cả các cạnh theo thứ tự, vì vậy trừ khi bạn được phép xử lý trước biểu đồ bằng cách nào đó, có vẻ như bạn không thể đánh bại thời gian tuyến tính. nm1
mjqxxxx

Hsien-Chih Chang, điều gì sẽ là một kỹ thuật tiền xử lý tốt có thể cho phép một giải pháp tốt hơn? Một số loại băm? Tôi đoán bạn có thể đánh bại thời gian tuyến tính nếu có thể tính gần đúng giải pháp (thuật toán xác suất).
user2471

@ user2471: Như tôi đã nói trong câu trả lời trước của bạn, bài đăng này được viết bởi @Steve, không phải tôi;)
Hsien-Chih Chang

Xin lỗi Hsien-Chih Chang, câu hỏi của tôi dành cho tất cả mọi người :)
user2471

@ user2471, không cần phải xin lỗi! Hy vọng ai đó quen thuộc với câu hỏi này sẽ đăng một câu trả lời hay: D
Hsien-Chih Chang

Câu trả lời:


3

Điều này có thể được thực hiện trong thời gian gần như tuyến tính.

Đặt hoán vị là và đặt là số bước cần thiết để kiểm tra một cạnh so với . Sau đó, đủ để kiểm tra xem mỗi cạnh của có tương thích với , có thể được thực hiện trong thời gian hoặc .π=(v1,,vm)k=k(π)(u,v)πMiGiπO(kMi)O(kMi)

Bằng cách tiền xử lý người ta có thể giảm xuống còn hai lần tra cứu trong một mảng chứa mục nhập mỗi kích thước và so sánh giữa hai mục trong mảng; phần tử mảng chứa chỉ mục của trong được coi là danh sách có thứ tự. Điều này có nghĩa là tổng thời gian mang lại cho giới hạn trên.πkmlogm(log m)a[w]wπk=O(logm)O((logm)Mi)

Như @mjqxxxx chỉ ra, mọi cạnh của mọi đồ thị đều có thể liên quan. Điều này tạo ra giới hạn thấp hơn của các bước , trong đó là số lượng công việc ít nhất cần phải thực hiện cho mỗi cạnh của biểu đồ; có thể một số phương pháp có thể khấu hao chi phí sao cho . Đây vẫn sẽ là , vì vậy không còn nhiều khoảng trống.Ω(KMi)KK=o(logm)Ω(Mi)


Thuật toán nào có thể được sử dụng để tạo k = log m. Có phải là cây hậu tố?
vincent mathew 30/03/2015

0

Phương pháp tầm thường:

GS = {G1,G2...G3}
for v in (v1,v2,...vm)
      remove all graphs from GS where indegree(v) != 0
      remove v and attached edges from remaining GS

Nó không nhanh như bạn muốn. Nhưng nó giải quyết được một vấn đề là "có thể có nhiều thứ tự tôpô hợp lệ của DAG". Và tìm tất cả chúng không phải là một ý tưởng tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.