Ejemplo n.º 1
0
 public static List <string> GetWords(BinaryTree mainTree)
 {
     listWord = new List <string>();
     _getWords(mainTree);
     return(listWord);
 }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            List <double> frequencesList = new List <double>();

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

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

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

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

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

                treeList[1]       = new BinaryTree(first.Value + second.Value);
                treeList[1].Right = first;
                treeList[1].Left  = second;
                treeList.RemoveAt(0);
            }

            List <string> codesList = Words.GetWords(treeList[0]);

            Console.WriteLine("\nРезультат: ");
            foreach (var t in codesList)
            {
                Console.WriteLine(t);
            }

            Console.WriteLine("Средняя длина кодового слова(Код Хаффмана): " + GetHuffmanElongation(frequencesList, codesList));

            Console.WriteLine("Длина кода(универсальный код): " + GetUniformElongation(codesList.Count));

            Console.ReadLine();
        }