Tôi gặp phải vấn đề này khi thực hiện một số chương trình nhiệt tình. Vấn đề có thể được diễn tả như sau:Có một thuật toán để tạo ra tất cả các hoán vị tròn duy nhất của một multiset?
Đối với một MultiSet A, chúng ta hãy P (A) biểu thị tập hợp của tất cả các hoán vị có thể có của A. P (A) được một cách tự nhiên chia thành tập con rời nhau mà là tương đương các lớp học, với mối quan hệ tương đương là "có thể liên quan theo ca tròn". Liệt kê tất cả các lớp học tương đương bằng cách tạo ra chính xác một thành viên từ mỗi người trong số họ.
Ví dụ: hãy xem xét đa số {0, 1, 1, 2}. Các hoán vị "0112" và "1201" là hoán vị duy nhất, nhưng sau này có thể được tìm thấy bằng cách dịch chuyển vòng tròn cũ và ngược lại. Thuật toán mong muốn không được tạo ra cả hai. Tất nhiên một cách tiếp cận brute-force là có thể: chỉ cần tạo hoán vị - bất kể sao chép hình tròn - sử dụng bất kỳ thuật toán hoán vị đa điểm nào và loại bỏ trùng lặp được tìm thấy bằng cách so sánh với kết quả trước đó. Tuy nhiên, điều này có xu hướng không hiệu quả trong thực tế. Thuật toán mong muốn nên yêu cầu tối thiểu, nếu không phải là zero bookkeeping.
Mọi thông tin chi tiết về vấn đề này được đánh giá cao.
Cảm ơn liên kết và tham chiếu đến giấy của Sawada. Tôi sẽ dành chút thời gian để nghiên cứu, nó và đăng lại nếu tôi có thêm câu hỏi. –
Tôi sẽ đánh dấu điều này là giải pháp :) Tôi cũng phát hiện ra một bài báo cho một thuật toán liên quan chặt chẽ, cụ thể là tạo ra tất cả các dây chuyền có độ dài nhất định từ bảng chữ cái. Liên kết tới bài báo: http://dx.doi.org/10.1006/jagm.2000.1108 –