Cho một chuỗi s, cách hiệu quả nhất để xác định các siêu kết quả ngắn nhất của s từ một chuỗi dây là gì? Ngoài ra, ký tự cuối cùng của s phải khớp với ký tự cuối cùng của siêu dây.Hậu quả từ một túi dây
Trả lời
Trừ khi tôi hiểu lầm nó, vấn đề này là chắc chắn nhất trong P.
Một cách tiếp cận ngây thơ sẽ là:
- Mang tất cả các chuỗi trong B kết thúc với cùng một nhân vật như s. Gọi cái túi mới này B '. Có thể được thực hiện trong O (| B |)
- Chọn tất cả các chuỗi là các kết quả siêu s trong túi B '. Nó có thể được thực hiện trong O (| B '| * max (| z |)) cho z trong B. Kiểm tra nếu một chuỗi đã cho là một chuỗi của một chuỗi z khác có thể được thực hiện trong O (| z |)
- Chọn chuỗi ngắn nhất trong số các chuỗi được tìm thấy trước đây (trong O (| B '|))
Where | x | có nghĩa là kích thước của x.
Bạn có thể kết hợp các bước đó, nhưng dù sao thì nó cũng là O (| B | * max (| z |)).
Điều gì xảy ra nếu không có chuỗi trong túi là hậu quả của các chuỗi kết thúc bằng một số ký tự? Nếu không có, bạn không thể liệt kê tất cả các chuỗi có thể trong thời gian đa thức, vì có nhiều số mũ trong số đó. – templatetypedef
@templatetypedef thì câu trả lời là 'hậu quả như vậy không tồn tại'. OP đang tìm kiếm hậu quả af một chuỗi đã cho trong túi, cũng được đưa ra. Nếu anh ta không tìm thấy nó, vì vậy hãy là nó. – soulcheck
Rất tiếc ... Tôi đã đọc sai câu hỏi! Tôi nghĩ rằng OP đã yêu cầu tìm, đưa ra một túi dây, hậu quả ngắn nhất của túi. Vấn đề đó là NP-hard. Câu hỏi thực tế không quá khó. Lời xin lỗi của tôi! – templatetypedef
Giả sử túi không thay đổi thường xuyên, tôi sẽ tạo một DAWG và tìm kiếm bằng A *.
Chạy qua từng chuỗi trong túi, kiểm tra xem s
có phải là chuỗi con sử dụng tìm kiếm chuỗi nhanh như KMP không. Kiểm tra xem superstrings nào là ngắn nhất. Đây là O(Σlength of strings in bag)
.
Nếu bạn cần thực hiện tìm kiếm nhiều lần, bạn có thể tạo một dấu đầu dòng cho mỗi chuỗi trong túi và hợp nhất các số này. Sau đó, bạn có thể thực hiện tra cứu trong O(|s|)
.
- 1. Hậu quả chung dài nhất
- 2. "quả cầu trong túi" để chiếu hình cầu
- 3. Hậu quả của bit này là gì?
- 4. Prolog findall/3: nhiều hơn một túi
- 5. Flatten tuple giống như một túi
- 6. dây Loại bỏ từ một chuỗi trong java
- 7. Hậu quả của việc cho phép sử dụngLegacyV2RuntimeActivationPolicy?
- 8. Hậu quả của việc sử dụng ghép trong Mercurial
- 9. Tạo túi dữ liệu đầu bếp từ công thức
- 10. Hậu quả của lỗi tràn bộ đệm này?
- 11. Hậu quả của việc không sử dụng một thuộc tính lang trong một thẻ html5 html
- 12. Android: Hậu quả của việc nhắm mục tiêuSDK> BuildTarget
- 13. Hậu quả tăng dài nhất (LIS) với hai số
- 14. Làm thế nào để tạo ra một túi từ bằng cách sử dụng Weka?
- 15. Cần một ví dụ C# về những hậu quả không mong muốn
- 16. Mercurial: hậu quả của việc thay đổi một pha là gì?
- 17. Hậu quả của việc tự động viết lại một hàm trong javascript?
- 18. Thuật toán Nhanh (er) cho Độ dài của Hậu quả Chung Dài nhất (LCS)
- 19. Dây kéo hai chiều
- 20. Mảng hậu tố và cây hậu tố
- 21. Dây EventHandlers
- 22. Kết hợp vectơ dây
- 23. ULL hậu tố vào một số chữ
- 24. Hậu quả của mã tuân thủ NON-CLS trong .NET là gì?
- 25. Hậu quả của việc tạo chi nhánh từ thư mục con của thư mục trong SVN là gì?
- 26. Hậu quả của việc bỏ qua việc thu hẹp chuyển đổi trong C++ 0x
- 27. Trả lại nhiều kết quả từ một phương thức
- 28. Nhận kết quả từ một số AsyncTasks
- 29. bắt một git hậu nhận lỗi trong một kịch bản
- 30. Sử dụng đường dây để xóa phần tử từ mảng
Bạn có nghĩa là, bạn có một túi như '{" abbc "," abbbbb "," ba "}' và một chuỗi như '" bb "' và muốn tìm ra rằng '" abbc "' là chuỗi siêu ngắn nhất của '" bb "' trong túi? Bạn có thể làm điều này trong 'O (| s |)' nếu bạn lưu trữ các chuỗi của bạn trong một cơ sở dữ liệu thích hợp. –
Không hoàn toàn @ThomasAhle, trong ví dụ của bạn, đầu ra phải là 'abbbbb' vì bb và đầu ra phải có cùng ký tự cuối cùng. –
Ok, do đó, 's' phải là một postfix. Và với '{" abb "," abba "," aabb "," a "}' câu trả lời sẽ là '" abb "', đúng không? Điều đó sẽ làm cho vấn đề trở nên dễ dàng hơn. –