Có phải mọi thuật toán thời gian tuyến tính là một thuật toán phát trực tuyến?


14

Trong câu hỏi này về đếm ngược , tôi tìm thấy một bài báo chứng minh giới hạn thấp hơn về độ phức tạp không gian cho tất cả các thuật toán phát trực tuyến (chính xác) . Tôi đã tuyên bố rằng ràng buộc này mở rộng cho tất cả các thuật toán thời gian tuyến tính. Đây là một chút táo bạo như nói chung, một thuật toán thời gian tuyến tính có thể nhảy xung quanh theo ý muốn (truy cập ngẫu nhiên) mà thuật toán phát trực tuyến không thể; nó phải điều tra các yếu tố theo thứ tự. Tôi có thể thực hiện nhiều lần, nhưng chỉ liên tục nhiều lần (đối với thời gian chạy tuyến tính).

Vì vậy, câu hỏi của tôi:

Có thể mọi thuật toán thời gian tuyến tính được thể hiện dưới dạng thuật toán phát trực tuyến với nhiều lần vượt qua không?

Truy cập ngẫu nhiên dường như ngăn cản một công trình (đơn giản) chứng minh câu trả lời tích cực, nhưng tôi cũng không thể đưa ra một ví dụ phản biện.

Tùy thuộc vào kiểu máy, truy cập ngẫu nhiên thậm chí có thể không phải là vấn đề, thời gian chạy. Tôi sẽ quan tâm đến câu trả lời cho các mô hình này:

  • Máy Turing, đầu vào phẳng
  • RAM, đầu vào là mảng
  • RAM, đầu vào như danh sách liên kết

như bạn thấy trong các câu trả lời, "thuật toán phát trực tuyến" thường bao hàm rất nhỏ (không gian polylog). nhưng với động lực của bạn, câu hỏi tôi nghĩ nên là: mọi thuật toán thời gian tuyến tính sử dụng từ của không gian làm việc có thể được chuyển đổi thành thuật toán phát trực tuyến sử dụng không gian từ O ( s ) không. do đó, một ví dụ mẫu sẽ là một vấn đề có thể được giải quyết với không gian o ( n ) với quyền truy cập ngẫu nhiên trong khi bất kỳ thuật toán truyền phát liên tục nào cũng yêu cầu không gian Ω ( n ) . chưa có câu trả lời nào đưa ra một ví dụ như vậysO(s)o(n)Ω(n)
Sasho Nikolov

@SashoNikolov: Trên thực tế, toàn bộ vấn đề không gian là tiếp tuyến. Câu hỏi của tôi chủ yếu là về thời gian chạy. Nếu câu trả lời là "có", thì giới hạn dưới (về độ phức tạp không gian) được chứng minh trong bài báo sẽ áp dụng cho tất cả các thuật toán thời gian tuyến tính. Rằng giới hạn dưới là trên không gian là ngẫu nhiên, nhưng không phải là trọng tâm của câu hỏi.
Raphael

Tôi không hiểu. Thật là tầm thường khi biến thuật toán thời gian tuyến tính thành "truyền phát một lần" với không gian không giới hạn. Câu hỏi của bạn chỉ có ý nghĩa nếu ở dạng "thuật toán truy cập ngẫu nhiên theo thời gian tuyến tính có thể được truyền phát liên tục trong khi vẫn duy trì khoảng đo độ phức tạp ". Vì vậy, bạn nên chọn một biện pháp phức tạp, o / w điều này không có ý nghĩa. μ
Sasho Nikolov

@SashoNikolov: Tôi không biết rằng "thuật toán phát trực tuyến" có vấn đề xác định như vậy. Cho rằng chúng hiển thị một không gian tuyến tính giới hạn thấp hơn cho các thuật toán phát trực tuyến, tôi cho rằng không gian không phải là cốt lõi của định nghĩa. Nhưng tôi đoán bạn có thể dịch ràng buộc thành "Không có thuật toán phát trực tuyến ...". Tuy nhiên, định nghĩa này là gì: "Thuật toán phát trực tuyến là thuật toán được đưa ra một yếu tố đầu vào (danh sách) một lần. Với mỗi phần tử mới, nó có thể thực hiện tính toán trong . Sau khi liên tục nhiều lượt như vậy , nó phải đưa ra câu trả lời sau một thời gian o ( n ) bổ sung . " o(n)o(n)
Raphael

