Насколько большим должен быть мой частотный массив, если я хочу сжать изображение с помощью кода Хаффмана?

Итак, я реализовал код Хаффмана для сжатия текстовых файлов, и вот как я подсчитывал повторения каждого символа.

    BufferedInputStream fin = new BufferedInputStream(new FileInputStream(f));
    byte[] b = new byte[(int) f.length()];
    int[] counter = new int[256];
    for(int i = 0; i < b.length; i++) {
        char ch = (char) b[i];
        counter[ch]++;
    }

Я хочу расширить свой код Хаффмана, чтобы также сжимать другие типы файлов, но я не совсем уверен, как это сделать? сделать массив, который содержит все возможные символы раскодирования, подобные этому

     int[] counter=new int[65536];

Я не думаю, что создание такого большого массива очень достаточно, но я не совсем уверен, как еще это сделать?


person TheHaruWhoCodes    schedule 03.11.2018    source источник


Ответы (1)


Обработайте символы как последовательность байтов, закодированных как UTF-8. Тогда просто сохраните частотное кодирование байтов.

person Mark Adler    schedule 04.11.2018