Thứ tự tôpô tích cực


45

Giả sử tôi có một đồ thị chu kỳ có hướng với trọng số thực trên các đỉnh của nó. Tôi muốn tìm một thứ tự tôpô của DAG, trong đó, với mỗi tiền tố của thứ tự tôpô, tổng các trọng số là không âm. Hoặc nếu bạn thích thuật ngữ lý thuyết theo thứ tự, tôi có một thứ tự từng phần có trọng số và tôi muốn một phần mở rộng tuyến tính sao cho mỗi tiền tố có trọng số không âm. Những gì được biết về vấn đề này? Là NP-đầy đủ hoặc có thể giải được trong thời gian đa thức?


4
Hãy thử thuật toán tham lam trên biểu đồ này: 1 -> 2 -> 3, 1 -> 4 -> 5, trọng số đỉnh là 1: +2, 2: -2, 3: +3, 4: -1 , 5: -2. Thuật toán tham lam sẽ bắt đầu với v1, sau đó chọn v4 và sau đó bị kẹt. Thứ tự đúng là v1, v2, v3, v4, v5.
Robin Kothari

2
"Một số vấn đề về khoảng cách Frechet JeffE và những người khác đã xem xét" - Sự trừu tượng tốt đẹp! Vì lợi ích của người khác, đây là một phiên bản: Giả sử bạn được cung cấp biểu đồ mặt phẳng có trọng số cạnh G và hai đỉnh s và tn mặt ngoài. Bạn muốn chuyển đổi một đường biên từ s sang t sang đường kia bằng một chuỗi các bước cơ bản. Mỗi di chuyển thay thế đường dẫn hiện tại bằng sự khác biệt đối xứng của nó với một số ranh giới khuôn mặt. Làm thế nào nhanh chóng chúng ta có thể tìm thấy chuỗi mve giảm thiểu chiều dài tối đa của con đường phát triển?
Jeffε

3
Tsuyoshi, xin lỗi về điều đó, tôi đã cố gắng thêm một dòng mới trong khi bình luận và nó khiến bình luận của tôi bị cắt đứt. Vì vậy, ý tưởng là, bạn có một chuỗi buộc chặt quanh cổ tay của bạn và bạn muốn biết nếu bạn có thể luồn lách nó. Cổ tay của bạn được biểu diễn dưới dạng một lưới đa giác, các ô trong đó là các phần tử của một thứ tự một phần (gần với chuỗi trước đó, gần hơn về sau theo thứ tự). Trọng lượng của một tế bào là sự khác biệt về độ dài giữa ranh giới bên trong và bên ngoài của nó.
David Eppstein

1
@David: Cảm ơn đã giải thích. Lần này tôi có thể hiểu làm thế nào nó liên quan đến câu hỏi hiện tại, và nó thật thú vị!
Tsuyoshi Ito

3
Một quan sát không hữu ích nhưng thú vị: Vấn đề này tương đương với vấn đề giải trình tự máy đơn với thời hạn và các ràng buộc ưu tiên trong đó thời gian xử lý của mỗi công việc có thể âm . Với thời gian xử lý không âm, vấn đề này nằm ở P (Lawler và Mooer 1969 jstor.org/ sóng / 2628367 ) và nếu một giải pháp tồn tại, thì một giải pháp tồn tại độc lập với thời gian xử lý. Điều này rõ ràng bị phá vỡ nếu một số công việc có thời gian xử lý tiêu cực.
Tsuyoshi Ito

Câu trả lời:


18

Vấn đề này dường như rất giống với TÌM KIẾM TỐI THIỂU TỐI THIỂU CHI PHÍ TỐI THIỂU TỐI ĐA, vấn đề [SS7] ở Garey & Johnson . Để dí dỏm:

NGAY LẬP TỨC: Đặt các nhiệm vụ, thứ tự một phần trên , "chi phí" cho mỗi (nếu , có thể được xem là "lợi nhuận") , và một hằng số .TTc(t)ZtTc(t)<0KZ

CÂU HỎI: Có lịch trình một bộ xử lý cho tuân theo các ràng buộc ưu tiên và có thuộc tính, cho mỗi tác vụ , tổng chi phí cho tất cả các tác vụ với nhiều nhất là ?σTtTtσ(t)σ(t)K

Tôi không chắc chắn cho dù vấn đề vẫn còn NP-đầy đủ khi được cố định 0. G & J đề cập rằng vấn đề vẫn là NP-đầy đủ nếu cho tất cả các .Kc(t){1,0,1}tT


7
Nhìn có vẻ tốt. Sau đó, tôi nghĩ rằng người ta có thể lấy mà không mất tính tổng quát, nếu không, hãy thêm một công việc không giới hạn với -value (hoặc công việc của -value ). K=0cKKc1
daveagp

@mhum: Tôi đang làm một báo cáo kỹ thuật về các kết quả liên quan và muốn trích dẫn bạn. Bạn sẽ cho tôi tên thật của bạn? Nếu bạn muốn bạn có thể gửi email cho tôi, hoặc chỉ ở lại ...
domotorp

9

Vâng, câu trả lời của tôi là câu hỏi của tôi từ đó hóa ra rằng nếu bạn có thể giải quyết vấn đề này trong P, bạn cũng có thể giải quyết một vấn đề mở khác: Thứ tự tôpô tích cực, lấy 3

Chỉnh sửa: Vấn đề này cũng hóa ra là NP-Complete, vì vậy vấn đề của bạn đã hoàn thành NP nếu DAG của bạn chỉ có hai cấp độ, tức là nếu không có đường dẫn có hai cạnh.


3

