Архиватор на Go | Урок #8: Алгоритм Шеннона-Фано - реализация
Vložit
- čas přidán 8. 06. 2024
- В этом видео мы реализуем алгоритм Шеннона-Фано и напишем тесты для этого кода.
Весь исходный код из уроков можно найти здесь: github.com/JustSkiv/archiver Коммиты в данный репозиторий повторяют структуру уроков.
👾 Мои проекты:
- Golang Digest: t.me/golang_digest - регулярные подборки интересных материалов по Go.
- Личный Telegram-канал: t.me/ntuzov
- Подкаст по Go: tuzov.link/gogetpodcast1 - в первом выпуске мы подробно обсуждаем дженерики.
Тайм-коды:
00:00 Вступление
00:12 Подготовка пакетов table и shannon_fano
02:40 Интерфейс Generator
03:24 Пишем пакет shannon_fano
04:03 Статистика использования символов
05:09 Функция build()
08:24 Сортировка кодируемых символов
10:35 Функция assignCodes()
11:44 Функция bestDividerPosition(): разбиение списка символов по сумме частот
16:48 Пишем тест для функции bestDividerPosition() и обсуждаем как она работает
23:34 assignCodes(): добавляем новый символ в последовательность кодирования
27:36 assignCodes(): завершение
28:14 assignCodes(): пишем тест и разбираемся в работе
33:04 build(): завршение
33:51 build(): пишем тест и разбираемся в работе
37:22 Метод Export()
39:57 NewTable(): завершение
40:11 Заключение и домашнее задание
#golang #algorithms
❤️ Если у вас есть желание поддержать развитие канала:
www.patreon.com/tuzov
boosty.to/nikolay.tuzov
Комментарий для продвижение канала
Очень интересные видео. Спасибо!
выпусти пожалуйста видео про хеширование, про его виды и реализации например Стрибог, думаю всем будет интересно
Про хэш-таблицы у меня уже есть видео. Если интересует именно процесс хэширования более подробно, то окей, я подумаю над этим. Спасибо за предложение.
Само хеширование достаточно простое для понимая. Я имел ввиду про алгоритмы отечественные хеширования как они строятся и тд
Спасибо за урок) Нравится твоё последовательное изложение. Узнал много чего нового для себя в плане написания более качественного и расширяемого кода. Буду стараться теперь больше думать в этом направлении)) Как раз сейчас изучаю Go, и твои уроки прям очень хорошо зашли.
Есть маленькая опечатка в функции bestDividerPosition(...): вместо left += codes[0].Quantity видимо должно быть left += codes[i].Quantity. Иначе, мы всё время первый элемент суммируем слева. И при почти одинаковых двух первых значения в тестовых codes это никак не сказывается. Но вот такой тест уже не проходит:
codes: []code{
{Quantity: 4},
{Quantity: 2},
{Quantity: 1},
{Quantity: 1},
{Quantity: 1},
{Quantity: 1},
{Quantity: 1},
},
want: 2
Т.к. он разобьётся по первому элементу, хотя должен бы по второму)
Спасибо) А напомни таймкод, я гляну. Уже плохо помню
@@nikolay_tuzov Вот здесь - 16:40.