Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
#1

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

16.12.2013, 19:20. Просмотров 1022. Ответов 0
Метки нет (Все метки)

Некорректо работает декодирование,хотя должно быть все нормально,кто заметил ошибку прошу подсказать))
Декодирование с 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Алгоритм сжатия. BWT преобразование и компрессор (C++):

Алгоритм сжатия LZ - C++
Если у кого есть, поделитесь кодом, пожалуйста:-/

Алгоритм сжатия данных - C++
подскажите алгоритм сжатия данных, чтобы был не очень сложный и в то же время эффективный

Алгоритм сжатия PPM-D - C++
Может кто рассказать о алгоритме сжатия PPM-D и как его реализовать или покидайте ссылки, литературу какую то (Гугл не предлагать, искал,...

Алгоритм сжатия аудио ! - C++
Нужна реализация алгоритма Райса для сжатия аудио файлов на С++ (наличие коментов приветствуется). Надо до конца недели разобраться в...

Фрактальный алгоритм сжатия картинок - C++
интересует реализация фрактального алгоритма на си или си ++.

Алгоритм сжатия методом Шеннона-Фано - C++
Народ, нужна помощь в поиске кода реализующего алгоритм кодирования и декодирования сообщения методом Шеннона-Фано на Си. Заранее...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2013, 19:20
Привет! Вот еще темы с ответами:

Алгоритм сжатия RLE. От этого зависит зачет по предмету) - C++
Напишите программу, которая: 1. будет считывать с клавиатуры раздельно (через Enter) вводимую последовательность цифр до тех пор,...

Кто нибудь подскажет где можно найти исходник С/C++ алгоритм сжатия - C++
Народ помогите, у меня времени нет чтобы самому разрабатывать алгоритм сжатия очень нужен алгоритм ещё лучше если на Asm (MMX, SSE2-3,...

Стандартный jpg компрессор - C++
Здравствуйте уважаемые форумчане! Пишу приложение (winform) для расчета и визуализации 3d объектов код в принципе создан навожу...

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки ) - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void lab () { int s1 = 0; int s2 =...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru