簡體   English   中英

空間復雜度為O(n)的二進制矩陣的表示

[英]Representation of binary matrix with space complexity of O(n)

我有nxn個二進制矩陣(即元素為0或1的矩陣)。 使用二維數組(即存儲每個元素的值)的空間復雜度為O(n ^ 2)。

有沒有辦法以空間復雜度為O(n)的方式存儲它們? 歡迎進行所有操作,如求和,減法等。

矩陣不是稀疏的,因此使用非零元素列表毫無疑問。

第一個proofn*n位矩陣具有n*n個狀態。 但是,使用n位字符串時,只能存儲n個狀態。 因此,除非n>=n*n (例如n = 1),否則無法編碼n位序列中的n n*n位。

第二個proof ,不是那么抽象,但是也不太完整:想象一下,您有一個16 * 16的256位矩陣,並且設法將其存儲為16位。 現在,當然,您可以使用算法將這16位存儲在4x4矩陣中,得出4位。 現在,將4位存儲在2x2矩陣中,並將它們壓縮為2位。 ->本質上,這樣的算法將能夠僅2位壓縮任何可想象的數據量。 盡管這不是一個實際的證明,但仍然很明顯這樣的算法不存在。

不,您不能在O(n)空間中存儲nxn二進制矩陣。 證明僅僅是信鴿的原理

假設您設計了一種存儲任意nxn二進制矩陣的方法。 有2 nxn個這樣大小的可能二進制矩陣。 如果您使用k位存儲空間,則存儲空間可能有2 k 現在,如果k <nxn,則我們有2 k <2 nxn ,並且根據信鴿原理,存在兩個不同的矩陣(例如A和B)以相同的方式存儲(例如X被存儲)。 因此,當您存儲了X時,您無法說出您實際打算存儲的矩陣是A還是B(或者可能是其他矩陣)。 因此,您無法將存儲唯一地解碼回存儲矩陣的形式,這破壞了存儲矩陣的整個目的。

我認為它不能保證您擁有O(n)空間,但是您可以尋找一種稱為LZW(Lempel-Ziv-Welch)的壓縮算法。

它非常容易編碼,並且很容易理解其原因和工作方式,並且對於二進制數組也應該非常有效,並且矩陣越大,壓縮率越好。


無論如何,如果您知道有關矩陣的一些信息,則可以嘗試以某種方式將其表示為數組,以便進行還原,例如:

如果矩陣是32x32尺寸,則可以獲取矩陣的任何行並將其表示為單個int ,因此整行將變為單個數字,並且您的O(n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM