Nói rằng và b 1 b 2 ... b n là hai chuỗi có cùng chiều dài. Một anagramming của hai chuỗi là một ánh xạ song ánh p : [ 1 ... n ] → [ 1 ... n ] như vậy mà một i = b p ( i ) cho mỗi i .
Có thể có nhiều hơn một đảo chữ cho cùng một chuỗi. Ví dụ: Nếu `abcab` và b = chúng ta có p 1 [ 1 , 2 , 3 , 4 , 5 ] → [ 4 , 5 , 1 , 2 , 3 ] và p 2 [ 1 , 2 , 3 , 4 , 5 ] → [ 2 , 5 , 1cabab
, trong số những người khác.
Chúng ta sẽ nói rằng trọng số của một đảo chữ p là số lần cắt mà người ta phải thực hiện trong chuỗi đầu tiên để có được các đoạn có thể được sắp xếp lại để có được chuỗi thứ hai. Chính thức, đây số lượng các giá trị của i ∈ [ 1 ... n - 1 ] mà p ( i ) + 1 ≠ p ( i + 1 ) . Nghĩa là, nó là số điểm mà tại đó p nào không tăng bằng ví dụ chính xác 1.For, w ( p và w ( p 2 ) = 4 , vì p 1 cắtmột lần, vào các khốivàvà p 2 cắtbốn lần, thành năm khối.12345
123
45
12345
Giả sử tồn tại đảo chữ cho hai chuỗi và b . Sau đó, ít nhất một đảo chữ phải có trọng lượng ít nhất. Hãy nói điều này là nhẹ nhất . (Có thể có nhiều đảo chữ nhẹ nhất; Tôi không quan tâm vì tôi chỉ quan tâm đến trọng lượng.)
Câu hỏi
Tôi muốn một thuật toán, đưa ra hai chuỗi có đảo chữ tồn tại, mang lại hiệu quả chính xác trọng lượng của đảo chữ nhẹ nhất trong hai chuỗi. Sẽ ổn thôi nếu thuật toán cũng mang lại hiệu ứng đảo chữ nhẹ nhất, nhưng không cần.
Đây là một vấn đề khá đơn giản để tạo ra tất cả các đảo chữ và cân chúng, nhưng có thể có nhiều, vì vậy tôi thích một phương pháp tìm trực tiếp đảo chữ cái.
Động lực
Lý do vấn đề này được quan tâm là như sau. Nó rất dễ dàng để làm cho máy tính tìm kiếm từ điển và tìm đảo chữ, cặp từ có chứa chính xác cùng một chữ cái. Nhưng nhiều đảo chữ được sản xuất là không thú vị. Chẳng hạn, các ví dụ dài nhất được tìm thấy trong Từ điển quốc tế thứ hai của Webster là:
cholecystoduodenostomy
duodenocholecystostomy
Vấn đề phải rõ ràng: đây là không thú vị vì họ thừa nhận một anagramming rất nhẹ mà chỉ đơn giản trao đổi các cholecysto
, duedeno
và stomy
phần, đối với một trọng lượng 2. Mặt khác, ví dụ ngắn hơn nhiều này là nhiều hơn đáng ngạc nhiên và thú vị:
bờ biển
cắt
Ở đây, đảo chữ nhẹ nhất có trọng lượng 8.
Tôi có một chương trình sử dụng phương pháp này để xác định vị trí các đảo chữ thú vị, cụ thể là các chương trình mà tất cả các đảo chữ có trọng lượng cao. Nhưng nó thực hiện điều này bằng cách tạo và cân tất cả các đảo chữ có thể, chậm.
cholecystoduodenostomy
là ccddeehlmnooooossttuyy
.) Hai từ là đảo chữ khi và chỉ khi chúng có cùng dạng chính tắc. Bạn lưu trữ các từ trong bảng băm, được khóa bởi các hình thức chính tắc của chúng và bất cứ khi nào bạn tìm thấy một sự va chạm, bạn có một đảo chữ cái.