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}
và 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
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]]
và b[indices[i]]
.
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ự.
- 1. Sử dụng next_permutation để hoán vị một véc tơ của các lớp
- 2. Hai mảng này có hoán vị nhau không?
- 3. C# Sự hoán vị của một mảng các arraylists?
- 4. Tự thực hiện STL tương thích STL :: vector
- 5. Vị trí trong Vector bằng cách sử dụng STL
- 6. STL hoán đổi khi trở về?
- 7. Hoán đổi mảng bằng cách sử dụng con trỏ trong C++
- 8. C tương đương với ++ STL C
- 9. Haskell: đảo ngược một hoán vị trong thời gian tuyến tính, sử dụng chỉ liệt kê
- 10. Tìm số lượng 1s trong vị trí tương đương trong hai mảng
- 11. tôi có thể sử dụng đối với từng cho hai mảng có kích thước tương tự
- 12. C#: Cách hoán đổi vị trí của hai điều khiển winform
- 13. F # hoán vị
- 14. Sử dụng ngăn xếp được xác định trong C++ stl
- 15. Có cấu trúc nào trong Python tương tự như bản đồ C++ STL không?
- 16. C++ mảng năng động mà không STL
- 17. Thuật toán để áp dụng hoán vị trong không gian bộ nhớ liên tục
- 18. phát hoán vị đệ quy cho các ký tự
- 19. Tạo hoán vị bằng cách sử dụng bash
- 20. Vị trí hoán đổi hoạt ảnh của hai nút
- 21. So sánh hai mảng hoặc mảng, tìm giá trị tương tự và khác nhau
- 22. Có một chuỗi các hoán đổi sẽ tạo ra tất cả các hoán vị có thể không?
- 23. Chỉ đọc mảng hai chiều trong C#
- 24. Sử dụng mảng hai chiều (đa chiều) trong Erlang
- 25. Nhận tất cả hoán vị của một mảng PHP?
- 26. Hoán đổi cột trong một mảng có nhiều mảng?
- 27. Chương trình C++ STL sử dụng hàm functor làm vị ngữ
- 28. Bitwise thay đổi để tạo ra tất cả các hoán vị có thể trong C
- 29. hoán vị chuỗi trong Java (không đệ quy)
- 30. Lấy "diff" giữa hai mảng trong C#?