Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм LZW, медленно работает 
V
    Опции темы
Sosed
Дата 27.8.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.8.2009

Репутация: 1
Всего: 1



Доброго времени суток, вот добрался до следующего алгоритма, собственно не доделал по части сжатия, но интересует вопрос - почему LZW_encode() так тормозит? С декодированием проблем нету. Вроде никаких велосипедов не использовал.
Что можно оптимизировать в коде, или это алгоритм такой тормозной?

Код

typedef vector< string > Dictionary;

void LZW_encode( ifstream& fin, ofstream& fout ) {
    Dictionary MyDic;
    short code;
    char buf;
    string CurStr;

    InitTable(MyDic);
    while( true ) {
        buf = fin.get();
        if( fin.eof() ) break;

        code = find( MyDic.begin(), MyDic.end(), CurStr+buf ) - MyDic.begin();
        if( code != MyDic.size() ) {
            CurStr += buf;
        } else {
            MyDic.push_back(CurStr+buf);
            code = find( MyDic.begin(), MyDic.end(), CurStr ) - MyDic.begin();
            fout.write( (char*)&code, sizeof(short) );    
            CurStr = buf;
        }
    }
    code = find( MyDic.begin(), MyDic.end(), CurStr ) - MyDic.begin();
    if( code != MyDic.size() )
        fout.write( (char*)&code, sizeof(short) );    
}


Код

void LZW_decode( ifstream& fin, ofstream& fout ) {
    Dictionary MyDic;
    short codee, old_code;
    string OutString;
    
    InitTable(MyDic);
    fin.read( (char*)&codee, sizeof(short) );
    fout << MyDic[codee];
    old_code = codee;
    while( true ) {
        fin.read( (char*)&codee, sizeof(short) );
        if( fin.eof() ) break;

        if( codee < MyDic.size() ) {
            fout << MyDic[codee];
            MyDic.push_back( MyDic[old_code] + MyDic[codee].at(0) );
            old_code = codee;
        } else {
            OutString = MyDic[old_code] + MyDic[old_code].at(0);
            fout << OutString;
            MyDic.push_back(OutString);
            old_code = codee;
        }
    } 
}

PM MAIL   Вверх
Sosed
Дата 27.8.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.8.2009

Репутация: 1
Всего: 1



заменил вектор на мап. проблема вроде изчезла =)

Это сообщение отредактировал(а) Sosed - 27.8.2009, 17:45
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.