Giả sử bạn đang nhận được một số (sử dụng bit O ( log m ) trong mã hóa nhị phân).
Làm thế nào nhanh chóng, bạn có thể tìm thấy (hoặc xác định như vậy không tồn tại) ?
Ví dụ: với đầu vào , người ta có thể xuất .n = 27 , k = 10
Một thuật toán ngây thơ cho vấn đề sẽ đi qua tất cả các giá trị có thể có cho và tìm kiếm giá trị thỏa mãn tính chất.
Một quan sát đơn giản là không có cần phải kiểm tra giá trị của nhỏ hơn log m hoặc lớn hơn O ( √. Tuy nhiên (ngay cả khi chúng ta chỉ có thể kiểm traO(1)giá trịkcó thể cótrên mỗi giá trịn) thì điều này kết thúc bằng một thuật toán không hiệu quả theo cấp số nhân trong kích thước đầu vào.
Một cách tiếp cận thay thế sẽ được đi qua các giá trị có thể có của (đó là đủ để kiểm tra { 2 , 3 , ... , 2 log m } ) và cho mỗi lần kiểm tra cho tốt n giá trị. Sau đó chúng ta có thể sử dụng: ( n
Vì vậy, đối với một trao chúng ta chỉ cần kiểm tra n giá trị trong khoảng [ k √, Làm như vậy bằng cách sử dụng tìm kiếm nhị phân (khikcố định, ( n đang tăng đơn điệu trongn), điều này mang lại một thuật toán đa thức chạy trongO(log2m).
Điều này vẫn có vẻ không hiệu quả đối với tôi và tôi đoán rằng điều này có thể được giải quyết trong thời gian tuyến tính (ở kích thước đầu vào).