Witam.
Potrzebuję pomocy z napisaniem programu dotyczącego kodowania Huffmana. Nie do końca rozumiem struktury, a tak ma to być własnie napisane i sam sobie z tym nie poradzę. Wiem, że tego jest pełno w internecie, jednak wszędzie gdzie szukałem programy napisane są głównie w klasach. Program ma działać następująco:
Użytkownik wpisuje ilość znaków do kodowania, następnie po kolei litery i po każdej literze ilość jej wystąpień. - To już zrobiłem
Następnie program segreguje je według alfabetu (segregowanie też zrobione)
Każdej literze przypisuje wartości A(000) B(001) C(010) D(011) itd.
Program bierze dwie litery o najmniejszej liczbie wystąpień sumuje ilości wystąpień tych dwóch(tworzy nowy węzeł) i tak dalej do stworzenia jednego wielkiego drzewa i na końcu program ma wywalić że teraz litera 'A' ma kod tam np 101 (droga po drzewie).
Potem trzeba wyliczyć prawdopodobieństwo wystąpienia każdej z liter ale to już sobie zrobię.
Mam jakiś szkielet kodu, który trzeba rozbudować, wygląda to następująco:
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
// Sortowanie danych
void vSortowanie()
{
ifstream wejscie;
wejscie.open( "Wejscie.txt" );
int iIleWierszy;
wejscie >> iIleWierszy;
string sTab[ 2 ][ iIleWierszy ];
// Wczytuje dane do posortowania
for( int i = 0; i < iIleWierszy; i++ )
for( int j = 0; j < 2; j++ )
wejscie >> sTab[ j ][ i ];//endfor / endfor
wejscie.close();
// Sortowanie
for( int j = 1; j < iIleWierszy; j++ )
for( int i = 1; i < iIleWierszy; i++ )
if( sTab[ 0 ][ i ] < sTab[ 0 ][ i - 1 ] )
{
swap( sTab[ 0 ][ i ], sTab[ 0 ][ i - 1 ] );
swap( sTab[ 1 ][ i ], sTab[ 1 ][ i - 1 ] );
}//ednif / endfor
// Wypisuje posortowane dane do pliku
ofstream posortowane( "Wejscie_Alfabetycznie.txt" );
for( int i = 0; i < iIleWierszy; i++ )
{
for( int j = 0; j < 2; j++ )
posortowane << sTab[ j ][ i ] << "\t";
posortowane << "\n";
}
posortowane.close();
}
struct drzewo
{
int iWartosc;
drzewo *lewo;
drzewo *prawo;
drzewo *rodzic;
drzewo();
};
struct lista
{
drzewo *head;
lista();
};
int main()
{
vSortowanie();
system( "pause" );
return 0;
}
Pomoże ktoś?