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

Псевдоалгоритм Хаффмана - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Непонятный синтаксис http://www.cyberforum.ru/cpp-beginners/thread368282.html
Вот есть обявление. sp<DataSource> source; sp<DataSource> это что? Спасибо!
C++ База данных для приемной комиссии института. Нужно составить простенькую программу с базой данных для приемной комиссии института. Выручайте... Она не должна быть какой - то мудреной. Это домашнее задание. Но в ней должна быть какая то... http://www.cyberforum.ru/cpp-beginners/thread368271.html
C++ Нужны коментарии ко коду.
Все доброго времени! Такой вопрос, есть код, работает исправно, что делает тоже ясно. Часть я уже прокоментил, но с большей частью траблы.( Прокоментируйте кажду строку что б докладно понимать...
C++ Как грамотно удалить элементы в векторе?
for (vector<fileResult>::iterator p = listExp.begin(); p != listExp.end();p++) { if (p->select) listExp.erase(p); } делаю так. fileResult - структура. fileResult listExp; p->select -...
C++ не могу найти ошибку в поиске по массиву структур http://www.cyberforum.ru/cpp-beginners/thread368243.html
Здравствуйте. Дали задание: Дан массив структур. Каждая структура содержит информацию о книгах в библиотеке (придумать 5 полей структуры). Создать свои пользовательские функции. Первая из них...
C++ Кеш процессора Задание Написать программу, многократно выполняющую чтение элементов массива заданного размера. Элементы массива должны представлять собой связный циклический список, в котором значение очередного... подробнее

Показать сообщение отдельно
Wanderer1
23 / 23 / 4
Регистрация: 26.03.2011
Сообщений: 54
18.10.2011, 17:01
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
132
133
134
135
136
137
138
139
140
141
142
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace AlgoritmHuffmana1
{
    class Program
    {
        static void Main(string[] args)
        {            
            Program ob = new Program();
            ob.Sort();
            ob.Haff(32, ob.P1);
            ob.SortAlpha();
            for (int i = 0; i < 33; i++)
            {
                Console.WriteLine(ob.Alpha[i] + "\t" + ob.Res[i] + "\t" + ob.P1[i] + "\t" + ob.P2[i]);
            }
            Console.Read();
        }
 
        double[] P1 = { 0.062, 0.014, 0.038, 0.013, 0.025, 0.072, 0.072, 0.007, 0.016, 0.062, 0.010, 0.028, 0.035, 0.026, 0.053, 0.090, 0.023, 0.040, 0.045, 0.053, 0.021, 0.002, 0.009, 0.004, 0.012, 0.006, 0.003, 0.014, 0.003, 0.014, 0.003, 0.006, 0.018 };
        char[] Alpha = { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
        int[] P2 = {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 };
        string[] Res = new string[33];
 
 
        public void SortAlpha()
        {
            int i=1;
            while (i != 0)
            {
                i = 0;
                for (int j = 0; j < P2.Length - 1; j++)
                {
                    if (P2[j] > P2[j + 1])
                    {
                        int temp3;
                        char temp2;
                        double temp1 = 0;
 
                        temp1 = P1[j];
                        temp2 = Alpha[j];
                        temp3 = P2[j];
                        P1[j] = P1[j + 1];
                        Alpha[j] = Alpha[j + 1];
                        P2[j] = P2[j + 1];
                        P1[j + 1] = temp1;
                        Alpha[j + 1] = temp2;
                        P2[j + 1] = temp3;
                        i++;
                    }
                }
            }
        }
        public void Sort()
        {
            for (int i = 0; i < P1.Length; i++)
            {
                for (int j = 0; j < P1.Length - i - 1; j++)
                {
                    if (P1[j] < P1[j + 1])
                    {
                        char temp2;
                        double temp1 = 0;
 
                        int temp3;
                        temp3 = P2[j];
                        P2[j] = P2[j + 1];
                        P2[j + 1] = temp3;
 
                        temp1 = P1[j];
                        temp2 = Alpha[j];
                        P1[j] = P1[j + 1];
                        Alpha[j] = Alpha[j + 1];
                        P1[j + 1] = temp1;
                        Alpha[j + 1] = temp2;
 
                    }
                }
            }            
        }
 
        public void Down(int n, int j)
        {
            string S;
            //S:= C [j,*]  //запоминание j-той строки матрицы элем. кодов в массив S) 
            S = Res[j];
            for (int i = j; i <= n - 2; i++)
            {
 
                Res[i] = Res[i + 1]; //(сдвиг вверх строк матрицы С)
 
            }
 
            Res[n - 1] = S;
 
            Res[n] = S;
            Res[n - 1] += Convert.ToString(0);
            Res[n] += Convert.ToString(1);
 
 
        }
 
        public int Up(int n, double q)
        {
 
            int j = 0;
 
            for (int i = n - 1; i >= 2; i--)
            {
                if (P1[i - 1] <= q)
                    P1[i] = P1[i - 1];
                else
                    j = i;
            }
            P1[j] = q;
            return j;
 
        }
        public void Haff(int n, double[] P)
        {
 
            double q;
            if (n == 2)
            {
                Res[1] += Convert.ToString(0);
                Res[2] += Convert.ToString(1);
 
            }
            else
            {
                q = Convert.ToDouble(P[n - 1]) + Convert.ToDouble(P[n]);
                int j = Up(n, q);
                Haff(n - 1, P);
                Down(n, j);
 
            }
        }
    }
}
L - строка матрицы
С - матрица
C [n-1,L+1]:=0 вроде как добавляет символ в конец строки и обнуляет
C [n,L+1]:=1
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.