Java. Префиксное дерево. Основные операции, сохранение в файл, практическое применение.

В данном видео я рассказываю о префиксных деревьях. Разбираем, что из себя представляет префиксное дерево, для чего оно применяется. Изучаем и реализуем основные операции с префиксным деревом на языке программирования Java. Кроме этого я показываю как сохранить дерево в файл и потом загрузить обратно. С помощью этого проверяю, насколько выгодней может быть хранение строк в префиксном дереве на примере автомобильных номеров.
Исходники:
github.com/Arhiser/java_tutor...
Оглавление по алгоритмам:
github.com/Arhiser/java_tutor...
Поддержать канал💰:
yoomoney.ru/to/410018856244871
Группа в Telegram:
t.me/ArhiTutorials
00:00 - Вступление
00:26 - Применение в приложении
01:58 - Построение дерева и операции с ним
06:33 - Построение префиксного дерева на Java
11:22 - Операции с префиксным деревом на Java
16:31 - Сохранение дерева в файл
20:51 - Загрузка дерева из файла
25:32 - Экономия по сравнению со списком
27:12 - Замечание о Null-безопасности
28:26 - Заключение
#ArhiTutorialsJava #ityoutubersru

Пікірлер: 25

  • @vladimirbien634
    @vladimirbien634 Жыл бұрын

    Отменное представление, дискретку и теорию графов не любил с до революционных времен Мих Сер-ча . А здесь и пример и контр пример. Огромное СПАСИБО.

  • @Andrzej3935
    @Andrzej39352 жыл бұрын

    Уау, так вот просто релизовать по памяти хороший алгоритм, мастер! Спасибо за ваш труд, очень ценно.

  • @Yornero
    @Yornero2 жыл бұрын

    Классный урок, не знал, что настолько просто можно записывать деревья в файл)

  • @El-zp6ov
    @El-zp6ov3 жыл бұрын

    Спасибо !) Очень понятное изложение темы.

  • @yeson6581
    @yeson6581 Жыл бұрын

    Спасибо, Сергей! очень полезное и интересное видео. Уровень знаний восхищает)

  • @zvnman
    @zvnman3 жыл бұрын

    Спасибо, огромное! Очень полезно!

  • @ediego_64
    @ediego_643 жыл бұрын

    Спасибо, интересное видео!

  • @yushchenkoalexey
    @yushchenkoalexey2 жыл бұрын

    Сергей, браво, очень полезное видео. Спасибо!

  • @orewka
    @orewka3 жыл бұрын

    Спасибо огромное за новые знания)

  • @NikolayMishin
    @NikolayMishin8 ай бұрын

    потрясающее объяснение, спасибо!!

  • @oleksandriadvigun371
    @oleksandriadvigun3712 жыл бұрын

    Очень полезный урок!

  • @abbosagzamov8499
    @abbosagzamov84993 жыл бұрын

    Познавательно ) спасибо

  • @viktors8657
    @viktors86573 жыл бұрын

    Огонь!

  • @vantonyan4217
    @vantonyan42173 жыл бұрын

    круто

  • @sshks10
    @sshks103 жыл бұрын

    Может быть надо было в заголовке добавить название Trie. Прикольный пример с номерами, но что-то сходу кажется , что их можно лучше сжать , если использовать факт , что в номерах ограниченный набор символов , их закодировать через биты, а весь список отсортировать, кароч сделать как в формате parquet.

  • @Teor991
    @Teor9913 жыл бұрын

    Спасибо за Ваши видео. По чему при работе с файлами не использовали try-with-resources?

  • @arhitutorials

    @arhitutorials

    3 жыл бұрын

    Это профессиональная деформация. Я ж под Android пишу, а там try-with-resources до сих пор не везде поддерживается. По этому часто забываю переключится на нормальную Java(

  • @user-lg4so9ly1y
    @user-lg4so9ly1y2 жыл бұрын

    Сергей, здравствуйте! Очень полезное видео. Подскажите пожалуйста, можно ли с помощью префиксного дерева решить задачу по нахождению слов в матрице букв? Буквы соединяются только со своим ближайшим соседом и повторяться не могут.

  • @quantumlexa
    @quantumlexa3 жыл бұрын

    немного странно видеть лист в реализации ноды. Если алфавит достаточно большой, то можно заменить его на Map. если алфавит достаточно мал (например допустить, что только lower case English alphabet), то можно вообще заменить его на TreeNode[] arr, и доставать ноду по char так: arr[c - 'a']

  • @user-ho9hl9tm3h
    @user-ho9hl9tm3h Жыл бұрын

    а в джава уже есть встроенный клас префиксного дерева?

  • @mosklife
    @mosklife3 жыл бұрын

    Небольшое дополнение: метод close() автоматически вызывает flush().

  • @arhitutorials

    @arhitutorials

    3 жыл бұрын

    Не для всех объектов. Например PrintWriter, close не вызывает flush. Проще вручную вызвать.

  • @mosklife

    @mosklife

    3 жыл бұрын

    @@arhitutorials Сергей, спасибо большое за ваши видео. Они сделаны очень интересно и познавательно. Но всё таки, сейчас специально посмотрел: метод close() класса PrintWriter вызывает метод out.close() класса BufferedWriter который в свою очередь вызывает flush(). Поправьте меня если я в чём то не прав? Мне всегда казалось что вызов метода flush()именно перед close() это больше как дополнительная подстраховка очищения потоков перед закрытием. По крайней мере у основных потоков пакета java.io. Знаете это как в Intellij Idea оставили кнопку save all, вроде как идея сама всё сохраняет после каждого ввода но если хотите можете использовать save .

  • @arhitutorials

    @arhitutorials

    3 жыл бұрын

    @@mosklife у меня в обычной java 8 это выглядит так: drive.google.com/file/d/1EwsvZns-eju2s_DhUm29oal5cqrbOQd2/view?usp=sharing То есть метод close() класса BufferedWriter вызывает flushBuffer() и свое содержимое перед закрытием в поток отправляет, но out.flush() на этом потоке не вызывается. Надо вызывать flush() вручную, только тогда вызывается out.flush(). А если этого не сделать, данные в конец файла стабильно недозаписываются.

  • @user-cz6mp5vr6z
    @user-cz6mp5vr6z3 жыл бұрын

    круто

Келесі