Các vấn đề không cần thiết có thể giải quyết trong thời gian liên tục?


14

Thời gian không đổi là mức độ thấp tuyệt đối của độ phức tạp thời gian. Người ta có thể tự hỏi: có bất cứ điều gì không cần thiết có thể được tính toán trong thời gian liên tục? Nếu chúng ta dính vào mô hình máy Turing, thì không thể thực hiện được nhiều, vì câu trả lời chỉ có thể phụ thuộc vào một phân đoạn ban đầu có độ dài không đổi, vì các phần xa hơn của đầu vào thậm chí không thể đạt được trong thời gian không đổi.

Mặt khác, nếu chúng ta áp dụng mô hình RAM chi phí đơn vị mạnh hơn (và thực tế hơn), trong đó các hoạt động cơ bản trên các số -bit được tính là các bước đơn lẻ, thì chúng ta có thể giải quyết nhiệm vụ không cần thiết, ngay cả trong thời gian liên tục. Đây là một ví dụ:O(logn)

Sơ thẩm: Các số nguyên , mỗi số được định dạng nhị phân theo các bit .O ( log n )n,k,l,dO(logn)

Câu hỏi: Có tồn tại biểu đồ -vertex, sao cho kết nối đỉnh của nó là , kết nối cạnh của nó là và mức độ tối thiểu của nó là ?k l dnkld

Lưu ý rằng từ định nghĩa, thậm chí không rõ ràng rằng vấn đề nằm ở NP . Lý do là nhân chứng tự nhiên (biểu đồ) có thể cần mô tả dài , trong khi đầu vào chỉ được cung cấp bởi các bit . Mặt khác, định lý sau (xem Lý thuyết đồ thị cực trị của B. Bollobas) đến để giải cứu.O ( log n )Ω(n2)O(logn)

Định lý: Gọi là các số nguyên. Tồn tại một đồ thị -vertex với kết nối đỉnh , kết nối cạnh và độ tối thiểu , nếu và chỉ khi một trong các điều kiện sau được thỏa mãn:n k l dn,k,l,dnkld

  • 0kld<n/2 ,
  • 12d+2nkl=d<n1
  • k=l=d=n1.

Vì các điều kiện này có thể được kiểm tra theo thời gian không đổi (trong mô hình RAM chi phí đơn vị), Định lý dẫn đến thuật toán thời gian không đổi trong mô hình này.

Câu hỏi: một số ví dụ không cần thiết khác của thuật toán thời gian không đổi là gì?


6
Có xác minh số lượng bằng chứng kiểm tra xác suất?
David Eppstein

6
Đừng nghĩ ví dụ của bạn là lần. Đầu vào của bạn có độ dài , trong trường hợp đó, RAM từ thông thường sẽ chỉ cho phép các hoạt động của quỹ O ( log m ) trong một bước. (Cách khác là để cho phép wordsize tỉ lệ với chiều dài đầu vào, nhưng trong trường hợp đó người ta có thể đặt tên cho nhiều "liên tục thời gian" thuật toán ...) Bạn có thể cố gắng thêm vào một chuỗi có độ dài n sau những con số này, nhưng sau đó tôi không thấy cách kiểm tra định dạng mà có thể chạy trong O ( 1 ) thời gian: có vẻ như bạn phải kiểm tra (thông qua tìm kiếm nhị phân, nói) mà tổng chiều dài chuỗi thực sự là Ω ( log n )O(1)m=O(logn)O(logm)nO(1)Ω(logn), đòi hỏi thời gian . logn
Ryan Williams

4
Tôi nghĩ đề xuất của David Eppstein chỉ ra một hướng thú vị hơn: xem xét các thuật toán thời gian O (1) ngẫu nhiên . Ít nhất trong trường hợp đó, bạn có thể hy vọng rằng mọi bit đầu vào được truy cập trong ít nhất một lần chạy thuật toán có thể.
Ryan Williams

4
Một ví dụ đơn giản về thuật toán thời gian O (1) ngẫu nhiên là trung bình gần đúng (gần đúng theo nghĩa là nó sẽ phân chia đầu vào khoảng 50-50). Chỉ cần chọn ngẫu nhiên 1000000 phần tử từ đầu vào một cách ngẫu nhiên, tính toán trung vị của chúng và xuất nó.
Jukka Suomela

