Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204

Кодирование по частотности

06.08.2025, 11:54. Показов 2943. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу решить задачу, так не до конца понимаю её условие. Задача такая:

Вы работаете над системой управления контентом корпоративного портала: в нем хранится большое количество статей, новостей и других материалов для новичков. Для экономии места на сервере и увеличения скорости передачи данных было решено применять сжатие данных перед их сохранением.
Вы выбрали такой метод хранения данных: текстовые данные будут переведены в двоичные. Более часто употребляемые буквы в тексте будут представлены короткими двоичными кодами, а редко встречающиеся буквы будут иметь более длинные коды. При этом регистр нужно игнорировать.
Предположим, мы хотим закодировать последовательность «аааабвв». Сначала нам нужно вычислить частоту букв в тексте: а встречается 4 раза, 6 — 1 раз, в — 2 раза.
Частота определяет двоичный код, кодирующий символ. Учитывая частотность букв в нашей последовательности, мы закодируем «а» с помощью «1», «б» с помощью «11», и «в» с помощью «10» в двоичной системе. Закодированная последовательность «аааабвв» будет выглядеть как 1111111010.
Для удобства функция, создающая 34 последовательных двоичных числа, уже есть в прекоде. Этого количества достаточно для кодирования текста на русском языке с учетом пробела.
Формат ввода
Входные данные состоят из одной строки, содержащей произвольные буквы русского языка. В строке могут быть только буквенные символы и пробел. Пробел считается символом наравне с буквами.
Формат вывода
Выходные данные состоят из одной строки, содержащей двоичный код — в нем должна быть закодирована буквенная последовательность из ввода.
Пример 1
Входные данные: аааабвв
Выходные данные: 1111111010
Пример 2
Входные данные: Птицы поют утром
Выходные данные: 1011000101000110010110100001111100011001 0000001010111001
Пример 3
Входные данные: Мальчик играет в футбол
Выходные данные: 1101110010111011110001101001101010101111 00100011011000111011111100100001000111

Код предоставленный в исходных данных:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
partial class Program
{
    static void Main()
    {
        string inputString = Console.ReadLine();
        string encodedString = EncodeString(inputString);
        Console.WriteLine(encodedString);
    }
    static string EncodeString(string input)
    {
        List<string> GenerateBinaryNumbers(int n)
        {
            var binaryNumbers = new List<string>(); for (int i = 1; i <= n; i++)
            {
                binaryNumbers.Add(Convert.ToString(i, 2));
            }
            return binaryNumbers;
        }
        // Ваш код:
        throw new NotImplementedException();
    }
}
Моё решение примерно такое:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
static void Coding()
{
    string inputString = "Птицы поют утром";
    string encodedString = EncodeString(inputString);
    Console.WriteLine(encodedString);
 
    static string EncodeString(string input)
    {
        //этот метод предоставляется условием и создаё 34 последовательных числа
        List<string> GenerateBinaryNumbers(int n)
        {
            var binaryNumbers = new List<string>();
            for(int i = 1;i <= n; i++)
            {
                binaryNumbers.Add(Convert.ToString(i, 2));
            }
            return binaryNumbers;
        }
 
        string text = input.ToLower();
 
        List<string> bnums = GenerateBinaryNumbers(34); //получаем 34 кода для символов в порядке возрастаня сложности
        foreach (string s in bnums) Console.WriteLine(s); //вывести коды по порядку
 
        Dictionary<char, int> symbols = new Dictionary<char, int>(); //сохраняем сиволы строки в словарь
        foreach (char ch in text)
        {
            if (!symbols.ContainsKey(ch)) symbols.Add(ch, 1); else symbols[ch] += 1;
        }            
        symbols = (from p in symbols orderby p.Value ascending, p.Key descending select p).Reverse().ToDictionary(); //словарь сортируем по частоте символов
 
        foreach (KeyValuePair<char, int> p in symbols) Console.WriteLine($"{p.Key}:{p.Value}");
 
        Dictionary<char, string> dic = new Dictionary<char, string>();
 
        for(int i = 0; i < symbols.Count; i++)
        {
            dic.Add(symbols.ElementAt(i).Key , bnums[i]);
        }
 
        foreach(KeyValuePair<char, string> p in dic) Console.WriteLine($"{p.Key} : {p.Value}");
 
        string coded = string.Empty;
        foreach(char ch in text) coded += dic[ch] + ' ';
        return coded;
    }
}
Проблема в том, что результат для любого варианта, кроме примера № 1, у меня не совпадает с выходными данными. И, следовательно, автоматической проверка такое решение не примет.
Мне кажется, что моя ошибка в сортировке словаря с символами, входящими в фразу.
Также очень смущает наличие шести нулей подряд в примере № 2, так как для фразы "Птицы поют утром" у меня получилось 11 различных символов с кодами (1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011).
Если у кого-то есть свободное время и желание решить задачку, прошу указать на мои ошибки. Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2025, 11:54
Ответы с готовыми решениями:

