Hãy xem xét vấn đề sau:
Đầu vào : liệt kê của số nguyên
Mục tiêu : xác định xem có tồn tại một số nguyên trong cả hai danh sách hay không.
Giả sử cả hai danh sách đều có kích thước . Có một thuật toán xác định, thời gian tuyến tính cho vấn đề này? Nói cách khác, bạn có thể giải quyết vấn đề này trong thời gian xác định, mà không sử dụng tính ngẫu nhiên không?n O ( n )
Thật không may, bạn không thể cho rằng các thành phần danh sách đều nhỏ.
Tôi có thể thấy làm thế nào để giải quyết nó trong dự kiến thời gian sử dụng một thuật toán ngẫu nhiên: ngẫu nhiên chọn một 2-phổ hàm băm , lưu trữ các phần tử của vào một Hashtable (sử dụng là hàm băm), và sau đó nhìn lên từng phần tử của để xem nó có trong hashtable không. Thời gian chạy dự kiến sẽ là . Tuy nhiên, tôi không thể thấy cách tìm thuật toán xác định với thời gian chạy . Nếu bạn cố gắng giải mã điều này và sửa một hàm băm cụ thể, sẽ tồn tại một trường hợp xấu nhất khiến quy trình này chạy trongh X h Y O ( n ) O ( n ) Θ ( n 2 )thời gian. Thuật toán xác định tốt nhất tôi có thể tìm thấy liên quan đến việc sắp xếp các giá trị, nhưng đó sẽ không phải là thời gian tuyến tính. Chúng ta có thể đạt được thời gian chạy tuyến tính?
Ngoài ra, tôi có thể xem cách giải quyết nó trong thời gian tuyến tính nếu bạn giả sử rằng tất cả các phần tử danh sách là các số nguyên trong phạm vi (về cơ bản, thực hiện đếm sắp xếp) - nhưng tôi quan tâm đến những gì xảy ra trong chung trường hợp khi chúng ta không thể cho rằng.
Nếu câu trả lời phụ thuộc vào mô hình tính toán, mô hình RAM sẽ nhảy vào tâm trí, nhưng tôi sẽ quan tâm đến kết quả cho bất kỳ mô hình tính toán hợp lý nào. Tôi biết về giới hạn thấp hơn cho thuật toán cây quyết định về tính duy nhất của phần tử , nhưng điều này không dứt khoát, vì đôi khi chúng ta có thể tìm thấy thuật toán thời gian tuyến tính ngay cả khi có ràng buộc trong mô hình cây quyết định.Ω ( n log n )