Не верное распределение группы символов в коде Фано

При каких-то словосочетаниях код формируется правильно, а при других не правильно.

Никак не могу понять в чём ошибка.

Не правильное составление кода - ошибка

Правильное составление -введите сюда описание изображения

Функции, которые отвечают за разбиение кода -

        static List<Symbol> CalculateSymbolsCodes(List<Symbol> symbols) //Рассчитывает код символов
    {
        var cPoint = GetSeparationIndex(symbols) + 1;

        var topList = symbols.GetRange(0, cPoint);
        var bottomList = symbols.GetRange(cPoint, symbols.Count - cPoint);

        topList.ForEach(s => s.Code += "0");
        if (topList.Count > 1) CalculateSymbolsCodes(topList);

        bottomList.ForEach(s => s.Code += "1");
        if (bottomList.Count > 1) CalculateSymbolsCodes(bottomList);

        topList.AddRange(bottomList);

        return topList;
    }

    static int GetSeparationIndex(List<Symbol> symbols) // рассчиывает индекс разделения символа
    {
        var dict = new SortedList<double, int>();
        var half = symbols.Sum(s => s.Probability) / 2;
        var sum = 0.0;
        for (var i = 0; i < symbols.Count; i++)
        {
            sum += symbols[i].Probability;
            var diff = Math.Abs(half - sum);
            if (!dict.ContainsKey(diff)) dict.Add(diff, i);
        }
        return dict.First().Value;
    }

Ответы (0 шт):