1. 程式人生 > >二進位制壓縮 - 演算法

二進位制壓縮 - 演算法

二進位制壓縮
在程式設計時遇到每個資料只有兩種狀態,且 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; } }