Shalmoli Gupta đã giải thích rằng vấn đề chung là NP-Hard, vì vậy tôi quyết định điều tra xem có trường hợp đặc biệt nào có thể giải quyết được đa thức hay không. Cuối cùng, tôi đã tìm thấy một giải pháp cho trường hợp đặc biệt của các tập hợp đại diện cho một cây, hay nói chung hơn là một chuỗi song song theo thứ tự tập hợp con với tất cả các tập hợp không khớp nhau.
Một thuộc tính làm cho mọi thứ dễ dàng hơn là nếu danh sách các bộ được đóng dưới giao lộ. Nếu , thì có một thứ tự tối ưu trong đó s 1 xuất hiện trước s 2s1⊆s2s1s2 . Chúng ta có thể giả sử WLOG rằng thứ tự tối ưu là một phần mở rộng tuyến tính của thứ tự từng phần được đưa ra bởi sự bao gồm tập hợp con.
Vì tất cả các tập hợp con của một tập hợp xuất hiện trước nó theo thứ tự, điều này có nghĩa là số tiền được thêm vào tổng chạy bởi một tập đã cho là cố định, bất kể nó xuất hiện ở đâu. Nếu là danh sách các bộ, sau đó các chi phí gia tăng của một bộ là số phần tử trong s không có trong bất kỳ tập hợp con của s xuất hiện trong S . Nếu cùng một bộ xuất hiện nhiều lần trong SSSS , chúng ta có thể tùy ý chọn một để đi trước và để cho các bộ khác có giá 0.
Điều này có nghĩa là vấn đề này tương đương với vấn đề thời gian hoàn thành có trọng số tối thiểu trong lập lịch máy đơn với các ràng buộc ưu tiên. Trong vấn đề này, với một tập hợp các công việc có trọng số và lần t j , và một đơn hàng một phần cho các công việc P , chúng tôi muốn tìm một thứ tự các công việc giảm thiểu tổng thời gian hoàn thành có trọng số, nghĩa làwjtjP
∑ni=1wji(∑ik=1tjk)
chịu sự ràng buộc ưu tiên . Có thể biến vấn đề tập hợp tích lũy tối thiểu với các tập đóng giao nhau bằng cách tạo một công việc cho mỗi tập hợp, trong đó mọi công việc có trọng số 1, thời gian bằng với chi phí gia tăng được xác định ở trên và P là thứ tự được đưa ra bởi sự bao gồm tập hợp con.PP
Hóa ra, vấn đề này cũng là NP-Hard cho nói chung . Tuy nhiên, một số dạng P đặc biệt có thể được giải trong thời gian đa thức.PP
Bài viết này đưa ra thuật toán cho trường hợp các đơn hàng song song chuỗi P (bao gồm cả trường hợp quan trọng của cây). Thật không may, tôi không thể truy cập vào bài báo đó, vì vậy tôi quyết định thử phát minh lại nó một cách độc lập. Đây là những gì tôi nghĩ ra.O(nlogn)P
Để giải quyết vấn đề này, một số quan sát được yêu cầu.
Trước hết, trong trường hợp không có bất kỳ ràng buộc ưu tiên nào, giải pháp tối ưu là chỉ cần sắp xếp các công việc theo thứ tự tăng . Để đơn giản, tôi sẽ coi đây là giá trị của công việc, viết tắt làv(j). Lưu ý rằng vì sắp xếp làO(nlogn), không thể làm tốt hơn sự phức tạp này.tjwjv(j)O(nlogn)
Quy tắc 1 Đặt và b là các công việc sao cho a < b ∈ P và b bao gồm a. Nếu v ( a ) < v ( b ) , thì chúng ta có thể bỏ ràng buộc a < b mà không ảnh hưởng đến thứ tự tối ưu hoặc giá trị khách quan.aba<b∈Pv(a)<v(b)a<b
Giả sử xuất hiện trước aba thứ tự tối ưu của bài toán thư giãn. Vì b bao phủ một ban đầu, điều đó có nghĩa là tất cả các công việc giữa b và a theo thứ tự mới là không thể so sánh với a và b. Nhưng vì b có giá trị cao hơn a, chúng ta có thể giảm giá trị khách quan bằng cách hoán đổi b và a, mâu thuẫn.
Tương tự như vậy, chúng ta có thể loại bỏ các ràng buộc trong trường hợp miễn là chúng ta đảm bảo rằng sau khi sắp xếp theo giá trị, chúng ta phá vỡ các mối quan hệ bằng cách tham khảo các quan hệ ưu tiên của vấn đề ban đầu (đơn giản hóa). Điều này đảm bảo rằng giải pháp tối ưu được tìm thấy cho vấn đề thư giãn cũng là một giải pháp tối ưu cho vấn đề ban đầu.v(a)=v(b)
Do đó, bất cứ khi nào b bao gồm a và , chúng ta có thể đơn giản hóa vấn đề bằng cách thả các hạn chế một < bv(a)≤v(b)a<b .
Quy tắc 2 Giả sử rằng chúng ta biết rằng b tuân theo ngay sau một giải pháp tối ưu. Chúng ta có thể hợp nhất a và b vào một nút c mới với và t c = t a + t b , trong khi ký hợp đồng với vị trí P một cách thích hợp.wc=wa+wbtc=ta+tbP
Giá trị mục tiêu tối ưu của vấn đề mới khác với hằng số so với giá trị mục tiêu ban đầu (cụ thể là ), tuy nhiên hằng số này không phụ thuộc vào thứ tự và do đó thứ tự tối ưu không bị ảnh hưởng. Chúng ta có thể phục hồi một giải pháp tối ưu cho vấn đề cũ bằng cách lấy một giải pháp tối ưu cho vấn đề mới và thay thế c bằng một b .watbcab
Quy tắc 3 Giả sử rằng trong một giải pháp tối ưu cho một trường hợp vấn đề, xuất hiện ngay trước b và v ( a ) > v ( b ) . Bây giờ, giả sử chúng ta tạo một trường hợp vấn đề lớn hơn bằng cách thêm các công việc mới với vị trí mới được hình thành từ chuỗi hoặc thành phần song song với bản gốc. Sẽ luôn có một giải pháp tối ưu cho vấn đề lớn hơn, trong đó a xuất hiện ngay trước babv(a)>v(b)ab .
Giả sử khác đi. Hãy giải pháp tối ưu chứa . Vì P được hình thành bởi thành phần song song nối tiếp, chúng ta biết rằng tất cả các x i đều không thể so sánh được với a và b . Hợp nhất tất cả các nút x i vào một nút mới x ′ bằng quy tắc 2. Bây giờ hãy xem xét v ( x ′ ) . Nếu v ( x ′ ) ≤ v ( a ) thì chúng ta có thể trao đổia,x1,x2,…,bPxiabxix′v(x′)v(x′)≤v(a) và a mà không tăng giá trị khách quan. Tương tự như vậy, nếu v ( x ′ ) ≥ v ( b ) , chúng ta có thể hoán đổi x ′ và b . Do đó, v ( a ) < v ( x ′ ) < v ( b ) . Nhưng v ( a ) > v ( b ) , một mâu thuẫn.x′av(x′)≥v(b)x′bv(a)<v(x′)<v(b)v(a)>v(b)
Sử dụng quy tắc 2 và quy tắc 3, chúng ta đã có thể có được thuật toán đơn giản nhưng không tối ưu . Vì P là một thứ tự song song sê-ri, giả sử đầu vào chứa một biểu diễn cây của P trong đó mỗi nút đại diện cho thành phần chuỗi hoặc thành phần song song và các lá là các công việc riêng lẻ. Chúng ta có thể tìm ra một giải pháp tối ưu với việc sắp xếp trước của cây bằng cách duy trì bất biến rằng giải pháp tối ưu cho mỗi bài toán con là một chuỗi theo thứ tự giá trị tăng dần.O(n2)PP
Giả sử là thành phần chuỗi của các bài toán con với các tập hợp P 1 và P 2 . Hãy để các giải pháp tối ưu được đặt hàng C 1 và C 2 . Giải pháp tối ưu cho P rõ ràng là nối các chuỗi này. Tuy nhiên, có thể công việc đầu tiên trong C 2 có giá trị thấp hơn công việc cuối cùng trong C 1PP1P2C1C2PC2C1 . Để duy trì bất biến rằng giải pháp là một chuỗi được sắp xếp, chúng tôi sử dụng quy tắc 3 + quy tắc 2 để hợp nhất các điểm cuối miễn là chúng không theo thứ tự được sắp xếp.
Nếu thay vào đó là một thành phần song song, chúng ta chỉ cần lấy các chuỗi được sắp xếp S 1 và S 2 và hợp nhất chúng thành một chuỗi được sắp xếp mới. Nhờ sự bất biến, điều này là hợp lệ.PS1S2
Thật không may, thuật toán này là . Để có được thuật toán O ( n l o g n ) , chúng ta cần tính toán các chuỗi một cách lười biếng bằng cách sử dụng quy tắc 1.O(n2)O(nlogn)
Cụ thể, nếu một bài toán con chỉ chứa các nút trong đó các ràng buộc ưu tiên giống như thứ tự của các giá trị, thì chúng ta có thể quên hoàn toàn các ràng buộc ưu tiên và chỉ nhìn vào các giá trị. Điều này được đảm bảo bởi cùng một bất biến đảm bảo các giải pháp được sắp xếp chuỗi trong thuật toán trước.
Thay vì tính toán một chuỗi được sắp xếp cho mỗi bài toán con, chúng tôi trình bày giải pháp tối ưu cho một bài toán con dưới dạng một cặp đống Fibonacci, một đống tối thiểu và một đống tối đa, cả hai đều chứa tất cả các công việc trong bài toán con. Điều này có nghĩa là chúng ta có thể bật ra phần tử tối thiểu hoặc tối đa của giải pháp trong thời gian logarit.
Như trước đây, chúng tôi thực hiện một giao dịch đặt hàng trước. Trong đó là một thành phần chuỗi, chúng tôi kiểm tra công việc tối đa của cặp heap đầu tiên và công việc tối thiểu của cặp heap thứ hai. Nếu các giá trị của chúng không theo thứ tự, chúng tôi sẽ tắt chúng và hợp nhất chúng bằng quy tắc 2 và 3. Sau đó, chúng tôi so sánh công việc mới được tạo với các điểm cuối mới và tiếp tục bật và hợp nhất miễn là chúng không theo thứ tự. Khi các điểm cuối không còn có giá trị thứ tự, chúng ta có thể quên một cách an toàn các hạn chế ưu tiên chuỗi nhờ quy tắc 1. Sau đó, chúng ta chỉ cần đẩy các công việc mới được tạo nếu có vào một đống, sau đó hợp nhất các đống để tạo cặp heap đại diện cho giải pháp để P chính nó.PP
Đối với một thành phần song song, chúng ta chỉ cần hợp nhất các cặp heap. Heap min mới là sự hợp nhất của heap min từ mỗi bài toán con và tương tự như vậy với heap tối đa. Lưu ý rằng các đống Fibonacci có thể được hợp nhất trong thời gian không đổi.
Khi chúng ta có một cặp heap đại diện cho giải pháp cho toàn bộ vấn đề, chúng ta có thể tìm thấy thứ tự giải pháp thực tế bằng cách bật ra heap min cho đến khi nó trống. Sau đó, chúng tôi hoàn tác tất cả các thay thế quy tắc 2 để có được giải pháp cho vấn đề ban đầu.
O(nlogn)