Tôi sẽ không chắc chắn một thuật toán như vậy không tồn tại; chắc chắn có những thuật toán rất gần Bên dưới, là , là , là logarit lặp và là .log 2 n log ( k ) n log ... log ⏟ k lần n log * n ~ O ( t ( n ) ) O ( t ( n ) polylog ( t ( n ) ) )đăng nhậpnđăng nhập2nđăng nhập( k )nlog ... logk lầnnđăng nhập*nÔi~( t ( n ) )Đa giác O ( t ( n )( t ( n ) ) )
Đề xuất: Có các thuật toán đạt được
không gian và thời gian truy vấn cho bất kỳ hằng số ;O ( 1 ) kO ( n log( k )n )Ô ( 1 )k
không gian và thời gian truy vấn .~ O ( log * n )Ô ( n )Ôi~( nhật ký*n )
Các thuật toán hoạt động như sau. Có các tham số và tùy thuộc vào . Chúng tôi chia mảng kích thước đầu thành các khối kích thước- (cấp 1); chúng tôi chia mỗi khối cấp 1 thành các khối kích thước (cấp 2); và cứ như vậy lên đến cấp . (Chúng ta hãy giả vờ tất cả là thừa của , để tránh các vấn đề có thể chia được.) Sau đó:n = b 0 > b 1 > ⋯ > b k > 0 n b 0 b 1 b 2 k b i 2k > 0n = b0> b1> ⋯ > bk> 0nb0b1b2kbTôi2
Đối với mỗi khối và mỗi khối cấp , chúng tôi lưu trữ số bit được đặt trong khoảng từ đầu khối xuống đến ranh giới khối gần nhất- .i ( i - 1 )i=1,…,ki(i−1)
Để giải quyết một truy vấn, chúng tôi tổng hợp số được lưu trữ tương ứng với chỉ mục và đếm các bit được đặt trước chỉ mục trong khối cấp của nó . Chúng tôi làm tất cả điều này cho và riêng biệt, và trừ kết quả.k x ykkxy
(Nếu các tham số không dễ tính toán, chúng tôi cũng có thể lưu trữ chúng.)bi
Sự sắp xếp này sử dụng không gian
và thời gian truy vấn
O(k+bk).
n∑i=1klogbi−1bi,
O(k+bk).
Trong mệnh đề, với 1., chúng ta đặt là hằng số và đặt cho , .b i = log ( i ) n 0 < i < k b k = 1kbi=log(i)n0<i<kbk=1
Đối với 2., chúng ta có thể lấy và
Không gian sau đó được giới hạn bởi khoảng
cho một số hằng số .b i = i ( log i ) 3 log ( i ) n . n k ∑ i = 1 log ( i ) n + 2 log ik=log∗n
bi=i(logi)3log(i)n.
cn∑i=1klog(i)n+2logii(logi)3log(i)n≤n∑i=1∞3i(logi)2=cn
c