Tách số với chênh lệch tối thiểu


7

Cho là một số nguyên dương nvà số nguyên a1,b1,,an,bn với aibi cho mỗi i. Sự phức tạp của việc quyết định xem có tồn tại số nguyên khôngc1,,cn như vậy mà aicibi cho tất cả i|cicj|2 cho tất cả i,j?

Những gì có thể được quan sát là một thuật toán tham lam, trong đó chúng tôi giả định rằng a1an và lựa chọn citheo thứ tự này, không nhất thiết phải làm việc. Ví dụ, chúng ta có thể cóa1=1,b1=4,a2=b2=2. Đặtc1=1 không hoạt động (nó không còn chỗ cho c2), nhưng những gì hoạt động được đặt c1=4c2=2. Có phải vấn đề có lẽ là NP-hard?


1
Bạn đã xem xét lập trình động?
John L.

Đúng. Vấn đề là chúng ta không biết thứ tự củaciVì vậy, vì vậy chúng tôi không thể lưu trữ, ví dụ: giải pháp "tốt nhất" bằng cách sử dụng c1,,ckở phía bên tay trái.
pi66

Bạn có thể thêm một tài liệu tham khảo cho các vấn đề ban đầu?
John L.

Tôi không có tài liệu tham khảo. Tôi sẽ quan tâm nếu có ai biết.
pi66

Câu trả lời:


5

Như đã trình bày trong câu trả lời trước, vấn đề này có thể được mô hình hóa như một vấn đề lập lịch với ngày phát hành và ngày đáo hạn. Tuy nhiên, heuristic chỉ hoạt động cho trường hợppj=1 (tất cả thời gian xử lý là 1) hoặc khi phát hành và ngày đáo hạn đồng ý (nghĩa là có một đơn đặt hàng sao cho r1rnd1dn).

Đối với trường hợp pj=pCác thuật toán đa thức đã được tìm thấy bởi Simons (1978) , Carlier (1981)Garey et al. (1981) , chạy đúng giờO(n2logn), O(n2logn)O(nlogn), tương ứng.

Thuật toán của Garey et al. lên lịch các nhiệm vụ thời gian đơn vị, nhưng cho phép phát hành tùy ý và ngày đáo hạn. Vấn đề trên có thể được giảm xuống cho cài đặt này bằng cách chia tất cả các ngày và thời gian xử lý chop. Ý tưởng chính của thuật toán là tìm một tập hợp các vùng cấm trong đó không có nhiệm vụ nào được phép bắt đầu. Chúng cho thấy rằng heuristic khi tôn trọng các khu vực cấm tìm thấy một lịch trình khả thi của makepan tối thiểu. Khi xây dựng các khu vực cấm, thuật toán của họ cũng có thể phát hiện ra tính không khả thi.

Để xem thuật toán hoạt động như thế nào, trước tiên hãy xem xét một vấn đề đơn giản hơn: lịch trình n nhiệm vụ thời gian giữa một ngày phát hành r và thời hạn d tôn trọng các khu vực cấm F=i(ai,bi), nơi mỗi vùng (ai,bi)là một khoảng thời gian mở. (Lưu ý ở đây chúng tôi không quan tâm đến việc phát hành và ngày đáo hạn của các nhiệm vụ riêng lẻ.)

Vấn đề này có thể được giải quyết bằng Backschedending : xác định thời gian bắt đầu canh gácsn+1=d, va cho i=n,n1,,1 đặt thời gian bắt đầu si đến lần gần nhất không muộn hơn si+11 điều đó không bị cấm

Viết B(r,d,n,F) cho một ứng dụng Backschedending cho các đầu vào trên và xác định giá trị trả về là s1, ngày bắt đầu mới nhất có thể để lên lịch nnhiệm vụ. Bây giờ nếuB(r,d,n,F)<r không có lịch trình khả thi cho nnhiệm vụ. Hơn nữa, nếurB(r,d,n,F)<r+1 không có nhiệm vụ nào khác có thể bắt đầu (B(r,d,n,F)1,r) vì nếu không thì lại không có lịch trình khả thi cho n nhiệm vụ, và do đó (B(r,d,n,F)1,r) có thể được tuyên bố là một khu vực cấm.

Nó chỉ ra rằng logic này là đủ để tìm thấy tất cả các khu vực bị cấm được yêu cầu để làm cho công việc heuristic của Schrage. Giả sử rằng các nhiệm vụ được ra lệnh sao chor1r2rn và viết n(r,d) cho số lượng tác vụ được phát hành và do trong khoảng thời gian đóng [r,d].

  1. bộ F=
  2. cho các nhiệm vụ i=n,n1,,1:
  3.   c=min{B(ri,dj,n(ri,dj),F)j:djdi}
  4.   nếu c<ri: trả lại "không có lịch trình khả thi"
  5.   khác nếu ric<ri+1: bộ F=F{(c1,ri)}

