Архиватор на Go | Урок #8: Алгоритм Шеннона-Фано - реализация

Sdílet
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

Komentáře • 10

  • @nikolay_tuzov
    @nikolay_tuzov  Před rokem

    ❤️ Если у вас есть желание поддержать развитие канала:
    www.patreon.com/tuzov
    boosty.to/nikolay.tuzov

  • @user-lg6sr7ez4o
    @user-lg6sr7ez4o Před 2 lety +3

    Комментарий для продвижение канала

  • @sattelliteru
    @sattelliteru Před 2 lety +1

    Очень интересные видео. Спасибо!

  • @user-bg6dl8sn9b
    @user-bg6dl8sn9b Před 2 lety +4

    выпусти пожалуйста видео про хеширование, про его виды и реализации например Стрибог, думаю всем будет интересно

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +1

      Про хэш-таблицы у меня уже есть видео. Если интересует именно процесс хэширования более подробно, то окей, я подумаю над этим. Спасибо за предложение.

    • @user-bg6dl8sn9b
      @user-bg6dl8sn9b Před 2 lety +1

      Само хеширование достаточно простое для понимая. Я имел ввиду про алгоритмы отечественные хеширования как они строятся и тд

  • @user-ss5js8pe3w
    @user-ss5js8pe3w Před rokem

    Спасибо за урок) Нравится твоё последовательное изложение. Узнал много чего нового для себя в плане написания более качественного и расширяемого кода. Буду стараться теперь больше думать в этом направлении)) Как раз сейчас изучаю 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
      @nikolay_tuzov  Před rokem

      Спасибо) А напомни таймкод, я гляну. Уже плохо помню

    • @user-ss5js8pe3w
      @user-ss5js8pe3w Před rokem

      @@nikolay_tuzov Вот здесь - 16:40.