Кодирование информации табличным способом.
В общем, от меня требуется реализовать в программе на C#, C++ Builder'e кодирование информации...

Кодирование строк unicode в байты utf-8
Необходимо написать две функции: для декодирования байтов UTF-8 в строки Unicode и для кодирования...

Кодирование текста
Люди помогите. У меня есть полностью рабочий код, который копирует неважно что неважно куда, просто...

33
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 60
12.08.2025, 16:40
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Kloshar Посмотреть сообщение
с одинаковой частотой я отсортировал в алфавитном порядке. Пробовал в обратном порядке - тоже не совпадает с ответом
Думается, что символы с одинаковой частотой должны кодироваться так, как они расположены на входе. Иначе, при гипотетическом декодировании на выходе получится белиберда. То есть, например, "СОКОЛ" на входе декодируется в "КОЛОС" или "СОЛОК" на выходе. Впрочем, про декодирование в задаче и не сказано вовсе.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.08.2025, 19:51
Третий пример получается если вообще ничего не сортировать =)
Очень вероятно, что просто совпадение(или нет).

Code
1
2
1 10 11 100 101 110 111 1000 110 1001 1010 10 1011 1100 1000 1101 1000 1110 1111 1100 10000 10001 11 
110111001011101111000110100110101010111100100011011000111011111100100001000111
Это полный тухляк по заданию, даже весело, поскольку меня этим не оценивают)

Добавлено через 2 минуты
Kloshar, пиши им в саппорт, пусть краснеют.
1
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
12.08.2025, 22:16  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Третий пример получается если вообще ничего не сортировать =)
Очень вероятно, что просто совпадение(или нет).
фигня какая-то получается здесь просто используются первые 8 кодов по порядку, а дальше какая-то белиберда
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.08.2025, 22:47
Цитата Сообщение от Kloshar Посмотреть сообщение
а дальше какая-то белиберда
Дальше не белиберда, каждая новая буква получает след. пор. номер, а те что назначенные, используют свои.

Вот и в итоге, 2 пример абсолютно нереальный для 34буквенного алфавита.
А 3 так вообще от другой задачи, вероятно. Потому что я не верю в совпадения)

Добавлено через 8 минут
Таблица что бы было видно :
М а л ь ч и к ' ' и г р а е т ' ' в ' ' ф у т б о л
1 10 11 100 101 110 111 1000 110 1001 1010 10 1011 1100 1000 1101 1000 1110 1111 1100 10000 10001 11
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
12.08.2025, 23:04
Цитата Сообщение от Kloshar Посмотреть сообщение
фигня какая-то
вам это буквально первым сообщением golosalex указал и подтвердили другие люди.

Рекомендую забить на эту задачу и ресурс в целом.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3450 / 2771 / 575
Регистрация: 04.09.2018
Сообщений: 8,716
Записей в блоге: 3
13.08.2025, 00:06
Давно наблюдаю за темой, не вмешивался..
С задачей все нормально. Обратно в текст переводить не нужно.
Необходимо закодировать входной текст в последовательность 1/0. Этот алгоритм будет проверяться на других спонтанных текстах.

Добавлено через 7 минут
Цитата Сообщение от Wolfdp Посмотреть сообщение
golosalex указал
Цитата Сообщение от golosalex Посмотреть сообщение
а это точно метод хранения данных?
Цитата Сообщение от golosalex Посмотреть сообщение
что можно такие двоичные данные обратно в текст перевести
Видимо здесь неувязка и произошла.
Ничего обратно преобразовывать не надо. А "метод хранения" - это лишь фразеологизм из контекста задания.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
13.08.2025, 00:30
Цитата Сообщение от wizard41 Посмотреть сообщение
С задачей все нормально
Не соглашусь.

Если портал позиционирует себя как "тест на пригодность работника", то задача должна быть максимально приближенной к реальным. "Хранить" данные в необратимом формате -- нонсенс. Даже более того, человек который НЕ задумается что из текущей таблицы нельзя распаковать обратно, как раз НЕ проходит. Понимание абсурдности задания тоже довольно важный критерий для работника.

