Độ phức tạp bit của truy vấn phạm vi thời gian O (1) trong mảng -ary


8

Hãy xem xét vấn đề sau:

Gọi là hằng số. Chúng tôi được cung cấp một mảng -ary là và 's. Đặt .k Một d 1 × ... × d k 0 1 N = Π k i = 1 d ikkAd1××dk01N=i=1kdi

Chúng tôi muốn tạo cấu trúc dữ liệu bằng cách tiền xử lý để thực hiện loại hoạt động truy vấn sau:A

  1. Cho tọa độ của hộp -ary , có trong hộp không? D 1kD1
  2. Cho tọa độ của hộp -ary , trả về vị trí của trong hộp (nếu có).D 1kD1

Các hoạt động phải được thực hiện trong thời gian không đổi . Độ phức tạp thời gian được đo trên máy RAM. Thời gian tiền xử lý và không gian cho cấu trúc dữ liệu không quan trọng đối với chúng tôi.O(1)

Câu hỏi đặt ra là chúng ta cần bao nhiêu dung lượng (tính phức tạp bit) để lưu trữ cơ sở hạ tầng cho phép các hoạt động trên?

Giới hạn dưới tầm thường là bit do mảng có thể được xây dựng lại cho các truy vấn này (vì vậy cấu trúc dữ liệu nên có ít nhất cùng một lượng thông tin trong đó).N

Giới hạn trên tầm thường là lưu trữ câu trả lời cho tất cả các truy vấn. Điều đó sẽ cần i=1k(di2)=Θ(N2) bit. Tuy nhiên chúng tôi nghi ngờ rằng điều này có thể được thực hiện hiệu quả hơn nhiều.

Ví dụ, hãy xem xét trường hợp đặc biệt trong đó k=1 . Trong trường hợp này, chúng ta có thể sử dụng cấu trúc dữ liệu RMQ cô đọng để giải quyết vấn đề đầu tiên và cấu trúc dữ liệu cần các bit 2N+o(N) để lưu trữ.

Cấu trúc dữ liệu hiệu quả cho nhiệm vụ này là gì?
Độ phức tạp không gian (số bit) có thể thấp đến mức nào để hỗ trợ các hoạt động này (hoặc chỉ hoạt động đầu tiên)?

Cập nhật (1/15): Trong trường hợp đặc biệt , sử dụng bit là đủ (thực sự tốt hơn, , trong đó là số Trong ) bằng cách giảm vấn đề thành vấn đề của người tiền nhiệm và sử dụng việc giảm từ vấn đề của người tiền nhiệm sang từ điển có thể lập chỉ mục đầy đủ (FID). Xem " H vội vàng hơn, ít lãng phí hơn: Giảm sự dư thừa trong từ điển hoàn toàn có thể lập chỉ mục " của Grossi, Desserti, Raman và Rao (2009).k=1N+o(N)log(Nt)+O(t)t1A

Cập nhật (27/11): Một lần nữa bằng cách giảm vấn đề xuống RMQ. Chúng tôi sử dụng một RMQ chiều bởi Yuan và Atallah để có được một trên ràng buộc về số lượng không gian cần thiết khi là cố định.kO(nlogn)k


1
Câu hỏi không rõ ràng: đây có phải là một câu hỏi về cấu trúc dữ liệu? Nếu vậy các hoạt động khác trên mảng kD này là gì? Nếu không có hoạt động khác thì không có 1 trên đó. Nếu câu hỏi là chúng ta được cung cấp một mảng kD và phải thực hiện một số tiền xử lý trên nó và sau đó lưu trữ nó sao cho chúng ta sử dụng ít bộ nhớ nhưng có thể thực hiện thao tác kiểm tra này trong trường hợp xấu nhất thì hãy làm rõ điều đó. Cũng giải thích mô hình tính toán là gì nếu bạn muốn giới hạn dưới. O(1)
Kaveh


IIUC, bài báo cho biết câu trả lời cho 1D thực sự là các bit và ý tưởng là lưu trữ tất cả các hộp nhỏ cộng với tất cả các hộp có độ dài công suất 2 và các hộp khác có thể được lấy từ các hộp len pow-2 không đổi thời gian ( ) và dường như với tôi rằng điều tương tự sẽ hoạt động ở đây và các bit sẽ là đủ. O(nlgn)O(2k)O(nklgkn)
Kaveh

Cảm ơn, tôi đã thêm một số làm rõ. Không phải bài báo nói rằng đóng góp chính của họ là sử dụng các bit trong cả tiền xử lý và lưu trữ? 2n+o(n)
Chao Xu

Xin lỗi, cái tôi mô tả là từ công việc trước đó. Tuy nhiên, kết quả của chúng có vẻ giống nhau về mặt khái niệm, tức là chúng chia mảng thành các khối, tính toán trước câu trả lời và sử dụng một số lượng không đổi trong số chúng để tính toán câu trả lời cho bất kỳ câu hỏi nào. Nếu trong kD, số khối cơ sở mà người ta cần tính toán câu trả lời cho một khối tùy ý là một hằng số thì một thuật toán tương tự sẽ hoạt động ở đây và có thể cung cấp một cái gì đó như (Tôi ẩn ' t kiểm tra xem đây là trường hợp). O(nk)=O(N)
Kaveh

Câu trả lời:


1

Bạn có thể tiết kiệm nhiều hơn cho bộ nhớ nếu bạn chỉ cho phép độ phức tạp thời gian logarit. Bạn có thể triển khai cây phân đoạn kD sẽ cần bộ nhớ bit N * 2 ^ k và chạy theo độ phức tạp thời gian logarit cho cả hai nhiệm vụ và độ phức tạp thời gian tuyến tính để xây dựng cây.

Nếu bạn thực sự muốn O (1), hãy tính toán trước mọi thứ.


2
Bạn có thể phác thảo làm thế nào cây được xây dựng trong thời gian logarit?
Raphael

xin lỗi, nó được xây dựng theo thời gian tuyến tính
Bojan Serafimov

2
@BojanSerafimov Bạn nên cập nhật câu trả lời sau đó :) Nhận xét có thể bị xóa.
Juho

1
Tôi nghĩ rằng đây có thể là một câu trả lời tốt, nếu bạn chỉ chỉnh sửa nó cho đúng và có thể một chút chi tiết hơn về những cái cây này trông như thế nào và cách bạn xây dựng chúng.
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.