Форум программистов, компьютерный форум CyberForum.ru

Алгоритм сжатия. BWT преобразование и компрессор - C++

Восстановить пароль Регистрация
 
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
16.12.2013, 19:20     Алгоритм сжатия. BWT преобразование и компрессор #1
Некорректо работает декодирование,хотя должно быть все нормально,кто заметил ошибку прошу подсказать))
Декодирование с 56 строчки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
#include <conio.h>
 
using namespace std;
 
bool searchKey(string &str,string &str2, int k) {
    for (int i = 0; i < k; i++) {
        if (str[i] != str2[i]) {
            return false;
        }
    }
    return true;
}
 
void code(string &str, int key) {
    int size = str.size();
    string *s = new string[size];
    string answer = "";
    string test = "";
    for (int i = 0; i < size; i++) {
        s[i] = "";
        for (int j = 0; j < size - 1 - i; j++) {
            s[i] += str[i + 1 + j];
        }
        for (int j = 0; j < 1 + i; j++) {
            s[i] += str[j];
        }
    }
    for(int i = 0 ; i < size; i++) { 
       for(int j = 0 ; j < size - i - 1; j++) {  
           if(s[j] > s[j+1]) {           
                string tmp= "";
                tmp += s[j]; 
                s[j] = s[j+1]; 
                s[j+1] = tmp; 
            }
        }
    }
    for (int i = 0; i < size; i++) {
        if (searchKey(s[i], str, size)) {
            key = i;
            break;
        }
    }
    for(int i = 0 ; i < size; i++) {          
        answer += s[i][size-1];
    }
    str = answer;
    cout << "Key:" << key;
}
 
void decode(string &str) {
    int key = 0;
    cout << "\nInput key\n";
    cin >> key;
    string answer = "";
    int size = str.size();
    int *data = new int[size];
    for(int i = 0 ; i < size; i++) {
        data[i] = i;
    }
    string *s = new string[size];
    for (int i = 0; i < size; i++) {
        s[i] = "";
        s[i] += str[i];
    }
    for(int i = 0 ; i < size; i++) { 
       for(int j = 0 ; j < size - i - 1; j++) {  
           if(s[j] > s[j+1]) {           
              string tmp= "";
              tmp += s[j]; 
              s[j] = s[j+1]; 
              s[j+1] = tmp; 
              int w = data[j];
              data[j] = data[j+1];
              data[j+1] =w;
           }
        }
    }
    int *array = new int[size];
    array[0] = data[key];
    for(int i = 1; i < size; i++) {
        array[i] = data[array[i-1]];
    }
    for(int i = 0; i < size; i++) {
        answer += str[array[i]];
    }
    str = answer;
}
 
 
void processFile(string infileName, string outFileName) {
    ifstream ifs(infileName.c_str());
    if (ifs.is_open() == false) {
        return;
    }
    ofstream ofs(outFileName.c_str());
    if (ofs.is_open() == false) {
        ifs.close();
        return;
    }
    string curLine; 
    getline(ifs, curLine);
    cout << "Code or decode?\nIf code, input 1\nIf decode, input 2\n";
    int check;
    cin >> check;
    int key = 0;
    if (check == 1) {
        code(curLine, key);
    }
    else if (check == 2) {
        decode(curLine);
    }
    else {
        return;
    }
    ofs << curLine << "\n"; 
    ifs.close();
    ofs.close();
}
 
int main(int argc, char* argv[]) {
    processFile("C://labin.txt", "C://labout.txt");
    cout << "Press any key to exit";
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 19:20     Алгоритм сжатия. BWT преобразование и компрессор
Посмотрите здесь:

Алгоритм сжатия методом Шеннона-Фано C++
фрактальный алгоритм сжатия картинок C++
C++ Алгоритм сжатия данных
C++ Алгоритм сжатия PPM-D
C++ Алгоритм сжатия аудио !
Алгоритм сжатия LZ C++
C++ Стандартный jpg компрессор
Алгоритм сжатия RLE. От этого зависит зачет по предмету) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru