Sắp xếp các phần tử sao cho một số phần tử không nằm giữa các phần tử khác


10

Cho một số nguyên và bộ ba số nguyên khác nhau tìm một thuật toán tìm hoán vị của tập sao cho hoặc xác định chính xác rằng không tồn tại hoán vị như vậy. Ít chính thức hơn, chúng tôi muốn sắp xếp lại các số từ 1 đến ; mỗi bộ ba trong chỉ ra rằng phải xuất hiện trước theo thứ tự mới, nhưng không được xuất hiện giữaS { ( i , j , k ) | 1 i , j , k n , i j , j k , i k } , π { 1 , 2 , ... , n } ( i , j , k ) Sn

S{(i,j,k)1i,j,kn,ij,jk,ik},
π{1,2,,n}n ( i , j , k ) S i k j i k
(i,j,k)S(π(j)<π(i)<π(k))  (π(i)<π(k)<π(j))
n(i,j,k)Sikjivà .k

ví dụ 1

Giả sử và . Sau đóS = { ( 1 , 2 , 3 ) , ( 2 , 3 , 4 ) }n=5S={(1,2,3),(2,3,4)}

  • π=(5,4,3,2,1)không một hoán vị hợp lệ, bởi vì , nhưng .π ( 1 ) > π ( 3 )(1,2,3)Sπ(1)>π(3)

  • π=(1,2,4,5,3)không một hoán vị hợp lệ, bởi vì nhưng .π ( 1 ) < π ( 3 ) < π ( 5 )(1,2,3)Sπ(1)<π(3)<π(5)

  • (2,4,1,3,5) là một hoán vị hợp lệ.

Ví dụ 2

Nếu và , không có hoán vị hợp lệ. Tương tự, không có hoán vị hợp lệ nếu và ( Tôi nghĩ rằng, có thể đã phạm sai lầm ở đây).n=5S={(1,2,3),(2,1,3)}n=5S={(1,2,3),(3,4,5),(2,5,3),(2,1,4)}

Tiền thưởng: Tính chất nào của xác định liệu một giải pháp khả thi có tồn tại không?S


Tại sao không viết lại điều kiện thứ hai là ? Sau đó, bạn có một vấn đề hài lòng đơn giản, ít nhiều, ràng buộc. (Lưu ý rằng tôi đã đơn giản hóa điều kiện dựa trên các giả định khác.)(σmi,σmj,σmk)S(i>jj>k)
Dave Clarke

BTW: động lực cho vấn đề này là gì?
Dave Clarke

@DaveClarke Xem chỉnh sửa của tôi. Vấn đề này đã được tóm tắt từ một cuộc thảo luận xung quanh vấn đề lập kế hoạch mà tôi đang thảo luận với một số sinh viên khác trong phòng thí nghiệm. Về cơ bản, ý tưởng là bạn có rất nhiều công việc, một số trong đó phải thực hiện theo một thứ tự nhất định. Tuy nhiên, bạn không muốn một số công việc được sắp xếp giữa các công việc theo trình tự, có thể vì những lý do rất tinh tế.
Patrick87

3
Tại sao các sigmas? Chỉ cần xác định . Các đăng ký lồng nhau làm cho em bé Jesus khóc. Σ={1,2,,n}
JeffE

@JeffE Thành thật mà nói, tôi chỉ thích cái cớ để chơi với phương trình. Có một cái gì đó chỉ thỏa mãn một cách trực quan về việc viết mã biên dịch cho những nhỏ đó. Đừng lấy từ tôi, anh bạn. σ
Patrick87

Câu trả lời:


3

Đây là một thuật toán ngây thơ. Nó cuối cùng dựa vào lực lượng vũ phu, nhưng đôi khi có thể thực hiện tốt.

Mỗi ràng buộc bao gồm hai kết hợp; hãy gọi chúng là loại- , và loại- , . Mỗi ràng buộc có thể được viết tương đương như một hàm phân tách , dựa trên thực tế là .(σmi,σmj,σmk)Si<k¬(i<j<k)Ai<kB¬(i<j<k)Bi>jj>kij,jk

  1. Thu thập tất cả các loại - ràng buộc. Gọi đây là . Kiểm tra xem chúng có nhất quán hay không, cụ thể rằng đây là sự tuyến tính hóa của thứ tự. Điều này làm mất thời gian trong số lượng các ràng buộc sử dụng phân loại tô pô.AΘO(|S|)
  2. Đối với mỗi từ chối trong ràng buộc , hãy kiểm tra xem nó có phù hợp với thứ tự từng phần . Nếu nó không nhất quán, loại bỏ các từ chối. Nếu cả hai từ chối không phù hợp với , thì thất bại. Bất cứ khi nào chỉ loại bỏ một ràng buộc loại , hãy thêm loại còn lại vào . Bước này là .Θ Θ B Θ O ( | S | 2 )BΘΘBΘO(|S|2)
  3. Bây giờ có một thuật toán rõ ràng để tìm một giải pháp, cụ thể là xem xét tất cả các kết hợp của các cặp phân tách và kiểm tra tính nhất quán của chúng với , nhưng điều này rõ ràng theo cấp số nhân trong. Một heuristic để cải thiện hiệu suất sẽ là coi các cặp phân tách là các nhánh của cây --- một cặp tạo thành gốc, đó là con của cặp thứ hai, con của chúng bởi cặp thứ ba và vv. Sử dụng cấu trúc dữ liệu này, một giải pháp được tìm thấy bằng cách đi ngang qua cây theo chiều sâu. Mỗi khi một ràng buộc mới được thêm vào (sử dụng nhãn trên nhánh), có thể kiểm tra tính nhất quán. Cây con không nhất quán có thể được cắt tỉa.q | S | BBΘ|S|
    B
  4. Nếu đạt được một chiếc lá của cây, thì chúng ta có một tập các ràng buộc nhất quán bao gồm tất cả các ràng buộc loại và một ràng buộc của các ràng buộcTuyến tính hóa kết quả để có được thứ tự mong muốn.BAB

Cách tiếp cận ưa thích của tôi thực sự sẽ là mã hóa nó thành một tập các ràng buộc và sử dụng một bộ giải ràng buộc như Choco. Tôi sẽ giới thiệu biến số nguyên trong phạm vi và yêu cầu tất cả chúng đều khác biệt. Sau đó, tôi sẽ mã hóa từng ràng buộc ở trên trực tiếp dưới dạng các ràng buộc và sau đó để Choco thực hiện công việc đó.x i [ 0 , n - 1 ]nxi[0,n1]


1

Đây là một câu trả lời một phần:

Nếu bạn loại bỏ ràng buộc trên mỗi bộ ba thì vấn đề của bạn sẽ trở thành vấn đề Không giữa hai bên là -complete và không có thuật toán hiệu quả nào được biết cho các vấn đề như vậy. Nhưng với ràng buộc , nó có thể buộc một số cấu trúc đẹp có thể được khai thác để tìm thuật toán thời gian đa thức cho vấn đề của bạn.N P i < ki<kNPi<k

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.