Nếu tôi hiểu chính xác vấn đề, tôi nghĩ rằng vấn đề lập lịch trình máy đơn ưu tiên đã hạn chế để giảm thiểu tổng thời gian hoàn thành có trọng số (1 | pre | \ sum wc) có thể được giảm xuống thành vấn đề bạn quan tâm. Trong bài toán 1 | pre | \ sum wc, chúng tôi có n công việc, mỗi công việc có trọng số không âm và thời gian xử lý, đặt ra cho các công việc và chúng tôi muốn một phần mở rộng tuyến tính của các công việc sao cho tổng thời gian hoàn thành công việc là giảm thiểu. Các vấn đề là NP-đầy đủ mặc dù chúng tôi giả định rằng thời gian xử lý của mỗi công việc bằng 1. Nó có ý nghĩa gì không?


Đó chắc chắn là một khả năng thú vị. Nhưng làm thế nào để bạn thực hiện việc giảm theo cách mà tiêu chí tối ưu hóa (tối thiểu hóa tổng thời gian hoàn thành) được chuyển thành các ràng buộc (tiền tố không âm)?
David Eppstein

Tôi không biết kết quả hoàn thành NP này của vấn đề lập lịch, nhưng tôi nghĩ rằng nó đề cập đến vấn đề quyết định quyết định liệu có một phần mở rộng tuyến tính sao cho tổng thời gian hoàn thành công việc có trọng số nhiều nhất là K, do đó tôi không nghĩ sự khác biệt giữa một tiêu chí tối ưu hóa và một ràng buộc là rất quan trọng ở đây. Tuy nhiên, tôi chưa hiểu làm thế nào để biểu thị ràng buộc về tổng thời gian hoàn thành có trọng số trong vấn đề hiện tại.
Tsuyoshi Ito

Tôi nghĩ rằng việc giảm không dễ dàng như tôi nghĩ lúc đầu. Tôi không chắc câu trả lời của tôi nữa.
monaldo

Tôi vừa nhận ra một lỗi trong bình luận trước đây của tôi. Khi tôi đăng nó, tôi nghĩ rằng việc thể hiện một ràng buộc đối với tổng không có trọng số là dễ dàng (do đó nhấn mạnh vào trọng số ), nhưng điều đó là hoàn toàn sai.
Tsuyoshi Ito

2

Điều gì xảy ra nếu chúng ta luôn lấy phần tử tối đa (theo thứ tự từng phần) với trọng số nhỏ nhất. Sau khi chúng ta xả hết các phần tử, chúng ta trả chúng theo thứ tự ngược lại là đầu ra.


Vấn đề là bất biến dưới sự biến đổi của việc đảo ngược thứ tự từng phần và phủ định tất cả các trọng số. Vì vậy, tôi không thấy làm thế nào điều này có thể khác với thuật toán tham lam phía trước Robin K đã đưa ra một ví dụ điển hình trong các bình luận.
David Eppstein

Nhưng phương pháp này hoạt động với ví dụ của anh ta: đầu tiên, đỉnh 5 sẽ được chọn, sau đó là đỉnh 4, rồi 3, 2 và cuối cùng là 1. Vì vậy, thứ tự cuối cùng sẽ là 1, 2, 3, 4, 5. Thực tế, tôi không Tôi nghĩ thật khó để chứng minh rằng phương pháp này hiệu quả. Giả sử bạn có một giải pháp không có phần tử tối đa (chìm) trọng lượng tối thiểu ở vị trí cuối cùng. Sau đó, bạn có thể tìm một giải pháp khác có thuộc tính này, đơn giản bằng cách thay đổi vị trí của một phần tử như vậy để tồn tại và bảo toàn phần còn lại như hiện tại. Tiếp tục bằng cách cảm ứng về những gì còn lại, và bạn có được một bằng chứng chính thức.
Daniel Martin

Vâng ... nó không hoạt động ... 1 -> 2 -> 3, 1 -> 4 với các trọng số lần lượt là 4, -7, 6, 3.
Daniel Martin

1

Vấn đề này nhắc nhở tôi rất nhiều cây quyết định. Tôi sẽ xem xét loại giải pháp này, nó luôn cố gắng chọn con đường hứa hẹn nhất, nhưng bằng cách nhìn vào toàn bộ sơ đồ con:

Bắt đầu từ các nút chìm, làm việc theo cách của bạn đối với các nguồn, mỗi lần một cấp. Trong khi bạn làm điều này, cung cấp cho mỗi cạnh một trọng lượng. Trọng lượng này sẽ đại diện cho số tiền tối thiểu bạn sẽ phải "trả" hoặc bạn sẽ "đạt được" bằng cách duyệt qua sơ đồ con bắt đầu từ nút mà các cạnh chỉ đến. Giả sử chúng ta đang ở cấp i + 1 và chúng ta đang tiến lên cấp i. Đây là những gì tôi sẽ làm để gán trọng số cho cạnh chỉ vào nút cấp i:

  1. edge_ weight = trỏ_node_ weight.
  2. Tìm cạnh bắt đầu từ "nút trỏ" với trọng lượng tối đa. Đặt trọng lượng này là next_edge_ weight.
  3. edge_ weight + = next_edge_ weight

Sau đó, xây dựng thứ tự như sau:

  1. Đặt S là biên giới tìm kiếm, tức là tập hợp các nút để chọn tiếp theo.
  2. Chọn nút sao cho (node_ weight + Maximum_edge_ weight) được tối đa hóa.
  3. Xóa nút khỏi biểu đồ và S. Thêm "con" của nút vào S.
  4. Nếu biểu đồ không trống, chuyển sang bước 1.
  5. Tạm dừng lại.

Ý tưởng là đi qua các sơ đồ con sẽ mang lại mức tăng càng nhiều càng tốt trước tiên, để có thể chịu chi phí cho các sơ đồ khối lượng âm sau này.

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.