@SashoNikolov: Điều đó sẽ loại trừ các thuật toán "sao chép đầu vào và làm bất cứ điều gì" khỏi khái niệm, nhưng giới hạn nó trong thời gian . Điều đó có phù hợp với lớp thường được ký hiệu không? Nếu không, tôi không nghĩ "phát trực tuyến" có thể được xác định theo thời gian hoặc độ phức tạp không gian một cách hữu ích. Đó đúng hơn là một chiến lược, giống như Tham lam hoặc chia rẽ & chinh phục. o(n2)
Raphael

Câu trả lời:


15

Để các thuật toán phát trực tuyến có ý nghĩa, chúng phải làm việc với lượng không gian làm việc nhỏ hơn đáng kể so với chính đầu vào. Ví dụ: nếu bạn cho phép cùng một không gian làm việc như đầu vào, thì bạn có thể nêu một cách tầm thường bất kỳ thuật toán nào như một thuật toán phát trực tuyến một lượt qua mà trước đó, sao chép đầu vào vào không gian làm việc trong một lần duy nhất và sau đó chỉ sử dụng công việc không gian.

Tôi nghĩ rằng nó là điển hình để hạn chế không gian làm việc ở hầu hết các đa giác trong kích thước đầu vào khi nói về các thuật toán phát trực tuyến. Theo giả định này, lựa chọn trung vị không có thuật toán phát trực tuyến O (1) do kết quả của Munro và Paterson [MP80]: mọi thuật toán phát trực tuyến P cho lựa chọn trung bình trên các phần tử N phải lưu trữ ( N 1 / P ) các yếu tố. Mặt khác, lựa chọn trung vị có thuật toán thời gian tuyến tính xác định nổi tiếng [BFPRT73].

[BFPRT73] Manuel Blum, Robert W. Floyd, Vaughan Pratt, Ronald L. Rivest và Robert E. Tarjan. Giới hạn thời gian để lựa chọn. Tạp chí Khoa học Máy tính và Hệ thống , 7 (4): 448 Từ461, tháng 8 năm 1973. DOI: 10.1016 / S0022-0000 (73) 80033-9

[MP80] J. Ian Munro và Mike S. Paterson. Lựa chọn và sắp xếp với lưu trữ hạn chế. Khoa học máy tính lý thuyết , 12 (3): 315 Kính323 , tháng 11 năm 1980. DOI: 10.1016 / 0304-3975 (80) 90061-4


6

Trong mô hình phát trực tuyến, bạn chỉ được phép lưu trữ dữ liệu bổ sung liên tục hoặc đa logarit trong khi quét qua đầu vào. Nếu bạn xem xét một thuật toán thời gian tuyến tính
tuân theo mô hình phân chia và chinh phục , bạn cần lưu trữ nhiều thông tin hơn và / hoặc bạn nên quét qua dữ liệu của mình nhiều lần theo độ sâu của đệ quy.

Một ví dụ là thuật toán DC3 để xây dựng mảng hậu tố của văn bản (được đưa ra dưới dạng mảng trong mô hình RAM). Để xây dựng một mảng hậu tố, bạn nhóm các ký tự thành các bộ ba, do đó bạn nhận được một văn bản với các siêu ký tự mới . Bạn có thể làm điều này với độ lệch 0 , 1 , 2 , kết quả là ba văn bản mới T 1 , T 2 , T 3 . Điều thú vị là bạn có thể tính toán các mảng hậu tố nếu bạn có các mảng hậu tố của T 1T 2 trong thời gian tuyến tính. Do đó, thuật toán cầnT0,1,2T1,T2,T3T1T2

