Lưu trữ một vectơ bit trong bộ nhớ chưa được khởi tạo và không gian tối thiểu


8

Một mẹo nổi tiếng để lưu trữ các vectơ bit bằng cách sử dụng bộ nhớ chưa được khởi tạo có thể phân bổ một vectơ bit có kích thước trong đó tất cả các bit được đặt thành bằng cách cấp phát bit của bộ nhớ và khởi tạo chỉ của họ. Biểu diễn này hỗ trợ cài đặt và bỏ đặt bất kỳ bit nào trong thời gian không đổi.n0(2n+1)lgnlgn

Cuốn sách này bắt nguồn từ cuốn sách "Thiết kế và phân tích thuật toán máy tính" của Alfred Aho, John Hopcroft và Jeffrey Ullman năm 1974. Chương 2, bài tập 2.12 "," Cuốn sách lập trình năm 1986 của Jon Bentley. 9 trong Ấn bản thứ hai "và " Bài viết năm 1993 của Preston Briggs và Linda Torczon, 'Một đại diện hiệu quả cho các bộ thưa thớt' " .

"Thay đổi cơ sở mà không mất không gian" của Dodis và cộng sự làm giảm yêu cầu không gian xuống bit, mặc dù thuật toán này yêu cầu tính toán trước của hằng với các bit .(2n+1)lgn+1Θ(lgn)Θ(lgn)

Có thể tiết kiệm được bao nhiêu dung lượng? Có một đại diện của vectơ bit trong đó

  • Các bit có thể được đặt hoặc hủy đặt trong thời gianÔi(1)
  • Khởi tạo một vector bit mới của s sử dụng bit của bộ nhớ chưa được khởi tạo và bộ nhớ khởi tạo0o(nlgn)Ôi(lgn)

Câu trả lời:


2

Vâng, điều này có thể được thực hiện thông qua . Biểu diễn trong Briggs và Torczon có thể được sử dụng để lưu trữ không chỉ các bit, mà cả các giá trị được liên kết với bất kỳ bit đã đặt nào, bằng cách lưu trữ chúng bên cạnh các giá trị trong mảng dày đặc. Đối với giá trị bit, điều này dẫn đến tổng chi phí lưu trữ ( 2 n + 1 ) lg n + k n .k(2n+1)lgn+kn

Bây giờ chọn . Mỗi k giá trị -bit sẽ đại diện cho một tập hợp các lg n bit kề nhau trong mảng bit. Chúng tôi do đó chỉ cần theo dõi n /lg n trong số họ với dày đặc và mảng thưa thớt. Điều này dẫn đến tổng chi phí Θ ( n ) bit dung lượng lưu trữ, với Θ ( lg n ) bit khởi tạo.k= =lgnklgnn/lgnΘ(n)Θ(lgn)

Giống như các giải pháp cơ bản, điều này đòi hỏi hoạt động trên lời của chiều dài Θ ( lg n ) để thiết lập một chút duy nhất.Ôi(1)Θ(lgn)

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.