Beispiel #1
0
 public static List <string> GetCode(HuffmanTree mainTree)
 {
     ListOfCode = new List <string>();
     TreeRunning(mainTree);
     return(ListOfCode);
 }
Beispiel #2
0
        static void Main(string[] args)
        {
            List <double> Frequences = new List <double>();

            Console.WriteLine("Введите частоты символов.");
            Console.WriteLine("Когда сумма элементов дойдет до 1, ввод остановится");
            while (true)
            {
                double current;
                while (!double.TryParse(Console.ReadLine(), out current) || current < 0)
                {
                    Console.WriteLine("Ошибка ввода, введите вещественное число не больше 1 и не меньше 0.");
                }
                Frequences.Add(current);
                double sum = GetListSum(Frequences);
                if (sum > 1)
                {
                    Console.WriteLine("Сумма частот превысила 1. Введите частоты заново.");
                    Frequences = new List <double>(); // если введённые числа в сумме превысили единицу
                }
                if (sum == 1)
                {
                    Console.WriteLine("Ввод завершен.");
                    break;
                }
            }

            Console.WriteLine("\nВведенные частоты:");
            Frequences.Sort();
            foreach (var t in Frequences)
            {
                Console.WriteLine(t);
            }

            List <HuffmanTree> treeList = new List <HuffmanTree>();

            for (int i = 0; i < Frequences.Count; i++)
            {
                treeList.Add(new HuffmanTree(Frequences[i]));
            }

            while (treeList.Count > 1)
            {
                HuffmanTree first  = treeList[0];
                HuffmanTree second = treeList[1];

                treeList[1]       = new HuffmanTree(first.Value + second.Value);
                treeList[1].right = first;
                treeList[1].left  = second;
                treeList.RemoveAt(0);
                treeList.Sort();
            }

            List <string> HuffmanCode = Code.GetCode(treeList[0]);

            Console.WriteLine("\nКод: ");
            foreach (var t in HuffmanCode)
            {
                Console.WriteLine(t);
            }

            Console.ReadLine();
        }