Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2015, 11:25   #1
Bared
Новичок
Джуниор
 
Регистрация: 22.06.2015
Сообщений: 1
Плохо Алгоритм Хаффмана

Здравствуйте Форумчане, препод терроризирует. Суть в чём. Есть Алгоритм Хаффмана написанный на Java в Eclipse. Теперь туда необходимо внедрить функцию которая будет рассчитывать Энтропию. для каждого символа в строке, и прописывать её! Прошу любого рода помощь: обрывки кода, исправление кода, объяснения и пояснения.
Класс HuffmanCode
Код:
import java.util.PriorityQueue;

public class HuffmanCode {

    public static HuffmanTree buildTree(int[] charFreqs) {
        PriorityQueue<HuffmanTree> trees = new PriorityQueue<HuffmanTree>();
       
        for (int i = 0; i < charFreqs.length; i++)
            if (charFreqs[i] > 0)
                trees.offer(new HuffmanLeaf(charFreqs[i], (char)i));
 
        assert trees.size() > 0;
        
        while (trees.size() > 1) {
            
            HuffmanTree a = trees.poll();
            HuffmanTree b = trees.poll();
 
            
            trees.offer(new HuffmanNode(a, b));
        }
        return trees.poll();
    }
 
    public static void printCodes(HuffmanTree tree, StringBuffer prefix) {
        assert tree != null;
        if (tree instanceof HuffmanLeaf) {
            HuffmanLeaf leaf = (HuffmanLeaf)tree;
 
           
            System.out.println(leaf.value + "\t" + leaf.frequency + "\t" + prefix);
 
        } else if (tree instanceof HuffmanNode) {
            HuffmanNode node = (HuffmanNode)tree;
 
            
            prefix.append('0');
            printCodes(node.left, prefix);
            prefix.deleteCharAt(prefix.length()-1);
 
          
            prefix.append('1');
            printCodes(node.right, prefix);
            prefix.deleteCharAt(prefix.length()-1);
        }
    }
 
    public static void main(String[] args) {
        String test = "anna kardas";
 
       
        int[] charFreqs = new int[256];
       
        for (char c : test.toCharArray())
            charFreqs[c]++;
 
        
        HuffmanTree tree = buildTree(charFreqs);
 
        
        System.out.println("SYMBOL\tWEIGHT\tHUFFMAN CODE\tENTROPIA");
        printCodes(tree, new StringBuffer() );
    }
}
Класс HuffmanTree
Код:
abstract class HuffmanTree implements Comparable<HuffmanTree> {
    public final int frequency;
    public int entropia;
    public HuffmanTree(int freq) { frequency = freq; }
    public void Entropia (int ent) {entropia = ent; }
    
    public int compareTo(HuffmanTree tree) {
        return frequency - tree.frequency;
    }
}
 
class HuffmanLeaf extends HuffmanTree {
    public final char value; 
 
    public HuffmanLeaf(int freq, char val) {
        super(freq);
        value = val;
    }
}
 
class HuffmanNode extends HuffmanTree {
    public final HuffmanTree left, right; 
 
    public HuffmanNode(HuffmanTree l, HuffmanTree r) {
        super(l.frequency + r.frequency);
        left = l;
        right = r;
    }
}

Последний раз редактировалось Stilet; 22.06.2015 в 11:53.
Bared вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Хаффмана Bubel C# (си шарп) 3 17.05.2017 13:34
Алгоритм хаффмана cashmail Общие вопросы Delphi 3 02.01.2013 21:11
алгоритм хаффмана. chuvakner Помощь студентам 4 30.10.2010 23:33
Алгоритм Хаффмана 0479 Помощь студентам 1 15.09.2010 11:53
Алгоритм Хаффмана. Vetal115 Общие вопросы по Java, Java SE, Kotlin 0 22.04.2010 22:23