二進位制壓縮 - 演算法
阿新 • • 發佈:2018-11-30
二進位制壓縮
在程式設計時遇到每個資料只有兩種狀態,且 dfs 或者 bfs 時遍歷時間複雜度高時,可以採用二進位制壓縮資料,尤其是二維陣列。
1.二進位制壓縮一個二位陣列
例如:
-+--
----
----
-+--
正常儲存資料回使用二位陣列,'+' -> 1,'-' -> 0,即
0100
0000
0000
0100
如果我們採用二進位制壓縮為一個 int 型別的資料,正好用 16 位來表示。
這裡有兩種表示方法,其實都一樣,一種先從上到下變為從高位到低位,一種是從上到下變為從低位到高位。
從低位到高位
int input = 0;
int[][] data = new int[4][4];
Scanner sc = new Scanner(System.in);
String line = "";
for (int i = 0; i < 4; i++) {
line = sc.next();
for (int j = 0; j < 4; j++) {
data[dataIn++] = line.charAt(j);
}
}
for (int i = 0; i < 16 ; i++) {
if (data[i] == '+') {
input |= (1 << i);
// System.out.println(Integer.toBinaryString(input));
}
}
從高位到低位
int input = 0;
Scanner sc = new Scanner(System.in);
String line = "";
for (int i = 0; i < 4 ; i++) {
line = sc.next();
for (int j = 0; j < 4; j++) {
input = input << 1;
input = line.charAt(i) == '+' ? input + 1 : input;
}
}