Простая реализация LZW C ++ - PullRequest
0 голосов
/ 13 июня 2018

, поэтому я пытаюсь сделать простой файловый компрессор / декомпрессор в C ++ (я не стремлюсь к наилучшему возможному результату), но я действительно застрял, потому что у меня много вопросов, вот они:

Какой словарь я должен использовать (я использую карту)?Какие данные я должен хранить (я использую String / Int в качестве ключа / значения)?Должен ли я инициализировать словарь с ASCII в нем?Я видел, что некоторые люди используют узлы, это хороший способ сделать это, это сложно?

Вот код, которого пока не так много:

#define MAX = 1024 //2^10 Where the dictionary reset 

int main(int argc, char *argv[]){
    ifstream in(argv[2], ios_base::binary);
    ofstream of(argv[3], ios_base::binary);
    string str ;
    char c;
    int i;

    if (string(argv[1]) == "-c" ){
        map<string,int> Dic;
        while (in.get(c))
        {   
        }
        in.close();
    }
}

Любые комментарии к коду приветствуются!

1 Ответ

0 голосов
/ 13 июня 2018

Ответы следуют из алгоритма, описание можно взять, например, здесь .

1) Вам необходимо постоянно проверять, присутствует ли уже введенная строка.Вам не нужен порядок строк, который обеспечивает std :: map, вы можете использовать std :: unordered_map, который использует хэш и более эффективен.

2) Вы можете использовать string / unsigned int, так как index>0.

3) Да, из описания алгоритма начальный словарь - 256 символов ASCII.

4) Что вы подразумеваете под "узлами"?

Попробуйте реализовать чтоописано в статье.Предоставленный образец может быть модульным тестом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...