Если даже скинуть критерий с "задача на профпригодность" до "обучающая", то тут тоже довольно плохо. Можно придумать не один десяток вариантов, где нужно будет оперировать не кратным количеством битов, и при этом оставаться в рамках логики. Это позволит не тупить студенту над контекстом.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3450 / 2771 / 575
Регистрация: 04.09.2018
Сообщений: 8,716
Записей в блоге: 3
13.08.2025, 00:44
Wolfdp, бесспорно. Только вот вряд ли эта задача конкретно на профпригодность. Это задание с каких-то курсов, причем, одновременно на сообразительность + логическое мышление.
P.S. я ее решил, проходит все тесты.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
13.08.2025, 00:53
Хаффманом вот так вышло:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using ConsoleApp2.HuffmanCodes;
 
string[] texts =
[
    "аааабвв",
    "Мальчик играет в футбол"
];
 
foreach (var (v, i) in texts.Select((v, i) => (v, i)))
{
    var table = BuildFrequencyTable(v);
    var huffmanTree = new HuffmanTree(table);
    var encodings = huffmanTree.GetEncodings();
    
    Console.WriteLine($"{i+1}. Слово: {v}");
    Console.WriteLine("\tКодовая таблица: ");
    foreach (var (kvp, index) in table.OrderByDescending(x => x.Value).Select((v, i) => (v,i)))
    {
        Console.WriteLine($"\t{index + 1}.Key: {kvp.Key}; Frequency: {kvp.Value}; Code: {encodings[kvp.Key]}");
    }
    
    Console.WriteLine($"\tКод: {string.Join(string.Empty, v.Select(ch => encodings[char.ToLower(ch)]))}");
}

HuffmanTree

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
class HuffmanTree(Dictionary<char, int> freq_table)
{
    TreeNode treeRoot = BuildHuffmanTree(freq_table);
    
    /// <summary>
    /// Returns binary representation in string format
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public Dictionary<char, string> GetEncodings()
    {
        var dict = new Dictionary<char, string>();
        TraverseTree(treeRoot.Left!, dict, "0", 1);
        TraverseTree(treeRoot.Right!, dict, "1", 1);
        return dict;
    }
    
    /// <summary>
    /// 
    /// </summary>
    /// <param name="node"></param>
    /// <param name="dict"></param>
    /// <param name="code">String representation of binary code</param>
    private void TraverseTree(TreeNode node, Dictionary<char, string> dict, string code, int level)
    {
        if (node.IsLeaf)
        {
            dict.Add(node.Letter!.Value.Letter, code);
        }
        else
        {
            TraverseTree(node.Left!, dict, string.Concat(code, "0"),  level + 1);
            TraverseTree(node.Right!, dict, string.Concat(code, "1"), level + 1);
        }
    }
 
    static TreeNode BuildHuffmanTree(Dictionary<char, int> freq_table)
    {
        var nodes = freq_table.Select(x => new TreeNode(new LetterData(x.Key, x.Value))).ToArray();
        var heap = new MinBinaryHeap<int, TreeNode>(nodes, n => n.Freq);
    
        while (heap.Length > 1)
        {
            // logN per operation
            var min1 = heap.DeleteMin();
            var min2 = heap.DeleteMin();
            heap.Insert(new TreeNode(min1, min2));
        }
 
        return heap.DeleteMin();
    }
    
}
 
 
public class TreeNode
{
    public TreeNode(LetterData data)
    {
        Freq = data.Freq;
        Letter = data;
    }
    
    public TreeNode(TreeNode left, TreeNode right)
    {
        Freq = left.Freq + right.Freq;
        Left = left;
        Right = right;
    }
    
    public LetterData? Letter { get; }
 
    public TreeNode? Left { get; }
 
    public TreeNode? Right { get; }
 
    public int Freq { get; }
    
    //IsLeaf == true means not meta node and vice versa
    public bool IsLeaf => Left is null && Right is null;
 
    public override string ToString() =>  $"Letter: {Letter?.Letter.ToString() ?? "NULL"}; IsLeaf: {IsLeaf};  {Freq}";
}
 
 
public readonly struct LetterData(char letter, int freq)
{
    public char Letter { get; } = letter;
 
    public int Freq { get; } = freq;
}

MinBinaryHeap

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
using System.Collections;
using System.Runtime.CompilerServices;
 
namespace ConsoleApp2.HuffmanCodes;
 
/// <summary>
/// Port from https://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/MinPQ.java
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TNode"></typeparam>
// todo: rethink enumeration?
public class MinBinaryHeap<TKey, TNode> : IEnumerable<TNode>
{
    #region Fields
 
    private readonly Func<TNode, TKey> _keySelector;
    private TNode[] _nodes;
    private readonly Comparer<TKey> _comparer;
 
