2012-05-09 51 views
5

Có là một cách dễ dàng để làm next_permutation để thực hiện cùng một bộ giao dịch hoán đổi hai mảng khác nhau của cùng một kích thước ví dụ nếu tôi có hai mảng a[]={1,2,3,4,5}b[]={12,23,21,2,3} nếu sau khi permution 1 trong mảng a đi đến vị trí thứ 3 sau đó 12 trong mảng b cũng nên đi đến vị trí thứ 3.hoán vị tương tự trong hai mảng sử dụng next_permutation() stl trong C++

Trả lời

4

Bạn có thể thực hiện một số bộ phụ trợ:

int a[] = { 1, 2, 3, 4, 5 }; 
int b[] = { 12, 23, 21, 2, 3 }; 

std::size_t indices[] = { 0, 1, 2, 3, 4 }; 

Bây giờ thực hiện hoán vị trên indices, và sau đó sử dụng a[indices[i]]b[indices[i]].

1

Hãy nhớ rằng std :: next_permutation không giữ bất kỳ trạng thái nào (nó sẽ đi ngược lại khái niệm về thuật toán stl). Vậy làm thế nào nó tạo ra hoán vị tiếp theo? Nó thực hiện theo thứ tự các phần tử. Đó là lý do tại sao có phiên bản chấp nhận toán tử so sánh

Nếu bạn đặt cho nó một mảng được sắp xếp có kích thước N, thì next_permutation có thể được gọi là N! lần. Nếu không, bạn có ít hoán vị hơn trước khi thuật toán trả về false.

Để trả lời câu hỏi của bạn, nếu các mảng có cùng thứ tự về "tập hợp chỉ mục phụ trợ" như đã đề xuất ở trên thì các phần tử giống nhau sẽ được hoán đổi.

Ví dụ:

int a[] = { 1, 2, 4, 3 }; 
int b[] = { 11, 12, 14, 13 }; 

Những điều này sẽ được hoán vị giống nhau, bởi vì loại sẽ tạo ra thứ tự chỉ số tương tự.

Các vấn đề liên quan