Построение дерева Хаффмана

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by LibertyPaul, 29 May 2012.

  1. LibertyPaul

    LibertyPaul New Member

    Joined:
    16 Jan 2010
    Messages:
    36
    Likes Received:
    0
    Reputations:
    0
    Создал класс, который представляет собой односвязный список.
    Я открываю файл(любой, не только текстовый),

    PHP:
    ifstream input
    input.open(argv[1], ifstream::binary);
    и посимвольно считываю его. Каждый новый символ скармливаю

    PHP:
    char c;
        while(!
    input.eof()){
            
    input.get(c);
            
    L->increase(c);
        }
    методу "increase" класса, который ищет был ли уже создан элемент списка со статистикой этого символа, если был то количество повторений увеличиваем, если нет то создаем новый.

    Объект класса имеет такую структуру:
    PHP:
    class symbollist{
    char val;//кодируемый символ
    unsigned long long freq;//сколько раз этот символ встречался в файле
    symbollist *next;//указатель на следующий элемент

    дальше описаны методы
    };
    и в программе список выглядит примерно так:
    [​IMG]

    ВОПРОС:
    как для отсортированного списка символов построить дерево Хаффмана для создания каждому символу префиксного кода?


    P.S. каждый раз когда сам пытаюсь написать получается говнецо кривое.

    P.P.S. если нужен исходник того что уже написано: http://libertypaul.ru/stuff/code.cxx

    P.P.P.S. в гугл просьба особо не посылать ибо мануалы уже курил, чужие исходники чтиал. Просто хочу понять как это написать самому.
     
  2. LibertyPaul

    LibertyPaul New Member

    Joined:
    16 Jan 2010
    Messages:
    36
    Likes Received:
    0
    Reputations:
    0
    ап ап