    #endregion
 
    #region Constructors
 
    public MinBinaryHeap(int capacity, Func<TNode, TKey> keySelector, Comparer<TKey>? comparer = null)
    {
        ArgumentNullException.ThrowIfNull(keySelector);
        ArgumentOutOfRangeException.ThrowIfLessThan(capacity, 0, nameof(capacity));
        _nodes = new TNode[capacity + 1];
        _comparer = comparer ?? Comparer<TKey>.Default;
        _keySelector = keySelector;
        Length = 0;
    }
 
 
    public MinBinaryHeap(Func<TNode, TKey> keySelector) : this(4, keySelector, Comparer<TKey>.Default)
    {
    }
 
    public MinBinaryHeap(TNode[] nodes, Func<TNode, TKey> keySelector, Comparer<TKey>? comparer = null)
    {
        ArgumentNullException.ThrowIfNull(keySelector);
        ArgumentNullException.ThrowIfNull(nodes);
        _keySelector = keySelector;
        _comparer = comparer ?? Comparer<TKey>.Default;
 
        Length = nodes.Length;
        _nodes = new TNode[nodes.Length + 1];
        for (var i = 0; i < Length; i++)
            _nodes[i + 1] = nodes[i];
 
        for (var k = Length / 2; k >= 1; k--)
            Sink(k);
    }
 
    internal MinBinaryHeap(MinBinaryHeap<TKey, TNode> original)
    {
        _keySelector = original._keySelector;
        _comparer = original._comparer;
        Length = original.Length;
        _nodes = new TNode[original._nodes.Length];
        for (var i = 0; i < _nodes.Length; i++)
            _nodes[i] = original._nodes[i];
    }
 
    #endregion
 
    #region Public API
 
    public int Length { get; private set; }
 
    public bool IsEmpty => Length == 0;
 
    public void Insert(TNode x)
    {
        // double size of array if necessary
        if (Length == _nodes.Length - 1) Resize(2 * _nodes.Length);
        // add x, and percolate it up to maintain heap invariant
        _nodes[++Length] = x;
        Swim(Length);
        // assert isMinHeap();
    }
 
    public TNode DeleteMin()
    {
        if (IsEmpty)
            throw new InvalidOperationException("BinaryHeap is empty");
 
        var min = _nodes[1];
        Exchange(1, Length--);
        Sink(1);
        _nodes[Length + 1] = default!; // to avoid loitering and help with garbage collection
        if ((Length > 0) && (Length == (_nodes.Length - 1) / 4))
            Resize(_nodes.Length / 2);
        // assert isMinHeap();
        return min;
    }
    
    public IEnumerator<TNode> GetEnumerator() => new MinHeapEnumerator(this);
    
    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
 
    #endregion
 
    #region Implementation details
 
    private void Sink(int k)
    {
        while (2 * k <= Length)
        {
            var j = 2 * k;
            if (j < Length && Greater(j, j + 1)) j++;
            if (!Greater(k, j)) break;
            Exchange(k, j);
            k = j;
        }
    }
 
    private void Swim(int k)
    {
        while (k > 1 && Greater(k / 2, k))
        {
            Exchange(k / 2, k);
            k /= 2;
        }
    }
 
    private void Resize(int capacity)
    {
        TNode[] temp = new TNode[capacity];
        for (var i = 1; i <= Length; i++)
        {
            temp[i] = _nodes[i];
        }
 
        _nodes = temp;
    }
 
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    private void Exchange(int i, int j) => (_nodes[i], _nodes[j]) = (_nodes[j], _nodes[i]);
 
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    private bool Greater(int i, int j) => _comparer.Compare(_keySelector(_nodes[i]), _keySelector(_nodes[j])) > 0;
 
    private class MinHeapEnumerator(MinBinaryHeap<TKey, TNode> heap) : IEnumerator<TNode>
    {
        private TNode? _current;
        private MinBinaryHeap<TKey, TNode> _clone = new(heap);
 
        public bool MoveNext()
        {
            if (_clone.IsEmpty)
                return false;
            
            _current = _clone.DeleteMin();
            return true;
        }
 
        public void Reset() => throw new NotSupportedException("Reset state is not supported in heap enumerators");
 
        TNode IEnumerator<TNode>.Current => _current;
 
        object? IEnumerator.Current => _current;
 
        public void Dispose()
        {
            _current = default!;
            _clone._nodes = null!;
            _clone = null!;
        }
    }
 
    #endregion
}

Code
1
2
3
4
5
1. Фраза: аааабвв
Код: 1111000101
 
