Thay thế cho khoảng cách Hamming cho hoán vị


8

Tôi có hai chuỗi, trong đó một chuỗi là hoán vị của chuỗi kia. Tôi đã tự hỏi nếu có một sự thay thế cho khoảng cách Hamming trong đó thay vì tìm số lượng thay thế tối thiểu cần thiết, nó sẽ tìm thấy số lượng dịch tối thiểu cần thiết để đi từ chuỗi a sang chuỗi b.

Chuỗi của tôi luôn có cùng kích thước và tôi biết không có lỗi / thay thế.

Thí dụ:

1 2 3 4 5
3 2 5 4 1

Điều này sẽ cho tôi hai:

3 2 5 4 1 (start)
-> 3 2 1 4 5 
-> -> 1 2 3 4 5

Nếu điều này đã được thực hiện trong R thì sẽ còn tốt hơn nữa.


3
Có vẻ như bạn muốn khoảng cách chỉnh sửa (còn gọi là khoảng cách Levenshtein)?


2
Trong ví dụ cụ thể của bạn trong đó các ký tự của chuỗi có thứ tự ngụ ý, bạn có thể muốn đếm nghịch đảo. vi.wikipedia.org/wiki/Inversion_(discittle_mathatures)
Joe

1
Có thể không thích hợp khi gọi tất cả các số liệu hàm khoảng cách đó, vì nhiều người có thể không tuân theo bất đẳng thức tam giác.
Nicholas Mancuso

1
Bằng cách dịch có nghĩa là bạn lấy hình ảnh phản chiếu của một phần của chuỗi?
highBandWidth

Câu trả lời:


3

Tìm khoảng cách tối thiểu được gọi là vấn đề "Sắp xếp theo cách dịch". Một phần của bản tóm tắt từ một bài báo :

"Cho hai bộ gen đa nhiễm sắc thể Pi và Gamma có cùng bộ gen, vấn đề sắp xếp theo cách dịch (SBT) là tìm ra một chuỗi dịch chuyển ngắn nhất biến Pi thành Gamma, trong đó độ dài của chuỗi được gọi là khoảng cách dịch giữa Pi và Gamma. Năm 1996, Hannenhalli lần đầu tiên đưa ra công thức về khoảng cách dịch, dựa trên đó thuật toán cho SBT đã được đưa ra. Năm 2005, Anne Bergeron và cộng sự đã xem xét lại vấn đề này và đưa ra một bằng chứng cơ bản cho công thức của khoảng cách dịch dẫn đến thuật toán cho SBT. "O(n3)O(n3)

Cái được gọi là "chuyển vị" ở đây được gọi là hoán vị, nghĩa là hoán vị chính xác hai yếu tố trong một danh sách, theo ngôn ngữ tổ hợp truyền thống.


Đây chính xác là những gì tôi cần! Bạn có biết về bất kỳ triển khai làm việc nào, trong C hoặc R không? Dường như không có một bài báo nào!
user1357015

@ user1357015 google nó một chút và xem qua các tài liệu tham khảo của họ, tôi chắc chắn bạn sẽ tìm thấy một triển khai. Tôi cũng sẽ xem xét. Ngoài ra, lưu ý dòng cuối cùng được thêm bởi ai đó - bạn có thể đang tìm kiếm thứ gì đó hơi khác một chút, được gọi là "đảo ngược". Pavel Pevzner có một số bài viết về điều này.
Bitwise

@ user1357015 tìm thấy một số mã python ở đâyđiều này cũng có thể hữu ích.
Bitwise

@Bitwise Lưu ý rằng Stack Overflow là trang web bạn muốn truy cập cho mã thực tế.
Raphael

0

Chúng ta cần tìm số lần chuyển vị tối thiểu lấy một chuỗi sang chuỗi khác , trong đó là hoán vị. Có vẻ như bạn đang tìm khoảng cách tối thiểu giữa hai đỉnh đã cho trong biểu đồ chuyển vị hoàn chỉnh, đó là biểu đồ Cayley của được tạo bởi tập hợp tất cả các chuyển vị.aba,ba,bSnSn

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.