using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace haffman
{
class Program
{
public static List<Entry> CountingRepetition(string str, int param = 1)
{
var result = new List<Entry>();
for (var i = 0; i <= (str.Length - param); i++)
{
var currentSegment = str.Substring(i, param);
if (!result.Any(x => x.Data == currentSegment))
{
result.Add(new Entry
{
Data = currentSegment,
Count = new Regex(Regex.Escape(currentSegment)).Matches(str).Count
});
}
}
return result;
}
static void DisplayTable(List<Entry> param)
{
int sum = 0;
foreach (var disp in param)
{
Console.Write(disp.Data + "\t");
}
Console.Write("\n");
foreach (var disp in param)
{
Console.Write(disp.Count + "\t");
sum += disp.Count;
}
Console.Write("\n");
foreach (var disp in param)
{
Console.Write($"{disp.Count}/{sum}" + "\t");
}
}
public static List<Entry> BuildThree(List<Entry> param)
{
// List<Entry> result = new List<Entry>();
var sorted = param.OrderBy(u => u.Count);
for (int i = 0; i < sorted.Count(); i++)
{
for (int j = i+1; j <= i+1; j++)
{
if (param[i].Count >= param[j].Count)
{
Entry result = new Entry
{
Data = "*",
Count = param[i].Count + param[j].Count,
LeftSymbol = param[i].Data,
RightSymbol = param[j].Data,
LeftByte = 1,
RightByte = 0
};
param.Remove(param[i]);
j = 0;
param.Remove(param[j]);
param.Insert(0, result);
j++;
}
else if (param[i].Count < param[j].Count)
{
Entry result = new Entry
{
Data = "*",
Count = param[i].Count + param[j].Count,
LeftSymbol = param[j].Data,
RightSymbol = param[i].Data,
LeftByte = 0,
RightByte = 1
};
param.Remove(param[i]);
j = 0;
param.Remove(param[j]);
param.Insert(0,result);
}
}
i = -1;
}
return param;
}
static void Main(string[] args)
{
Console.Write("Исходная строка: ");
string sourceString = Console.ReadLine();
//Подсчет кол-ва повторяющихся символов
var countValues = CountingRepetition(sourceString, 1);
Console.WriteLine("H(X)");
DisplayTable(countValues);
//
BuildThree(countValues);
Console.ReadLine();
}
}
class Entry
{
public string Data { get; set; }
public int Count { get; set; }
public string LeftSymbol { get; set; }
public string RightSymbol { get; set; }
public byte LeftByte { get; set; }
public byte RightByte { get; set; }
}
}
Проблема заключается в коллекции param, в которой создаётся дерево. С первыми двумя выражениями все нормально. Как только в созданную ветвь пытаюсь добавить новое значение, в пункте left symbol отображается Entry,Entry...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ИтакЕсть некое устройство, на которое надо передать пакет, пример:
Всем привет! Совсем недавно у меня возникла задача задокументировать весь код в проекте, чтобы при использовании метода, интеллисенс студии...
Можно ли как-нибудь вызвать по таймеру асинхронную функцию в C#? У обычного SystemThreading