2. Фраза: Мальчик играет в футбол
Код: 010001110110101001111101101110011101100111110011111111010100110101000010110001010000000011011
Миниатюры
Кодирование по частотности  
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3450 / 2771 / 575
Регистрация: 04.09.2018
Сообщений: 8,716
Записей в блоге: 3
13.08.2025, 00:54
Цитата Сообщение от Wolfdp Посмотреть сообщение
"Хранить" данные в необратимом формате -- нонсенс.
Не нужно ничего хранить. Эта задача типа задач кодварс - лишена какого-л. смысла (реально нужного в практике). Она лишь для определения (развития) логических навыков, используя текущие инструменты (не обязательно шарп, например Java...)
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
13.08.2025, 01:24
Цитата Сообщение от IamRain Посмотреть сообщение
Код: 1111000101
И один и тот же Хаффман может кодировать по-разному, если соглашения отличаются, к примеру, тут вместо 1111 могло бы быть 0000, но обычно convention - идем влево по дереву - ноль добавляем в префикс, вправо - единицу.

Добавлено через 7 минут
И там обратите внимание, кодовая табличка отсортирована по убыванию частот - для наглядности, частые символы - имеют меньшую длину, более редкие - бОльшую длину.

Добавлено через 11 минут
Эм, недостающий кусок кода:
C#
1
2
3
4
5
6
7
8
9
10
11
Dictionary<char, int> BuildFrequencyTable(string text)
{
    var dict = new Dictionary<char, int>();
    foreach (var c in text)
    {
        var ch = char.ToLower(c);
        if (!dict.TryAdd(ch, 1))
            dict[ch]++;
    }
    return dict;
}
Добавил вывод о длине сообщения и числе битов в результирующей кодировке.
Code
1
2
3
2. Слово: Мальчик играет в футбол
...
Код: 010001110110101001111101101110011101100111110011111111010100110101000010110001010000000011011 (93 length, but phrase is 23 length)
Если использовать кодировку постоянной длины, то понадобилось бы 6 бит на символ (под максимум 64 символа).
Итого на фразу длиной 23 символа ушло бы 138 бит, а с Хаффманом ушло 93 бита. 45 бит сэкономили
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
13.08.2025, 02:29
Цитата Сообщение от wizard41 Посмотреть сообщение
Только вот вряд ли эта задача конкретно на профпригодность.
Цитата Сообщение от Kloshar Посмотреть сообщение
эта задача со всем известного сайта по поиску работы для подтверждения навыка c# (практика).
либо TC неправильно прочитал about на сайте, либо сайт немного "не очень". Учитывая теги "шифрования", а больше склоняюсь ко второму.

Цитата Сообщение от wizard41 Посмотреть сообщение
Это задание с каких-то курсов, причем, одновременно на сообразительность + логическое мышление.
Мне ещё в лицее смогли донести что по большей части такие задачи тренируют только в решении таких задач. Это как считать что математик априори хорошо играет в шахматы и наоборот. Можно конечно совместить эти две вещи, но очень быстро прийдешь к пониманию что одно другому не шибко помогает.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3450 / 2771 / 575
Регистрация: 04.09.2018
Сообщений: 8,716
Записей в блоге: 3
13.08.2025, 02:47
Wolfdp, не буду спорить, конечно, и что-то утверждать. Однако, "всем известный сайт", как говорит автор - совсем не всем известный, оказывается. И таких сайтов в наше время могло развестись довольно много.
Одно могу сказать точно - для оценки кандидата на ИТ-специальность, в конкретную контору - таких задач не дают. А если уже дают - то дело совсем плохо.
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
13.08.2025, 10:13  [ТС]
IamRain, спасибо за решение методом Хаффмана! Самому было интересно попробовать, но познаний маловато. Потихоньку разберу как это делается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.08.2025, 10:13
Помогаю со студенческими работами здесь

Кодирование Виженером кирилических символов
(Простите за корявый русский)) Я заганяю в 2 мерный масив рандомом таблицу аскии for (i = 0; i &lt;=...

Кодирование по Хаффману
Кто умеет кодировать по Хаффману?!

ASCIIEncoding: Кодирование русских символов
Всем доброго времени суток. Вопрос вот о чем, имеется небольшой текстовый файл, с текстом, например...

Кодирование и декодирование текста
Я поставила textbox в основную форму приложения и 2 кнопочки. 1-ая -- кодирование , 2-ая --...

Считывание текста с файла, кодирование, запись в другой файл
Помогите написать прогу которая считывает текст с файла(ну к примеру a.in), кодирует его в другой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru