Đếm các hoán vị có các phần tử không chính xác chỉ số của chúng ± M


13

Gần đây tôi đã được hỏi vấn đề này trong một cuộc phỏng vấn thuật toán và đã không giải quyết được nó.

Cho hai giá trị N và M, bạn phải đếm số lượng hoán vị có độ dài N (sử dụng các số từ 1 đến N) sao cho chênh lệch tuyệt đối giữa bất kỳ số nào trong hoán vị và vị trí của nó trong hoán vị không bằng M.

Ví dụ - Nếu N = 3 và M = 1 thì 1 2 3 và 3 2 1 là hoán vị hợp lệ nhưng 1 3 2 không hợp lệ vì số 3 ở vị trí 2 và hiệu của chúng là = M.

Tôi đã thử lập trình NxM Dynamic nhưng không thành công trong việc lặp lại mà không tính số lần lặp lại.


Bạn có thể có được một công thức bằng cách sử dụng loại trừ bao gồm. Trường hợp là cổ điển được gọi là Loạn . M=0
Yuval Filmus

1
Đây là một ví dụ cụ thể về việc đếm các kết hợp hoàn hảo trong các biểu đồ lưỡng cực, một vấn đề là -complete. Tất nhiên, trường hợp cụ thể này có thể dễ dàng hơn. #P
Yuval Filmus

Tôi đã thử loại trừ Bao gồm nhưng không có tiến triển.
Gena

Bạn có thể thử điều chỉnh các phương pháp để đếm các biến cố . Tôi không biết liệu điều đó sẽ đưa bạn đến bất cứ nơi nào. Bạn cũng có thể thử sửa M = 1 (giả sử), tính toán số cho các giá trị nhỏ của N (N = 1,2,3,4,5,6,7,8) bằng vũ lực, và sau đó tìm kiếm chuỗi tương ứng trong OEIS với hy vọng rằng bạn tìm thấy một cái gì đó hữu ích.
DW

Đệ quy bạn thiết lập là gì? Bạn có ý nghĩa gì bởi "số lần lặp lại"?
Raphael

Câu trả lời:


2

Điều đầu tiên tôi sẽ hỏi khi đưa ra câu hỏi này sẽ là

Bạn có muốn một thuật toán thời gian đa thức?

và sau đó tôi hy vọng câu trả lời là 'không'. Tôi nghi ngờ rằng vấn đề này là NP-hard, vì lý do sau:

Cách tiếp cận tự nhiên cho vấn đề này là xem xét vị trí của số đầu tiên và rút ra một công thức đệ quy để đặt các số khác. Điều này hoạt động tốt cho trường hợp (tức là đếm số lần loạn), vì bạn không đặt số thứ nhất ở vị trí nào, vì chỉ có một vị trí 'bất hợp pháp' của mỗi số. Nói cách khác, cách tiếp cận này dẫn đến các bài toán con độc lập.M=0

Đối với , điều này không đơn giản, vì hiện tại chúng ta có thể có vị trí bất hợp pháp cho một số số. Những vị trí nào trong số các vị trí này vẫn còn trong bài toán con hiện có liên quan đến giải pháp của bài toán con. Chỉ xem xét số lượng vị trí 'bất hợp pháp' là không đủ, vì 'chuỗi' số có chung vị trí bất hợp pháp là bắt buộc để xác định cấu trúc của các bài toán con của dự án con đó. Vì vậy, cách tiếp cận này về cơ bản dẫn đến các bài toán con sau:M>02

Cho một tập hợp , một tập hợp cả hai kích thước tối đa và một số tự nhiên , đếm số lượng khớp hoàn hảo trên biểu đồ lưỡng cực , trong đóANBNNM(A,B,E) nếu và chỉ nếu | a - b | M .(a,b)E|ab|M

Vấn đề này có vẻ khó khăn. Cách tiếp cận duy nhất cho vấn đề này tôi thấy là bao gồm / loại trừ, điều này sẽ không dẫn đến thuật toán thời gian đa thức.

Chúng ta có thể xem xét các cách tiếp cận không dựa vào vị trí lặp của các con số, nhưng tôi không biết bạn sẽ làm điều này như thế nào. (đặc biệt là trong một cuộc phỏng vấn!)