Việc thực hiện đơn giản như trên sẽ mất thời gian O(n4). Garey et al. cho thấy (bên cạnh tính chính xác) rằng bằng cách cập nhật thời gian thu được từ Backschedending, tham gia các vùng cấm chồng chéo và thực hiện các truy vấn "bị cấm"O(1) thời gian có thể được đưa xuống O(n2)và bằng cách sử dụng các cơ sở dữ liệu tốt hơn để O(nlogn).


1
Có vẻ đầy hứa hẹn, nhưng các liên kết đầu tiên và cuối cùng đi đến paywalls, và liên kết thứ hai dẫn đến một chứng chỉ bị hỏng và trang "500 Lỗi máy chủ nội bộ" đối với tôi. Bạn có thể tóm tắt một trong các thuật toán, hoặc đưa ra một liên kết có thể truy cập công khai? Cảm ơn!
j_random_hacker

Xin lỗi, những bài viết này có vẻ khó đến. Bài viết của Carlier trên Cổng nghiên cứu nhưng bằng tiếng Pháp. Tôi sẽ xem nếu tôi có thể cung cấp một bản tóm tắt ngắn gọn.
Marcus Ritt

Điều đó thật tuyệt, cảm ơn :)
j_random_hacker

0

Vấn đề của bạn được gọi là lập lịch một máy không ưu tiên với thời gian và thời hạn phát hành, với các nhiệm vụ có độ dài giống hệt nhau và có thể được giải quyết hiệu quả bằng cách sử dụng phương pháp phỏng đoán tham lam của Schrage.

Trước tiên chúng ta mô tả vấn đề chính thức hơn. Chúng tôi được đưa ra một chuỗi các khoảng thời gian[ri,di] và một chuỗi các công việc pi. Chúng tôi muốn lên lịch cho từng công việc trong khoảng thời gian của nó, để không có hai công việc giao nhau.

Trong trường hợp của chúng ta ri=ai, di=bi+2pi=2. Thời gian bắt đầu của mỗi công việcci do đó thỏa mãn aicibivà hai công việc xung đột nếu (ci,ci+2) giao nhau (cj,cj+2), giống như |cicj|<2. (Không mất tính tổng quát, tất cả các công việc được lên lịch vào thời gian nguyên.)

Heuristic của Schrage là một heuristic phổ biến, là tối ưu trong một số trường hợp, mặc dù không nhất thiết phải là cái này. Tuy nhiên, các thuật toán khác tồn tại trong tài liệu giải quyết vấn đề này một cách hiệu quả.


2
Heuristic của Schrage chỉ tối ưu cho pj=1 không dành cho pj=p (lấy r=(01), d=(53), p=(22)). Thuật toán đa thức chopj=pđã được đưa ra bởi Simons (1978), Carlier (1981), và Garey et al. (1981), sau này trongO(nlogn).
Marcus Ritt

@MarcusRitt Tôi đồng ý rằng heuristic không hoạt động. Bạn có thể cung cấp các liên kết (hoặc ít nhất là các tiêu đề) cho tài liệu tham khảo của bạn?
pi66

Tôi không thấy giá trị của pvào hình. Bạn có thể chia mọi thứ chopđể có được công việc chiều dài đơn vị.
Yuval Filmus

1
@YuvalFilmus Có, nhưng sau đó phát hành và ngày đáo hạn có thể không còn nguyên nữa khiến vấn đề trở nên khó khăn hơn. Trên thực tế, Garey et al. (1981) giải bài toán đơn vị thời gian với ngày không nguyên và thuật toán của chúng có thể được áp dụng sau khi chia mọi thứ chop.
Marcus Ritt

0

Đặt A là nhỏ nhất trong số ai. Sau đó, có hai sự lựa chọn cho người đầu tiênci để chọn điều đó rõ ràng không thể được cải thiện: Một, tìm i sao cho ai=Abi càng nhỏ càng tốt, sau đó để ci=ai. Hai, chọn j sao choaj=A+1, bj<bibj càng nhỏ càng tốt, sau đó để cj=bj(điều này có thể không thể). Sau đó xóa mục đó khỏi danh sách các khoảng, cập nhật tất cảai lớn hơn hai ci đã được chọn và kiểm tra xem không biquá nhỏ. Độ sâu tìm kiếm đầu tiên và quay lui sẽ tìm ra giải pháp.

Có một cơ hội tốt rằng điều này là nhanh chóng, vì sự lựa chọn đầu tiên không tệ như một heuristic.

Nếu có chính xác k khoảng với ai<A đối với một số A và chúng tôi tìm thấy giá trị k ci<=A2 sau đó những cilà tối ưu và quay lui cho các mục k này không thể giúp đỡ và sẽ không bao giờ cần thiết. Mặt khác, nếu có quá nhiều giá trịbi quá gần nhau, điều đó có thể được sử dụng để chứng minh không có giải pháp.

Cuối cùng, vấn đề có thể được tiếp cận từ nhỏ nhất aihoặc tốt nhất từ ​​lớn nhất bi.

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.