Quyết định xem một chuỗi ký tự đại diện có khớp hoàn toàn với một chuỗi ký tự đại diện khác trong một bộ không


9

Đây là một vấn đề đã được tôi làm phiền trong một thời gian. Giả sử một chuỗi là một chuỗi 1 và 0 và chuỗi ký tự đại diện là một chuỗi 1, 0 và? S. Tất cả các chuỗi và chuỗi ký tự đại diện có cùng độ dài. Đây là các ký tự đại diện UNIX tiêu chuẩn; 10 ?? 1 khớp với 10011, 10111, v.v - a? khớp với 1 hoặc 0 ở vị trí đó. Nếu w là các chuỗi ký tự đại diện, thì chúng ta viết v w nếu mọi chuỗi khớp với v cũng được khớp với w .vwvwvw

Những vấn đề : đưa ra một tập các chuỗi ký tự đại diện, và một truy vấn v (cũng là một chuỗi ký tự đại diện), không có tồn tại một w Sv w ? Và nếu không, chúng ta có thể thêm v vào S một cách hiệu quả không?SvwSvwvS

Đây là chữ O rõ ràng ( kgiải pháp (trong đóklà kích thước của chuỗi,mlà kích thước từ của RAM (thường là 32 hoặc 64)): đi qua từng phần tử của danh sách và kiểm tra điều kiện (có thể được thực hiện trong 2 hoặc 3 thao tác sử dụng twiddling). Ngoài ra kiểm tra nếuvwgiữ cho bất kỳ mụcwtrong khi chúng tôi quét tôi. Nếuvthất bại trong bài kiểm tra của chúng tôi, sau đó thêmvvào tập hợp và xóawchúng tôi đã đánh dấu.O(kmn)kmvwwvvw

Nhưng điều đó không đủ nhanh. Sẽ thật tuyệt nếu có một giải pháp , hoặc, trong một thế giới hoàn hảo, độ phức tạp tương tự như cây cơ số ( O ( k ) ). Các truy vấn cũng gần đúng : nghĩa là, nếu v w , thì trả về có hoặc không; nhưng nếu điều kiện không giữ chắc chắn sẽ không có.O(logn)O(k)vw

Mặc dù điều này không giúp ích cho sự phức tạp trong trường hợp xấu nhất, bạn có thể giả sử rằng tất cả các phần tử trong được giới hạn bởi một chuỗi ký tự đại diện; đó là, tồn tại một số v sao cho tất cả w S , v w .SvwSvw

Ý tưởng tôi đã thử

  • O(n)
  • SS

Công việc có liên quan

  • Trong cộng đồng mạng, vấn đề này biểu hiện là "phân loại gói", đây là một khảo sát tốt về các thuật toán và cấu trúc dữ liệu đã biết . Thật không may, giả định hầu như luôn được đưa ra là các chuỗi ký tự đại diện chỉ khớp với các tiền tố và truy vấn là một chuỗi các chuỗi như vậy. Tất nhiên, chúng ta luôn có thể chuyển đổi một chuỗi ký tự đại diện chung để đáp ứng các tiêu chí sau: 1? 00? 1 ?? là (1,?, 0, 0,?, 1,?,?). Điều này sẽ không hiệu quả, mặc dù. Giả định khác được đưa ra là các bộ dữ liệu này được liên kết với một "màu" và truy vấn sẽ trả về màu sắc (không chỉ là nó phù hợp). Điều này làm cho vấn đề trở nên khó khăn hơn nhiều, bởi vì chúng ta phải đặt hàng các bộ dữ liệu (hoặc nếu không thì nó không rõ ràng giữa (0 ,?) Và (?, 1) phù hợp (0, 1)).

  • Trong cộng đồng thuật toán, tôi đã tìm thấy rất nhiều kết quả liên quan đến việc tìm các chuỗi con khớp với "không quan tâm". Đây là một vấn đề khó khăn hơn đáng kể và tôi thực sự không thể sử dụng bất kỳ kỹ thuật nào.

Tóm lại là

Cảm ơn vì bất kì sự giúp đỡ!


1
Ω(logn)nO(n)o(n)

O(1)vw

O(n)

Câu trả lời:


3

SO(k)

S

Đối với việc thêm chuỗi vào máy, có một số công việc gần đây về việc thay đổi tự động trạng thái hữu hạn tăng dần. Xem bài viết này của Daciuk et al: "Xây dựng tăng dần của tự động trạng thái hữu hạn theo chu kỳ tối thiểu".

Không giúp đỡ à?


Tôi đã xem xét automata, yeah (những gì tôi đang làm với bộ ba tương tự như cách người ta chấp nhận một chuỗi với automata). Tuy nhiên, tôi đã không tìm thấy công việc như vậy trong việc tăng dần xây dựng automata nói. Tôi sẽ kiểm tra xem, cảm ơn vì con trỏ ShyPerson.
Christopher Monsanto

Tôi đã trích dẫn Daciuk, et al giấy vì nó dường như gần nhất với những gì bạn đang cố gắng đạt được. Nhưng tôi nghĩ rằng điều đáng nói là vấn đề đã được giải quyết gần đây hơn đối với máy tự động trạng thái hữu hạn tùy ý của Carrasco và Forcada trong bài báo "Xây dựng và bảo trì tự động tối thiểu tự động": mitpressjournals.org/doi/abs/10.1162/ ...
ShyPerson

OK, tôi không nghĩ rằng tôi sẽ nhận được nhiều từ chủ đề này, vì vậy tôi chấp nhận câu trả lời của bạn. Cảm ơn!
Christopher Monsanto
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.