Sự phức tạp của việc đồng nhất hóa một chuỗi


10

Động lực : Trong khi phát triển các công cụ để tạo phiên bản dữ liệu, cuối cùng chúng tôi đã xem xét các thuật toán để "tìm" hai bộ số nguyên, bằng cách đưa ra một chuỗi các phép biến đổi lấy một bộ số nguyên khác. Chúng tôi đã có thể giảm vấn đề đó thành vấn đề rất tự nhiên sau đây dường như có các kết nối để chỉnh sửa khoảng cách, nhóm bằng cách hoán đổiphân vùng chuỗi chung tối thiểu .

Vấn đề : Chúng tôi được cung cấp một chuỗi, tức là một chuỗi các chữ cái và mục tiêu của chúng tôi là đồng nhất hóa nó với chi phí tối thiểu. Đó là, chúng tôi muốn một chuỗi được sắp xếp lại sao cho tất cả các chữ cái giống nhau nằm cạnh nhau.

Hoạt động duy nhất được phép là chọn một chuỗi các chữ cái giống nhau và di chuyển chuỗi đó ở bất cứ đâu và chi phí cho tôi là 1 đơn vị.

Bất kỳ trợ giúp đặc trưng cho sự phức tạp của vấn đề này sẽ được nhiều đánh giá cao!

Ví dụ :

  • aabcdab: Đầu vào
  • bcd aa ab: Sau khi di chuyển aa đầu tiên đến vị trí ngay sau "d"
  • b bcdaaa: Sau khi di chuyển dấu b đến vị trí đầu tiên

Vì chuỗi kết quả là đồng nhất, chúng tôi có chi phí là 2.

Lưu ý rằng chúng tôi không bị hạn chế theo bất kỳ cách nào đối với đầu ra: miễn là nó đồng nhất, chúng tôi không cần phải đảm bảo bất kỳ thứ tự cụ thể nào.

Câu trả lời:


6

Vấn đề này là NP-đầy đủ, bằng cách giảm từ Bộ đánh tối thiểu .

USsS,sUHUsS,hHhs

Việc giảm như sau:

  • uUussSusu

  • s|s|1suusu

  • ususssSssu

  • |s|+|H|H

Vì bộ nhấn tối thiểu là NP-Hard, nên tối ưu hóa đồng nhất một chuỗi. Vì các động thái tạo thành nhân chứng, nó là NP-Complete.


Đây là một giảm thanh lịch - cảm ơn bạn!
Aditya Parameswaran

2

Nhìn vào số lượng thay đổi từ một chữ cái này sang chữ cái khác trong chuỗi của bạn, mà bạn có thể xem là thước đo cho tính không đồng nhất của chuỗi. Với mỗi lần di chuyển (hữu ích) của một chuỗi con, bạn sẽ giảm số này đi một lần nếu bước tiếp theo bạn di chuyển được đi trước và theo sau là hai chữ cái riêng biệt. Nếu không, bạn giảm hai mức không đồng nhất.

Vì vậy, đối với một chuỗi có k thay đổi, bạn cần tối đa k - l + 1 di chuyển trong đó l là số lượng chữ cái khác nhau trong chuỗi, vì cuối cùng l - 1 thay đổi sẽ vẫn còn. Vì một chuỗi có độ dài n có thể có nhiều nhất là thay đổi chữ n-1, nên nó có thể cần nhiều nhất là di chuyển n - l . Số lượng ít nhất có thể là một nửa số này.

Chiến lược tốt nhất dường như là tìm kiếm các phần sau của abbba và chuyển bbb ra khỏi đó. Khi không còn lại, di chuyển bất cứ điều gì. Bạn vẫn có thể cố gắng thực hiện những thao tác tạo ra tình huống abbba mới, nhưng tôi nghĩ mức tăng sẽ rất ít. Vì chiến lược tồi tệ nhất có thể (không có những động thái ngớ ngẩn làm tăng tính không đồng nhất) sử dụng nhiều nhất gấp đôi so với chiến lược tối ưu, nên bạn có thể đạt được ít nhiều mối quan hệ hợp lý với nỗ lực như câu trả lời của isaacg với đặc tính như NP-hard gợi ý. Tất nhiên, trừ khi, bạn thực sự chỉ đếm số lượng các hoạt động di chuyển và không quan tâm đến thời gian để quyết định nên thực hiện di chuyển nào.

Do đó, trường hợp xấu nhất là một chuỗi trong đó mỗi chữ cái khác với tiền thân của nó (và bạn không nhận được bất kỳ phần thưởng abbba nào). Ở đây bạn cần một số hoạt động tuyến tính theo chiều dài của chuỗi và gần như bằng độ dài này.

Trong ví dụ của bạn, bạn có 5 -> 4 -> 3 thay đổi và 3 bằng với số chữ cái (4) trừ đi 1.

Lưu ý bên lề: Đối với một bảng chữ cái có kích thước chỉ có hai, mọi di chuyển không di chuyển tiền tố hoặc hậu tố của chuỗi đều làm giảm tính không đồng nhất của hai và do đó mọi chuỗi di chuyển hợp lý là tối ưu.


Bạn cho rằng một động thái có thể giảm tối đa 2 thay đổi, nhưng thực tế nó có thể giảm số lượng thay đổi lên tới 3. Ví dụ: chuyển đổi "aabcabc" thành "aaabbcc" bằng cách chuyển chuỗi con đầu tiên "bc" thành giữa chuỗi con thứ hai "bc" dẫn đến việc giảm số lượng thay đổi trong chuỗi từ 5 xuống 2.
Mikhail Rudoy

Xin chào, @MikhailRudoy. Các câu hỏi nói rằng hoạt động này là "chọn một chuỗi các chữ cái giống nhau", vì vậy bc không được phép theo như tôi hiểu.
Peter Leupold

Tôi hoàn toàn bỏ lỡ chi tiết đó. Bạn đúng trong trường hợp đó.
Mikhail Rudoy

Peter là chính xác: những di chuyển không được phép.
Aditya Parameswaran

Re: phần còn lại của câu trả lời - thực sự, những quan sát này lại: giới hạn dưới, sự tối ưu của trường hợp kích thước bảng chữ cái 2, và heuristic cho những gì cần làm tại bất kỳ thời điểm nào đều có giá trị. Vì bất kỳ động thái nào trong trường hợp xấu nhất chỉ mang lại lợi ích cho chuỗi chữ cái đó và trong trường hợp tốt nhất hợp nhất tối đa hai chuỗi chữ cái như trong abbba của bạn, một xấp xỉ 2 có vẻ tự nhiên.
Aditya Parameswaran
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.