Может кто-нибудь объяснить алгоритм Виттера?
Я искал алгоритм Виттера, который позволяет кодировать и декодировать символы. Реализация алгоритма динамического кодирования Хаффмана. Вот это набросок из Википедии:
Для каждого передаваемого символа и передатчик, и приемник выполняют процедуру обновления:
- Если текущим символом является NYT, добавьте два дочерних узла к узлу NYT. Один будет новым узлом NYT, другой - листовым узлом для нашего символа. Увеличьте вес для нового листового узла и старого NYT и перейдите к шагу 4. Если текущий символ не является NYT, перейдите к листовому узлу символа.
- Если этот узел не имеет наибольшего номера в блоке, поменяйте его местами с узлом, имеющим наибольшее число, за исключением случаев, когда этот узел является его родительским
- Увеличить вес для текущего узла
- Если это не корневой узел, перейдите к родительскому узлу, затем перейдите к шагу 2. Если это корневой, конец.
Есть некоторые необъяснимые вещи, например, какое число больше в блоке? Когда менять местами и что менять? когда увеличивать вес узлов и какие узлы? а также этот алгоритм описан в "goto's", как поместить его в оператор if else и loop?