Thuật toán để đuổi theo một mục tiêu di động


20

Giả sử rằng chúng ta có một hộp đen mà chúng ta có thể truy vấn và đặt lại. Khi chúng ta đặt lại f , trạng thái f S của f được đặt thành một phần tử được chọn ngẫu nhiên từ bộ { 0 , 1 , . . . , n - 1 } trong đó n là cố định và được biết với f . Để truy vấn f , một phần tử x (đoán) từ { 0 , 1 , . . . , n - 1 }fffSf

{0,1,...,n1}
nffx
{0,1,...,n1}
được cung cấp và giá trị được trả về là . Ngoài ra, trạng thái của được đặt thành giá trị , trong đó được chọn thống nhất ngẫu nhiên từ(fSx)modnfSffS=fS±kk
{0,1,2,...,n/2((fSx)modn)}

Bằng cách thực hiện các lần đoán ngẫu nhiên thống nhất với mỗi truy vấn, người ta sẽ phải thực hiện lần đoán trước khi nhận , với phương sai (được nêu mà không cần chứng minh).nfS=xn2n

Một thuật toán có thể được thiết kế để làm tốt hơn (nghĩa là tạo ra ít dự đoán hơn, có thể với ít phương sai hơn về số lần đoán)? Nó có thể làm tốt hơn bao nhiêu (nghĩa là thuật toán tối ưu là gì và hiệu năng của nó là gì)?

Một giải pháp hiệu quả cho vấn đề này có thể có ý nghĩa tiết kiệm chi phí quan trọng khi bắn vào một con thỏ (bị giam cầm trên đường đua tròn) trong một căn phòng tối.


Tôi không chắc liệu bắn thỏ có phải là khoa học máy tính hay không.
Dave Clarke

6
@DaveClarke Nhưng nếu bạn có thể bắn thỏ, bạn đã giải quyết vấn đề tạm dừng cho thỏ.
Patrick87

@DaveClarke Không phải là bắn các vệ tinh vào không gian, nhưng tính toán vị trí của vệ tinh là. Câu hỏi này không hoàn toàn không giống như tiền điện tử.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


13

Trước hết, tôi sẽ cho rằng

Ngoài ra, trạng thái của được đặt thành giá trị , trong đó được chọn thống nhất ngẫu nhiên từfSffS=fS±kk

{0,1,2,...,n/2((fSx)modn)}

ý bạn là

Ngoài ra, trạng thái của được đặt thành giá trị , trong đó được chọn thống nhất ngẫu nhiên từfSffS=fS+kmodnk

{|n2((fSx)modn)|,,1,0,1,2,,|n2((fSx)modn)|}

khác, không hoàn toàn rõ ràng rằng luôn giữ và cách chính xác hành xử.fS{0,...,n1}fS±k

Sử dụng điều này, vấn đề cơ bản là "thiếu càng nhiều càng tốt". Quan sát rằng chúng ta càng bắn con thỏ càng gần, hoa bia càng lớn; trong trường hợp cực đoan, chúng ta có . Điều này dẫn đến một bước nhảy đồng đều giữa và , về cơ bản hoàn toàn ngẫu nhiên vị trí của thỏ một lần nữa. Mặt khác, nếu chúng ta bỏ lỡ càng nhiều càng tốt - bởi phần bù của , con thỏ thực sự không di chuyển chút nào (!) hộp đen thực sự cập nhật cho chúng ta về thực tế này. Do đó, chúng ta chỉ có thể quay lại và bắn con thỏ.fSx=±1modn(n/2±1)(n/2±1)fSxmodn=n/2

Chúng tôi còn lại với việc tìm kiếm một thủ tục mất tích ngày càng tăng trong mỗi lần chụp. Tôi đề xuất một "tìm kiếm nhị phân" đơn giản. (Tôi sẽ thuận tiện bỏ qua việc làm tròn.) Nó tiến hành đại khái như sau:

  1. Đặt lại và bắn vào một vị trí tùy ý cho đến khi bạn nhận được từ hộp đen câu trả lờiĐiều này cần một số lượng không đổi các bước trong kỳ vọng.(fSxmodn){14n,...,34n}.
  2. Bây giờ, chúng ta biết rằng vị trí trong quá khứ của thỏ và nó không di chuyển nhiều hơn bước theo một trong hai hướng. Điều này về cơ bản giảm một nửa không gian tìm kiếm của chúng tôi trong lần lặp tiếp theo, vì thỏ phải ở vị trífS14nfS{(fS14n)modn,...,fS,...,(fS+14n)modn}
  3. Recurse: Chụp ở vị trí . Với xác suất , vị trí con thỏ nhảy lên trong bước 1 & 2 nằm trong phạm vi . Trong trường hợp đó, chúng tôi giảm một nửa không gian tìm kiếm một lần nữa. Với xác suất , con thỏ không nhảy trong phạm vi đó, nhưng vì chúng ta biết rằng , chúng tôi có các giả định tương tự như trong bước (2) và do đó không mất gì.fSn/2modn1/2fS{fS18n,...,fS,...,fS+18n}1/2fSxmodn=fSfS+n/2modn{12n14n,...,12n+14n}

Mỗi bước cần thời gian dự kiến ​​để thành công và giảm một nửa không gian tìm kiếm, mang lại tổng số số bước dự kiến.2=O(1)O(logn)

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.