Tất nhiên, tất cả điều này chỉ là suy đoán và vẫn có khả năng một mánh khóe thông minh có thể đưa ra giải pháp thời gian đa thức, nhưng tôi hy vọng tôi đã đưa ra lập luận thuyết phục rằng thủ thuật này thực sự rất thông minh.

Có lẽ có thể hiển thị độ cứng NP bằng cách giảm vấn đề này xuống # 2-SAT ('chuỗi' số chia sẻ vị trí bất hợp pháp dường như là một lựa chọn không tầm thường có thể phù hợp với lựa chọn giá trị thật), nhưng Tôi chưa thấy một cách rõ ràng để làm điều đó như bây giờ.


Trong trường hợp người phỏng vấn thực sự hài lòng với thuật toán thời gian theo cấp số nhân, tôi chỉ cần tạo ra tất cả các giải pháp có thể bằng cách điều chỉnh thuật toán quay lui đệ quy để tạo ra hoán vị để loại trừ trường hợp cụ thể này.


Tôi đã nói rằng tôi có thể đưa ra thuật toán theo thời gian theo cấp số nhân, nhưng được yêu cầu giải pháp thời gian đa thức hoạt động khi N là <= 1000.
Gena

1
Chà, trừ khi bạn nhớ sai / giải thích sai câu hỏi như câu trả lời từ PPenguin gợi ý, tôi nghĩ rằng câu hỏi này được hỏi bởi những người phỏng vấn rất khó tính, những người phỏng vấn, những người tự hiểu sai câu hỏi hoặc thậm chí là một câu hỏi mà họ không mong đợi ai giải quyết . Ngay cả khi câu hỏi này hóa ra không khó tính toán, rất có thể đó là cuộc phỏng vấn khó.
Thằn lằn rời rạc

Dường như M = 1 có khả năng thực hiện được (và do đó có thể là những người khác), vì vậy có một cái gì đó chúng tôi đã bỏ lỡ. Bạn có thể giúp tôi hiểu / đánh giá trường hợp M = 1 không? Tôi đã đặt một câu hỏi riêng cho nó cs.stackexchange.com/questions/74674/ấc
PPenguin

2

Có thể bạn nhớ các chi tiết cụ thể sai hoặc giải thích sai câu hỏi?

Trong mô tả của bạn, yếu tố ở vị trí b được giới hạn một - b ± M . Nhưng nếu họ chỉ có nghĩa là sự khác biệt đã được hạn chế: một - b M , Sau đó, vấn đề xuất hiện dể làm.abab±M
abM


Tôi đã giải quyết vấn đề đơn giản hơn đó và tôi đã cố gắng khái quát theo cách mà tôi hy vọng có thể mang lại một chút tự do trong việc giải quyết vấn đề lớn hơn. Nhưng điều này chỉ làm rõ cho tôi tại sao một cách tiếp cận đệ quy rất khó có hiệu quả, mà tôi thảo luận ở phần cuối.

Xét hàm cho số lượng hoán vị của danh sách các phần tử được gắn nhãn từ 1 đến N , trong đó phần tử a ở vị trí b (vị trí đầu tiên là 1) thỏa mãn a - b Mb - một P .f(N,M,P)NababMbaP

Để hình dung điều này, việc tách nó thành hai ràng buộc cho phép P thay đổi các hạn chế đó một cách riêng biệt.MP

1 2 3 4 5  M=0, restricted values for each position
. . . . .  (positions in list)
1 2 3 4 5  P=0, restricted values for each position

3 4 5      M=2, restricted values for each position
. . . . .  (positions in list)
  1 2 3 4  P=1, restricted values for each position

Để thuận tiện, khi sao cho không đặt giới hạn cho hoán vị, hãy xác định g ( N , M ) = f ( N , M , P ) . Tương tự, g ( N , P ) = f ( N , M , P ) khi M N sao cho nó không bị hạn chế về hoán vị.PNg(N,M)=f(N,M,P)g(N,P)=f(N,M,P)MN

Trong trường hợp đặc biệt , ràng buộc từ MP là tương đương, do đó người ta có thể bỏ qua, cho phép chúng ta viết f theo g : f ( N , 0 , 0 ) = g ( N , 0 ) .M=P=0MPfg

f(N,0,0)=g(N,0).

Từ tính đối xứng của bài toán:

f(N,M,P)=f(N,P,M)

Trước tiên, hãy giải , sau đó giải f tổng quát hơn ( N , M , P ) .g(N,M)f(N,M,P)

