Kết quả của một chuỗi nhưng không phải của chuỗi khác


7

Để cho Σ là một bảng chữ cái và để x+,x1,,xnΣđược chuỗi trên bảng chữ cái đó. Gọi một chuỗisΣ tốt nếus là một phần sau của x+ nhưng không phải là một trong những x1,,xn.

Được x+,x1,,xn, Tôi đang tìm kiếm chuỗi tốt nhất ngắn nhất s. Có một thuật toán hợp lý cho việc này? Tôi quan tâm đến một thuật toán thực tế, ngay cả khi thời gian chạy trường hợp xấu nhất của nó không lớn. Trong miền của tôi, các chuỗix+,x1,,xn có thể khá dài nhưng tôi hy vọng sẽ tồn tại một chuỗi tốt s đó là khá ngắn, trong trường hợp đó giúp.

Trường hợp n=1được xử lý bởi chuỗi con ngắn nhất của một chuỗi, đó không phải là chuỗi con của chuỗi khác , nhưng tôi cần xử lý trường hợp nàyn>1.


1
Đề xuất tiêu chuẩn của tôi: cây hậu tố? Chuỗi bạn đang tìm là nút có mức nhỏ nhất trong số tất cả chỉ có(x+,_)như lá. Oh, đợi ... chuỗi phụ ? Chỉ trích. Hừm.
Raphael

Có phải vấn đề này không có x+chuỗi kép chung dài nhất? Nếu vậy, có lẽ một cái gì đó có thể được thực hiện dọc theo những dòng đó. (Việc liệt kê các phần không phổ biến bằng cách tăng chiều dài sẽ giải quyết vấn đề của bạn.)
Raphael

Tôi tin rằng DP của Aryabhata có thể được mở rộng khá dễ dàng đến n>1 trường hợp: chỉ sử dụng n bảng, mỗi cái một cái xivà sau đó săn lùng những thứ nhỏ nhất Lsao cho mỗi bảngivà đối với một số k, is_there[i,k,t,L]=false. Điều đó sẽ cho bạn biết chiều dài (L) và nhân vật cuối cùng (x+[k]), nhưng tôi chưa chắc làm thế nào để trích xuất các ký tự trước đó ...
j_random_hacker

2
@j_random_hacker, tôi không nghĩ rằng nó hoạt động. Điều đó có thể chọn một saux+ chiều dài L đó không phải là một phần sau của x1và một sự khác biệt của x+ chiều dài L đó không phải là một phần sau của x2. (Cái đầu tiên có thể là một phần sau củax2và cái thứ hai là một x1, sẽ là xấu.) Chúng ta cần một chuỗi con x+, không phải là một cái riêng biệt cho mỗi xi. Hay tôi đã bỏ lỡ một cái gì đó thông minh về ý tưởng của bạn?
DW

3
Nếu bạn không cần hoàn toàn ngắn nhất, bạn có thể sử dụng thực tế là, nếu một chuỗi s không phải là một phần sau của bất kỳ xi, sau đó nó cũng không phải là một chuỗi của bất kỳ chuỗi xen kẽ nàoxi. Vì vậy, bạn có thể thử nhiều cách khác nhau để xen kẽ ngẫu nhiênn dây xi thành một chuỗi duy nhất và cho mỗi chuỗi xen kẽ như vậy yj, tìm kiếm một thứ zj của x+ tránh được việc là một yj sử dụng DP của Aryabhata và chọn bất kỳ zjlà ngắn nhất
j_random_hacker

Câu trả lời:


1

Sai lầm

Trước hết, trong các nhận xét tôi đã mắc một vài lỗi: Cả hai tuyên bố ban đầu tôi đưa ra về xen kẽ và nhận xét "sửa" nó (hiện đã bị xóa) đều sai, và riêng tôi cho rằng việc thử tất cả các xen kẽ có thể phải mang lại một giải pháp tối ưu cũng sai (tôi đưa ra một ví dụ đơn giản dưới đây). Cuối cùng, đề nghị của tôi để thiết lậpx+=zj và lặp đi lặp lại, hoặc sử dụng tìm kiếm chùm tia, thực sự cũng không hữu ích: Bất kỳ câu trả lời nào có thể được tạo ra bằng cách thực hiện điều này và áp dụng DP của Aryabhata không bao giờ có thể tốt hơn sử dụng bản gốc x+, vì tất cả những gì nó làm là giảm kích thước của bộ giải pháp mà DP có thể chọn. Lấy làm tiếc! Hy vọng rằng phiên bản cải tiến dưới đây không có vấn đề gì nữa ...

Tôi cũng nhận thấy hai sai lầm trong DP của Aryabhata . May mắn là cả hai có thể dễ dàng sửa chữa (xem bình luận của tôi về bài đăng đó).

Một giải pháp heuristic sử dụng xen kẽ ngẫu nhiên

Nếu bạn không cần hoàn toàn ngắn nhất, bạn có thể sử dụng thực tế là, nếu một chuỗi s là một phần sau của một số xi, sau đó nó cũng là một chuỗi của tất cả các chuỗi xen kẽ có thể có của tất cả các chuỗixi. Xoay cái này đi, nếus không phải là một chuỗi của một chuỗi xen kẽ cụ thể của tất cả các chuỗi xi, sau đó nó không phải là một con của bất kỳ cá nhân nàoxi.

Vì vậy, bạn có thể thử nhiều cách khác nhau để xen kẽ ngẫu nhiên n dây xi thành một chuỗi duy nhất và cho mỗi chuỗi xen kẽ như vậy yj, tìm kiếm đoạn ngắn nhất zj của x+ tránh được việc là một yjsử dụng thuật toán DP đẹp của Aryabhata cho trường hợp hai chuỗi và chọn bất kỳzj là ngắn nhất trong tất cả các xen kẽ bạn đã thử.

Hãy cẩn thận: Không đảm bảo sự tối ưu ngay cả khi chúng tôi thử tất cả các xen kẽ

Đáng ngạc nhiên (ít nhất là với tôi), ngay cả khi bạn lặp lại quy trình trên cho tất cả các xen kẽ có thể, bạn không được đảm bảo để tìm giải pháp tối ưu: Hãy xem xét trường hợp trong đó x+=aaa, n=2x1=x2=a. Sau đóaa là một giải pháp tối ưu với chiều dài 2, nhưng giải pháp ngắn nhất được tìm thấy bằng cách thử tất cả các xen kẽ của x1x2aaa, với chiều dài 3.

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.