t(n)=t(2/3n)+O(n)

thời gian. Đệ quy này giải quyết rõ ràng cho . Tôi không thấy làm thế nào điều này có thể được biến thành một thuật toán phát trực tuyến.t(n)=O(n)

Một ví dụ nổi tiếng khác là thuật toán lựa chọn thời gian tuyến tính cổ điển .


Đây là một ví dụ có thể. Xây dựng một heap mất O (n) và sử dụng nội bộ chương trình con heapify () dựa trên heapify ().
Massimo Cafaro

Nhưng đây không phải là một bằng chứng, phải không? bạn chỉ nói rằng một mô phỏng ngây thơ sẽ không hoạt động. nhưng đôi khi có những thuật toán đáng ngạc nhiên
Sasho Nikolov

@SashoNikolov: Điều tôi đang nói là tôi không coi thuật toán DC3 là thuật toán phát trực tuyến, vì nó đòi hỏi nhiều bộ nhớ làm việc. Có thể bạn có thể sửa đổi thuật toán thành thuật toán phát trực tuyến, nhưng kết quả sẽ không phải là DC3. Tôi đã không thảo luận, liệu có tồn tại một thuật toán phát trực tuyến để xây dựng mảng hậu tố hay không. Đây sẽ là một câu hỏi hoàn toàn khác. O(n)
A.Schulz

"Tôi không thấy làm thế nào điều này có thể biến thành thuật toán phát trực tuyến" khiến tôi tin rằng bạn đang nói điều gì đó ngoài "thuật toán này không phát trực tuyến mà không sửa đổi"
Sasho Nikolov

4

P

  • R(P)P
  • S(P)P

R(P)S(P)

n[1,n1]O(logn)O(1)ω(logn)

O(1/log2n)ps=Ω(n)psO(log2n)


1

Ngay cả trong định nghĩa đơn giản nhất về "thuật toán phát trực tuyến" (một thuật toán mà sau mỗi lần lặp tăng dần trên nguồn, sẽ dẫn đến kiến ​​thức tức thời về phần tăng dần tiếp theo của kết quả), tôi có thể nghĩ về một vài thuật toán tuyến tính không cư xử theo cách đó Các thuật toán băm là một thuật toán lớn; FNV-1a là tuyến tính với số byte trong nguồn, nhưng chúng tôi không biết bất kỳ phần nào của hàm băm cuối cùng cho đến khi toàn bộ nguồn được xử lý.

RadixSort hay còn gọi là BuckSort là O (N) (về mặt kỹ thuật là O (NlogM) trong đó M là giá trị tối đa trong các mục N, được coi là nhỏ) và phải chạy toàn bộ để đảm bảo rằng mọi mục riêng lẻ đều ở vị trí cuối cùng.

Để trở thành thuật toán "truyền phát", đơn giản nhất, thuật toán phải có hai thuộc tính sau, cả hai thuộc tính này đều bị ràng buộc theo thời gian:

  • Độ phức tạp không gian tốt hơn O (N) (được nêu tương đương, toàn bộ nguồn không cần phải biết và toàn bộ kết quả không phải được lưu trữ)
  • Mối quan hệ I / O O (N) (thuật toán tạo ra một số đầu ra tỷ lệ tuyến tính với đầu vào của nó)

Do đó, lớp chính của các thuật toán truyền phát là các thuật toán thực hiện "các phép chiếu" (các phép biến đổi gia tăng của một đầu vào thành các đầu ra X> 0).


O(logn)ω(1)

logN cũng tốt; điểm quan trọng là thuật toán không cần kiến ​​thức về toàn bộ đầu vào hoặc đầu ra cùng một lúc.
KeithS

An Ω(n)yêu cầu không gian không có nghĩa là nó cần toàn bộ đầu vào tiện dụng (nghĩa là nó không phải là thuật toán phát trực tuyến). Nhưng tôi nhận được quan điểm của bạn.
Raphael
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.