Простая реализация LZW C ++

поэтому я пытаюсь сделать простой файловый компрессор / декомпрессор в 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();
}
}

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

0

Решение

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

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

2) Вы можете использовать строку / без знака int, так как индекс> 0.

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]