5
Tôi thích bạn đặt câu hỏi nhưng nhược điểm của ví dụ của bạn là nó dựa trên một định lý toán học. Đẩy điều này đến giới hạn bạn có thể nói: Instance Số nguyên dương . Câu hỏi Có số nguyên n > 2 sao cho x n + y n = z n (câu trả lời là Đúng hay Sai). Vâng, thực sự có một thuật toán thời gian không đổi bởi vì câu trả lời luôn luôn là Sai, nhưng đây rõ ràng không phải là loại ví dụ bạn muốn. x,y,zn>2xn+yn=zn
J.-E.

Câu trả lời:



5

Có nhiều ví dụ về các trò chơi được nghiên cứu trong lý thuyết trò chơi kết hợp trong đó trạng thái của trò chơi có thể được mô tả bằng một số lượng giá trị nguyên không đổi. Đối với một số trong số này, một chiến lược chiến thắng cho trò chơi có thể được tính toán trong thời gian liên tục. Nhưng họ cũng đặt ra câu hỏi về chính xác mô hình tính toán của bạn là gì.

Một trong những trò chơi kết hợp đơn giản và cơ bản nhất là nim: một trò chơi có số lượng đậu không đổi, và trong một lần di chuyển, bạn có thể loại bỏ bất kỳ số lượng đậu nào từ một đống, dù thắng hay thua (tùy thuộc vào quy tắc bạn chọn) nếu bạn lấy hạt đậu cuối cùng Chiến lược tối ưu có thể được tính trong thời gian không đổi nếu bạn cho phép các phép toán Boolean xor bitwise (tức là toán tử ^ trong các ngôn ngữ lập trình như C / C ++ / Java / vv.) Đây có phải là thuật toán thời gian không đổi trong mô hình của bạn không?

Đây là một trong đó người ta biết rằng tồn tại một thuật toán xác định chính xác thời gian không đổi (trong một mô hình tính toán mở rộng có thể không thực tế cho phép bạn kiểm tra tính nguyên thủy của một số trong thời gian không đổi) nhưng không biết thuật toán đó là gì: bắt đầu di chuyển trong trò chơi của đồng tiền Sylver , xác định xem đó là một nước cờ thắng hay thua. Một sơ đồ cho vấn đề này được đưa ra trong Berlecamp, Conway và Guy, Winning Way , nhưng nó phụ thuộc vào một bộ phản biện hữu hạn cho một đặc điểm chung của các nước cờ chiến thắng, và không biết đó là gì (hay thậm chí là nó là gì trống).

Một ví dụ thú vị khác từ lý thuyết trò chơi kết hợp là trò chơi của Wythoff. Mỗi vị trí trò chơi có thể được mô tả bằng một cặp số nguyên (nghĩa là không gian không đổi, trong mô hình tính toán của bạn), di chuyển trong trò chơi liên quan đến việc giảm một trong hai số nguyên này xuống một giá trị nhỏ hơn và chiến lược chiến thắng liên quan đến việc di chuyển đến vị trí trong đó tỷ lệ giữa hai số nguyên này càng gần với tỷ lệ vàng càng tốt. Nhưng trong nhiều vị trí trò chơi, có một sự lựa chọn: bạn có thể giảm số nguyên lớn hơn của hai số nguyên xuống điểm (gần) số nguyên nhỏ hơn nhân với tỷ lệ vàng hoặc số nguyên nhỏ hơn chia cho tỷ lệ vàng. Chỉ một trong hai lựa chọn này sẽ là một nước cờ chiến thắng. Vì vậy, chiến lược tối ưu có thể được xác định theo số lượng các phép toán số học không đổi, nhưng các hoạt động này liên quan đến một số vô tỷ, tỷ lệ vàng. Đó có phải là một thuật toán thời gian không đổi trong mô hình của bạn? Có lẽ nó 'nlogn


Cảm ơn bạn, đây là tất cả các ví dụ thú vị. Họ cũng làm sáng tỏ sự thật rằng khái niệm "thời gian không đổi" không rõ ràng hơn tôi nghĩ ban đầu ...
Andras Farago

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.