Với , mỗi phần tử có một hạn chế vị trí (và các hạn chế là khác biệt). Vì vậy, chọn một số phần tử i , chúng tôi sẽ đặt nó ở một số vị trí j . Có N - 1 khả năng khác nhau cho sự lựa chọn của j .M=0ijN1j

Lựa chọn này đã loại bỏ vị trí hạn chế cho phần tử , trong khi các phần tử ( N - 2 ) khác vẫn có một hạn chế. Chúng ta có thể chia vị trí của j thành hai tùy chọn:j(N2)j

  1. Đặt trong . Điều này để lại tất cả các yếu tố khác với một hạn chế, do đó, vấn đề vị trí còn lại giờ đã giảm xuống còn g ( N - 2 , 0 ) .ig(N2,0)

  2. Đặt ở vị trí . Điều này hiện cung cấp một hạn chế vị trí cho j và vì vậy mỗi phần tử có một hạn chế và vấn đề vị trí còn lại được giảm xuống g ( N - 1 , 0 )ijg(N1,0)

Vì vậy, điều này đưa ra công thức đệ quy:

g(N,0)=(N1)[g(N2,0)+g(N1,0)]

Và bằng cách nhìn vào các tình huống đơn giản bằng tay, có thể có được các trường hợp cơ bản.

g(1,0)=0,  g(2,0)=1

Đây là công thức đệ quy loạn trí thông thường.

Mặc dù tôi không thể tưởng tượng ai đó nghĩ ra điều này ngay tại chỗ, nhưng cũng có một giải pháp dạng đóng cho việc này (xem bài viết wiki gây rối để biết chi tiết).

g(N,0)=n!e+12

Đối với , không có hạn chế về bất kỳ vị trí:MN

(MN)g(N,M)=N!

Với , các phần tử M đầu tiên sẽ không có hạn chế và các phần tử còn lại sẽ có một hạn chế vị trí. Nó về các vị trí, các vị trí M cuối cùng sẽ cho phép tất cả các số.0<M<NMM

Đối với vị trí cuối cùng, chọn một yếu tố . Có hai khả năng cho vị trí còn lại trông như thế nào:i

  1. Nếu , thì tôi không có giới hạn vị trí, vì vậy sử dụng tôi không thay đổi các hạn chế đối với bất kỳ vị trí nào. Chúng tôi cũng đã xóa một vị trí không hạn chế, vì vậy vị trí còn lại trông giống như g ( N - 1 , M - 1 ) .i<Miig(N1,M1)

  2. i>=Miig(N1,M)

(0<M<N)g(N,M)=(M1)g(N1,M1)+(NM+1)g(N1,M)

g

M+PNNMNPM+PNg(N,M+PN)

(M+P)Nf(N,M,P)=g(N,M+PN)

0<M<N0<P<NM+P<Nf0<MP<N

PNMPM

MNMPP

Tuy nhiên đây là lúc chúng ta phải kết thúc. Như không có cách nào để chuyển tiếp với phương pháp này.


ab±M

f(N,M,P)

2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)ij=M(Bj,Ai)ji=MM0

AB

Vì vậy, chúng tôi muốn một hàm lấy đầu vào biểu đồ ràng buộc này và xuất ra số lượng hoán vị thỏa mãn các ràng buộc.

M+PN

0<MP<NNN!

Bởi vì có rất nhiều sơ đồ con có thể một khi các chuỗi được cho phép, tôi thực sự không thấy làm thế nào để giải quyết vấn đề này bằng các phương pháp đệ quy thông thường trừ khi có một mối quan hệ thông minh nói rằng đồ thị ràng buộc không đẳng hình bằng cách nào đó tương đương với số lượng hoán vị.

Tôi nghĩ rất có thể, câu hỏi đã bị hiểu sai. Thậm chí có thể bởi người phỏng vấn (người có thể đã quên chi tiết câu trả lời).


Tại sao biểu đồ ràng buộc của bạn được định hướng? Các hướng có nghĩa là gì?
Thằn lằn rời rạc

@Discretelizard Hai hướng (a-> b vs b-> a) phân biệt giữa nơi ràng buộc đến từ (phiên bản '+' hoặc '-' của ràng buộc). Nó không thực sự cần thiết, bởi vì nó không quan trọng nguồn gốc của ràng buộc, nó chỉ giúp tôi dễ hình dung hơn những gì đang diễn ra.
PPenguin
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.