КАК РАБОТАЮТ ХЭШ-ТАБЛИЦЫ | СТРУКТУРЫ ДАННЫХ
Стань Frontend-разработчиком с нуля до PRO в SkillFactory:
go.skillfactory.ru/0ib95A
Возврат денег за курс, если не нашли работу после обучения + скидка до 60% по промокоду Alekos до 10.12.2022 г.
Регистрация на YaTalks: ya.cc/t/TMVrDVMQ3jo2mW
КАК РАБОТАЮТ ХЭШ-ТАБЛИЦЫ | СТРУКТУРЫ ДАННЫХ
Подписывайся в соц. сетях:
Телеграм - t.me/Alek_OS
ВК - vk.com/alekos1
❤️ Поддержка канала:
Бусти - boosty.to/alekos
Юмани - yoomoney.ru/to/410011179144828
✔️ Полезные ссылки:
Основы программирования - • КАК РАБОТАЕТ ПАМЯТЬ КО...
Полезно знать - • ЯЗЫКИ ПРОГРАММИРОВАНИЯ...
Алгоритмы и структуры данных - • УСКОРЬ СВОЙ КОД В МИЛЛ...
Мысли Алека - • КАК ИЗУЧАТЬ ПРОГРАММИР...
00:00 Введение
01:04 Ключ-значение
01:57 РЕКЛАМА
03:19 Схема работы
04:32 Бесконечность
06:09 Коллизии
06:44 Связные списки
07:48 YaTalks
08:58 Хэш-функция
12:19 Размер массива (2^k)
13:28 Множитель (2^k) и размер массива ((2^k)-1)
15:25 Увеличение хэш-таблицы
17:53 Методы открытой адресации
Телеграм-канал: t.me/Alek_OS
Восхищён трудолюбием в изготовлении этой анимации ..
я уже месяц пытаюсь написать курсовую по хешированию и работа так тянулась , писала сама не понимая что пишу, но после твоего видео... Это лучшее видео из всех просмотренных) все поняла и вот уже написала половину курсовой и завтра еще продолжу и думаю, что допишу до конца) Спасибо за твой труд! Не представляешь как я тебе благодарна) Десятки сайтов и других видео об этой теме мало чего дали, но именно твоё видео стало толчком к осознанному написанию курсовой))) Подписалась тут же)
Жесть, вот пишешь ты код, а на деле видишь только верхушку айсберга, вместе с твоими видео можно окунуться в самую глубину и понять, что ты ничего не знаешь, как все устроено на самом деле. Спасибо тебе за твою работу, которая мотивирует продвигаться в изучении)
Это называется уровнем абстракции. Без этого ни одна программа не была бы написана, т.к. никто не может держать в голове всё. А так, ты гоняешь свои онклики, не особо парясь, чем в это время занимаются электроны в транзисторах. И не только интересно, а и полезно, иногда узнать, как это работает под капотом.
@@user-vu6hn4ul2i, да, только иногда голова от такого болит...
@@heterometrus9873 наоборот не болит, если оставаться абстрактным
@@AlexandroLavichez, я про последнее предложение
Только это не глубина, а всё ещё вершина айсберга)
"Написание кода, который не будет использован где-то в продакшене, считается бессмысленной тратой времени." Тестировщики и аналитики в этот момент напряглись, я думаю)
Алек, большое спасибо. Благодаря тебе смог сдать вопрос преподу по теме. Ты так классно и доходчиво объясняешь! Побольше бы такого контента)
Мда. Сказать круто - ничего не сказать! Сам материал, сама форма подачи - высший класс! Низкий поклон за такой шедевр!
Алек, спасибо большое за видео. Ты рассказываешь интересно то, что я долго обходила стороной
Спасибо Alek, так долго ждал эту тему.
Спасибо большое, очень интересно объясняешь и что важно, на низком уровне абстракции, чего очень не хватает множеству других источников. Спасибо тебе за труд, ты крутой!
Спасибо за видео, полезная тема и подача информации как всегда на высшем уровне!
Большое спасибо, отличный разбор темы!
крайне крутой контент, спасибо большое. к сожалению или счастью я не смог найти даже аналогов такого качества. доступно, красиво, интересно. было бы крайне круто ещё послушать про деревья, красно чёрные и про set
не удержался ещё раз прокоментирую. вот это шедевр. здоровья автору и прибыли за старания
Большое спасибо за этот ролик в целом и объяснение, продолжайте!
Спасибо большое! Видео огонь! Как и всегда
Как раз хотел увидеть видео по этой теме, спасибо!
Спасибо за видео! Было бы интересно от тебя услышать про многопоточность)
Круто, спасибо за видос! четко изложен материал, не нужно скучную часовую лекцию смотреть чтобы понять)
черт возьми,как же я обожаю этот канал за подробности) спасибо
Спасибо за ролик,хороший получился. Можно ещё видео про графы и способы их хранения
Крайне полезное видео. Спасибо
Первый раз оставляю комментарий под видео. Вспоминаю своего препода, который сам не понимал, как это работает, так статью из matenit нормально не мог прочитать. Но после твоих видео появляется желание открыть IDE и начать: перепивать код, добавить новое алгоритмы, поломать его и тем самым разобраться ещё практически. Это не программирование - это искусство. Браво, маэстро! :)
Крайне полезно и интересно!
большое спасибо за все видео так держать 👍👍👍
Спасибо большое за интересное видео!!!
Это очень годно, спасибо за труды!
Продолжай в том же духе 🙂👍🏻
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
extremecode🐤
Приветствую. Отличное высказывание - Знание должны быть достойные и доступные!
Надо по федеральным каналам такое крутить Спасибо за ролик!
Спасибо за видео. Коммент в поддержку!
классное видео, анимации вообще огонь, даже засматривался иногда, отвлекаясь от сути
Просто супер, молодец, очень классно все разложил 👍👍👍
Класс, как раз делаю практическую работу по структурам данных
Лайк, как всегда. Для совсем начинающих из целевой аудитории ролика подойдёт книга П. Луридас. "Алгоритмы для начинающих. Теория и практика для разработчика.". В главе "Гардероб, коллизия и слот" всё разложено по полочкам.
Первый. Красава,ты лучший братишка спасибо тебе,любим тебя друже
Отличная подача, красиво, ёмко, доходчево, подписка продана 🙃
Привет,очень хорошие видосы у тебя,если можно давай про многопоточность.думаю многим будет интересно.
32-битный int имеет 1
Очень полезный ролик, помог мне разобраться в хештаблицах! Но только в момент, когда ты рассказывал про то, что размеры массива нельзя брать числа представляемые 2^k - 1, я не мог понять, почему, и вот только после того как ты рассказал про то, что сам хеш мы будем рассчитывать, умножая на число вида 2^k - 1, тогда уже стало понятно. Надо бы поменять местами эти две части видео
Круто!
вопрос: откуда взято, что при модуле 2^k -1 при делении строки(я так понимаю набор char-ов cклеенных) на такой модуль, получится то же, что и при любой перестановке char-ов и повторении операции с ней аналогично? Меня просто интересует какой-то учебник или материалы, где подобные глубокие штуки выводятся. Не уверен даже, есть ли это в Кормене или в Кнуте.
Я наконец смог осознать, как это работает. Спасибо тебе огромное
Смотрел этот канал раньше из-за крутой подачи. Когда поступил на программного инженера, этот канал стал для меня спасением. Спасибо, Алек ❤️ Вот бы преподы в вузе так же материал разбирали ;(
лайк за объяснение, хорошо и понятно объяснил тему которую многие не сразу понимают. дизлайк за рекламу платформы, что не то что не помогает в получении профессии, а напротив мешает.
единственный и неповторимый канал!
Подписался. Это просто нечто а не уроки.
Как вовремя, как раз в вузе проходим)
как не вовремя, уже прошли((
лайк в поддержку канала!
Смотрю и думаю: это ж сколько программисты в прошлом морочились, чтобы такое сделать, а сейчас можно за 5 секунд написать вызов нужного метода и не запариваться
Не сказал бы, что я узнаю что-то реально новое из твоих видосов, но то, что они упорядочивают имеющиеся данные в башке - факт. Спасибо :)
спасибо!
1:44 перепутал местами HT.get и HT.delete но все равно спасибо за такое тщательно проработанное объяснение
Очень крутой видос
Мне очень нравится твой канал и контент Ты лучший (из тех что я знаю) в своём роде p.s. Откуда такой классный шрифт? Сам рисовал?
круто, однако!
Интересно, что же будет, если запросить у хэш-таблицы значение по ключу, которого нет, но хэш которого совпадает тем ключом, которой есть в таблице? Ведь не каждый же элемент хэш-таблицы есть связный список?
От 0 до (2^32)-1 в инт может поместится значений. Если мы говорим что хэш 32бита то на все равно положительное там число или отрицательные, мы все равно будем его использовать поэтому для наглядности чтения его записывают как unsigned int. Или я что то не понял?
Самое крутое в этой рекламе это «индивидуальный проект» у всех одинаковый 😅
Доброго дня! на какой структуре данных лучше всего реализовать хэш таблицу (ключ-значение) для миллиарда записей. нужно делать извлечение,вставку,удаление,изменение. удаление,изменение,вставка не должны снижать скорость извлечения ?
Комментарий в поддержку автора
Столкнулся тут с оптимальным поиском, почитывая какую-то книгу… была приведена ссылка на статью о том, что оптимальный поиск задан как суперпозиция поиска в глубину и ширину с разными весами, и веса подобраны в статье эмпирически. Поистине нет предела совершенству, некорректных мат задач тьма тьмущая, и огромная зияющая дыра в развитии методов их решений. Чем дальше заходим с развитием выч техники, тем больше проблем для решения)
Не понял, а почему хеш с множителем 2^k по модулю (2^k) - 1независимо от перестановки букв в слову dog выдаёт индекс 4?
какое умное видео, действительно а зачем вообще говорить о том что всё решает увеличение размера хеша
Помогите пожалуйста! Что значит "все перестановки одной и той же строки ключа ... "? 13:56
this is such a relevant video
1:32 Как минимум в Python не все типы данных могут быть ключами, потому что у неизменяемых типов метод __hash__ не переопределён
Немогли бы вы уточнить про веб разработчиков?
Ля! Я б даже проданатил бы тему от Тебя. Хочу услышать про многопоточность в твоей интерпретации
Разве нельзя проблему коллизии свести к приемлемому минимуму путём добавления соли к ключу, который в свою очередь сам есть строка фиксированной длины? Или путём получения индекса пересечением двух или даже более хэшей одного ключа?
В конце (выбор хэш-функции), надо полагать, имелось в виду не "создание объекта В хэш-таблице", а "создание объекта хэш-таблицы". И еще мне не совсем понятно, при чем тут "взлом". Специально выбирать данные для максимизации числа коллизий - это достаточно странное занятие. Не уверен, что в реальной жизни можно с этим столкнуться, учитывая, если только вместо произвольных данных для вставки не выбирать одинаковые, приводящие к коллизиям.
Алек, спасибо за информативный контент! Помнится, ты говорил в одном из роликов, что устроишь голосование в телеге на тему создания подробного, но платного, обучающего курса. Скажи ещё жива эта идея?
Почему нельзя ключ хранить также в массиве?
После первого просмотра осталось очень много открытых вопросов, но закрывать их не вижу смысла, так как я на своем пути пока не сталкивался с необходимостью понимать внутреннее устройство. Может быть изза того что я новичок. Хз
Две рекламы в ролике бесят, остальное - отлично. Только говори помедленнее, а то тяжеловато понять тему
Поддерживаю. Рекламы - больше, материал - сумбурнее. Надеюсь, не тенденция. Канал в общем нравится. Много не попсовой информации.
Если на смартфоне с Android, то ставь KZhead Revanced. Если на ПК, то расширение SponsorBlock. Да, я советую это прямо в комментариях к видео, в котором реклама. Потому что первые видео (хотя бы) выглядели как честная попытка популяризации темы, был виден перевес ценности содержимого над всем остальным. Сейчас же качество видео упало до среднестатистического, если не ниже. Такое ощущение, что первичная цель выпуска роликов поменялась. Раньше на первом месте была информация, сейчас же - просто сам факт выпуска видео, потому что в него можно вставить рекламу. Подача информации путаная, местами видны пробелы в повествовании, как будто из книги вырвали страницу. Фоновая музыка стала громче, что затрудняет понимание и без того заниженного по сравнению с первыми роликами качества информации.
Автор, вы сами говорите, что необходимы базовые знания в математике для программирования и тут же рекламируете чудодейственные сжатые курсы, где ни материал нормально не подан (обратная связь фактически отсутствует, а раз нельзя задать уточняющие вопросы в реальном сремени - эффективность обваливается) ни практические задания не дают закрепить знания. Нормально материал подать, с шансом на реальное понимание - это в университете, исключительно на очном отделении, когда с преподавателем можно вживую обсудить а не печатать запрос и ждать, пока ответят. Даже в универе не всегда выходит научиться. А тут сжатые курсы. Я знаю человека, который у них начал обучение и собеседовал такого выпускника. Вы абсолютно правы - без базовых знаний математики и теории обработки и хранения данных (то, что на первых курсах не по одному семестру проходится) - ловить нечего. От этих курсов выигрывает только организатор. Ни знаний, ни навыков по их добыче (а этому университет и учит) люди не получают. "Говнокод" который пишут "программисты" после подобной экспресс подготовки не позволяет им работать в команде. Что дальше делать такому "программисту" после выпуска, вы бы лично его на работу взяли, будь вы lead или PM?
Разве кто-то ведётся по ссылке рекламы? Программирование почти не требует физических навыков. Это значит, что лишь цифровая информация понадобится для обучения. Раз в интернете можно найти всё разрешённое и не, то почему бы не сыскать готовые материалы по нужной тематике? Новичкам зачастую нужны дороги изучения, чтобы не блуждать и изучить только необходимое для работы. Насколько известно, ИНФОЦЫГАНЕ используют синдром упущенной выгоды. Да вообще, что за тренд создавать курсы в пространстве СНГ? напишу для целеустремлённых. Курсы всегда раскрывают план или силлабус бесплатно. вот и вам темы, по которой становятся профи. Да, сертификат не получишь, но это неважно. Лучше ходить корочкой, чем сертификатами от инфоцыгане. Знающий программист не останется безработным. Стартапы в помощь.
Тут стоит также понимать, что изготовление подобного видео с такого качества анимацией - большой труд, поэтому должен оплачиваться, а как вы понимаете когда просмотров ещё не так много, рекламодателей выбирать не приходиться.
Таким образом автор дал тебе подсказку, что идти туда не надо) Все пробелы в знаниях математике можно закрыть в ходе самостоятельного обучения. Не нужно знать весь матан)))
Во-первых прошел ли ты сам эти курсы чтобы так рассказывать о них, во вторых - это реклама, в третьих реклама ресурса легального он не обманывает и все такое, а значит она правоверная и в четвертых любая работа должна оплачиваться
@@xmahz 1. Я собеседовал человека после них. И лично знаю того, кто на них учится. Пробовать что-то тухлое, чтобы узнать его вкус не обязательно 2. Есть разница, что рекламировать, именно о этом и моё сообщение. 3. При чем тут обман или что-то нелегальное? Я про это и не писал, остальное - ваши домыслы. 4. Должна. И что?
Не очень понял как работает случай , когда у нас место в массиве заканчивается. Может кто нибудь пояснить? И rehash
какой-то винегрет из информации которая пролетела перед глазами на первой космической
Спасибо! Пойду тик-токи снимать
Очередное прекрасное видео про доступные знания, спасибо тебе Алек! За свой опыт (C,C#,Python,Js) не разу не притрагивался к хеш-таблицам только с открытым ртом смотрел как работает sha256 и думал о том какой вообще должна быть хеш-функция чтобы исключить коллизии потом понял что буду говорить что это невозможно пока кто нибудь не сделает такую реализацию наверно это уже и не будут называть страшным словом хеш-функция. Так вот я думаю что скорее всего этим типом хранения данных я займусь в следующим году)))
*Осталось совсем немного*
@@nakidai да))))
Я уже третий месяц учусь в SkillFactory и должен сказать что обучение у них такое себе. 5 баллов из 10 (имхо)
Связанные списки в ячейках хэштаблицы? Ну да, ну да, технологии 90х еще живее всех живых.
Массив Tuple ? 2 массива string ? Двумерный массив? Меиод поиска И всё. Смысл этого? Скорость. Ладно. Я Контент интересный, спасибки Алекс. Как обычно информативно и без лишнего.
чего я в хешировании не понимаю, так это как именно ускоряется доступ к данным без необходимости прохода по всем данным. Когда работал с размерами в 2-4 Гб файлов то моя программа делал все вычисления за 5 часов, а использование хеширования свело работу к
Миф про то, что не нужно знать ничего за пределами своих прямых обязанностей порождён теми, кто заинтересован, чтобы программисты пахали, никуда не стремились и умерли на работе. Современный программист -- почти полный аналог фабричного рабочего 19го века.
так что такое хэш-таблица в итоге? для чего они нужны?
Очень интересно, но ко 2/3 видео немного уже сложновато становится)
Я не понял! Зачем ТГ канал если про видос мы узнаем из ютуба? Не надо так! ps За видос мега-лайк! Оч круто! Пожалуйста не пропадай!
5:04 Если у тебя бит уходит под знак, то так и надо писать от -2^31, а не от нуля
никто не использует int для длины массива) Зачем упоминать про знак, если всегда есть uint?
В начале по превьюхи подумал,что это очередной выпуск варламова
Зачем работать над коллизиями таблицы, если можно изменить функцию хэширования так, что бы банально не выходило два индекса, типо делить, брать модуль и домножать пока не получится уникальный индекс?
Интересно, но пока очень сложно)
Ролик хорош, но 2 рекламы за одно видео это перебор
А почему для 32-битного инта возможно только 2^31 - 1 значений хэш-функции (см. 5:13)? В Python отрицательные значения хэш-фукции совершенно точно возможны даже у объектов самых базовых типов, и что мешает сопоставить номера строк в хэш-таблицы в том числе и отрицательным значениям хэш-функции? Почему не честные 2^32?
А на сколько (в процентах) отличаются 2^32 и 2^31 - 1 ? и как критична "эта разница" при данном "количестве" значений хэш-функции ?
@@78Spaceman отличие в 2 раза
Не хочу показаться душнилой НО хэш таблица это не абстрактный тип, а структура данных, которая является одной из возможных реализаций ассоциативного массива, который в свою очередь уже является абстрактным типом данных. Если конечно я ничего не путаю)))
👍
Привет , анимация не перекроет то, что всё скомкано. Человек , который первый раз знакомиться с этой темой, просто н проймет. Может стоит останавливаться на некоторых моментах. Не раскидывать код по разным частям экрана. Может вместо c#(это вроде он?) стоит использовать псевдокод?
Так это и есть псевдокод
Char
Тип данных в программировании
@@BestMovieActors верно, кар