Đâ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 và 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 .
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 ∈ S mà v ≤ 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?
Đâ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ếuv≥wgiữ 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.
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ó.
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 .
Ý tưởng tôi đã thử
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 đỡ!