КАК РАБОТАЮТ ХЭШ-ТАБЛИЦЫ | СТРУКТУРЫ ДАННЫХ
Стань Frontend-разработчиком с нуля до PRO в SkillFactory:
go.skillfactory.ru/0ib95A
Возврат денег за курс, если не нашли работу после обучения + скидка до 60% по промокоду Alekos до 10.12.2022 г.
Регистрация на YaTalks: ya.cc/t/TMVrDVMQ3jo2mW
КАК РАБОТАЮТ ХЭШ-ТАБЛИЦЫ | СТРУКТУРЫ ДАННЫХ
Подписывайся в соц. сетях:
Телеграм - t.me/Alek_OS
ВК - 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 Методы открытой адресации
Пікірлер: 193
Телеграм-канал: t.me/Alek_OS
Восхищён трудолюбием в изготовлении этой анимации ..
я уже месяц пытаюсь написать курсовую по хешированию и работа так тянулась , писала сама не понимая что пишу, но после твоего видео... Это лучшее видео из всех просмотренных) все поняла и вот уже написала половину курсовой и завтра еще продолжу и думаю, что допишу до конца) Спасибо за твой труд! Не представляешь как я тебе благодарна) Десятки сайтов и других видео об этой теме мало чего дали, но именно твоё видео стало толчком к осознанному написанию курсовой))) Подписалась тут же)
Жесть, вот пишешь ты код, а на деле видишь только верхушку айсберга, вместе с твоими видео можно окунуться в самую глубину и понять, что ты ничего не знаешь, как все устроено на самом деле. Спасибо тебе за твою работу, которая мотивирует продвигаться в изучении)
@user-vu6hn4ul2i
Жыл бұрын
Это называется уровнем абстракции. Без этого ни одна программа не была бы написана, т.к. никто не может держать в голове всё. А так, ты гоняешь свои онклики, не особо парясь, чем в это время занимаются электроны в транзисторах. И не только интересно, а и полезно, иногда узнать, как это работает под капотом.
@heterometrus9873
Жыл бұрын
@@user-vu6hn4ul2i, да, только иногда голова от такого болит...
@AlexandroLavichez
Жыл бұрын
@@heterometrus9873 наоборот не болит, если оставаться абстрактным
@heterometrus9873
Жыл бұрын
@@AlexandroLavichez, я про последнее предложение
@user-nt1re9ym4i
Жыл бұрын
Только это не глубина, а всё ещё вершина айсберга)
"Написание кода, который не будет использован где-то в продакшене, считается бессмысленной тратой времени." Тестировщики и аналитики в этот момент напряглись, я думаю)
Алек, большое спасибо. Благодаря тебе смог сдать вопрос преподу по теме. Ты так классно и доходчиво объясняешь! Побольше бы такого контента)
Спасибо Alek, так долго ждал эту тему.
Мда. Сказать круто - ничего не сказать! Сам материал, сама форма подачи - высший класс! Низкий поклон за такой шедевр!
Алек, спасибо большое за видео. Ты рассказываешь интересно то, что я долго обходила стороной
черт возьми,как же я обожаю этот канал за подробности) спасибо
Спасибо за видео, полезная тема и подача информации как всегда на высшем уровне!
Спасибо большое! Видео огонь! Как и всегда
Большое спасибо, отличный разбор темы!
Спасибо большое, очень интересно объясняешь и что важно, на низком уровне абстракции, чего очень не хватает множеству других источников. Спасибо тебе за труд, ты крутой!
Как раз хотел увидеть видео по этой теме, спасибо!
не удержался ещё раз прокоментирую. вот это шедевр. здоровья автору и прибыли за старания
Это очень годно, спасибо за труды!
Крайне полезное видео. Спасибо
Большое спасибо за этот ролик в целом и объяснение, продолжайте!
Крайне полезно и интересно!
Приветствую. Отличное высказывание - Знание должны быть достойные и доступные!
большое спасибо за все видео так держать 👍👍👍
Спасибо большое за интересное видео!!!
крайне крутой контент, спасибо большое. к сожалению или счастью я не смог найти даже аналогов такого качества. доступно, красиво, интересно. было бы крайне круто ещё послушать про деревья, красно чёрные и про set
Продолжай в том же духе 🙂👍🏻
Отличная подача, красиво, ёмко, доходчево, подписка продана 🙃
Спасибо за видео. Коммент в поддержку!
Первый. Красава,ты лучший братишка спасибо тебе,любим тебя друже
классное видео, анимации вообще огонь, даже засматривался иногда, отвлекаясь от сути
Спасибо за видео! Было бы интересно от тебя услышать про многопоточность)
единственный и неповторимый канал!
Круто, спасибо за видос! четко изложен материал, не нужно скучную часовую лекцию смотреть чтобы понять)
Спасибо за ролик,хороший получился. Можно ещё видео про графы и способы их хранения
Первый раз оставляю комментарий под видео. Вспоминаю своего препода, который сам не понимал, как это работает, так статью из matenit нормально не мог прочитать. Но после твоих видео появляется желание открыть IDE и начать: перепивать код, добавить новое алгоритмы, поломать его и тем самым разобраться ещё практически. Это не программирование - это искусство. Браво, маэстро! :)
Класс, как раз делаю практическую работу по структурам данных
Подписался. Это просто нечто а не уроки.
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
@user-pw3ge3te3q
11 ай бұрын
extremecode🐤
Круто!
32-битный int имеет 1
Просто супер, молодец, очень классно все разложил 👍👍👍
Очень крутой видос
спасибо, в очередной раз помог с лабой.
лайк в поддержку канала!
Очень полезный ролик, помог мне разобраться в хештаблицах! Но только в момент, когда ты рассказывал про то, что размеры массива нельзя брать числа представляемые 2^k - 1, я не мог понять, почему, и вот только после того как ты рассказал про то, что сам хеш мы будем рассчитывать, умножая на число вида 2^k - 1, тогда уже стало понятно. Надо бы поменять местами эти две части видео
Смотрел этот канал раньше из-за крутой подачи. Когда поступил на программного инженера, этот канал стал для меня спасением. Спасибо, Алек ❤️ Вот бы преподы в вузе так же материал разбирали ;(
Надо по федеральным каналам такое крутить Спасибо за ролик!
Лайк, как всегда. Для совсем начинающих из целевой аудитории ролика подойдёт книга П. Луридас. "Алгоритмы для начинающих. Теория и практика для разработчика.". В главе "Гардероб, коллизия и слот" всё разложено по полочкам.
Привет,очень хорошие видосы у тебя,если можно давай про многопоточность.думаю многим будет интересно.
Я наконец смог осознать, как это работает. Спасибо тебе огромное
Как вовремя, как раз в вузе проходим)
@nrdllt
Жыл бұрын
как не вовремя, уже прошли((
спасибо!
вообще круто объяснил хотелось более длинные видео с более подробными объяснениями
лайк за объяснение, хорошо и понятно объяснил тему которую многие не сразу понимают. дизлайк за рекламу платформы, что не то что не помогает в получении профессии, а напротив мешает.
круто, однако!
Комментарий в поддержку автора
Было бы интересно услышать про разные виды хеширование (хэш-алгоритмы) с ключом, например, можно ли доверять JWT-токенам, если в них дано a - информация(данные в base64), b - результат(подпись), и надо найти с - ключ(secret)?
Мне очень нравится твой канал и контент Ты лучший (из тех что я знаю) в своём роде p.s. Откуда такой классный шрифт? Сам рисовал?
Не сказал бы, что я узнаю что-то реально новое из твоих видосов, но то, что они упорядочивают имеющиеся данные в башке - факт. Спасибо :)
1:44 перепутал местами HT.get и HT.delete но все равно спасибо за такое тщательно проработанное объяснение
Очередное прекрасное видео про доступные знания, спасибо тебе Алек! За свой опыт (C,C#,Python,Js) не разу не притрагивался к хеш-таблицам только с открытым ртом смотрел как работает sha256 и думал о том какой вообще должна быть хеш-функция чтобы исключить коллизии потом понял что буду говорить что это невозможно пока кто нибудь не сделает такую реализацию наверно это уже и не будут называть страшным словом хеш-функция. Так вот я думаю что скорее всего этим типом хранения данных я займусь в следующим году)))
@nakidai
Жыл бұрын
*Осталось совсем немного*
@gandromes
Жыл бұрын
@@nakidai да))))
this is such a relevant video
Столкнулся тут с оптимальным поиском, почитывая какую-то книгу… была приведена ссылка на статью о том, что оптимальный поиск задан как суперпозиция поиска в глубину и ширину с разными весами, и веса подобраны в статье эмпирически. Поистине нет предела совершенству, некорректных мат задач тьма тьмущая, и огромная зияющая дыра в развитии методов их решений. Чем дальше заходим с развитием выч техники, тем больше проблем для решения)
Ля! Я б даже проданатил бы тему от Тебя. Хочу услышать про многопоточность в твоей интерпретации
какое умное видео, действительно а зачем вообще говорить о том что всё решает увеличение размера хеша
Алек, спасибо за информативный контент! Помнится, ты говорил в одном из роликов, что устроишь голосование в телеге на тему создания подробного, но платного, обучающего курса. Скажи ещё жива эта идея?
Смотрю и думаю: это ж сколько программисты в прошлом морочились, чтобы такое сделать, а сейчас можно за 5 секунд написать вызов нужного метода и не запариваться
Я вот очень долго думал над тем, зачем вообще придумали хэш таблицы, если по сути можно в разы проще реализовать через бинарное дерево, где значением будет выступать пара из ключа и значения. Но рассматривая снова хэш-таблицу в ролике, я вдруг понимаю, что так можно сделать не только через дерево, но и списком, массивом, динамическим массивом, просто именно реализация в виде хэширования с массивом позволяет обращаться к индексам за чуть не ли за константное время, к тому же по идее должно намного меньше занимать места. Но, вариант с деревом мне так же очень нравится, потому что получаешь вдобавок отсортированность и быстрый поиск(хотя, с хэшированием тоже поиск быстрый, просто хэшируешь искомый ключ, и если он попадается в индексе, то значит нашел).
Самое крутое в этой рекламе это «индивидуальный проект» у всех одинаковый 😅
Интересно, что же будет, если запросить у хэш-таблицы значение по ключу, которого нет, но хэш которого совпадает тем ключом, которой есть в таблице? Ведь не каждый же элемент хэш-таблицы есть связный список?
Две рекламы в ролике бесят, остальное - отлично. Только говори помедленнее, а то тяжеловато понять тему
@user-eg6yg7xt9b
Жыл бұрын
Поддерживаю. Рекламы - больше, материал - сумбурнее. Надеюсь, не тенденция. Канал в общем нравится. Много не попсовой информации.
@__username__
Жыл бұрын
Если на смартфоне с Android, то ставь KZread Revanced. Если на ПК, то расширение SponsorBlock. Да, я советую это прямо в комментариях к видео, в котором реклама. Потому что первые видео (хотя бы) выглядели как честная попытка популяризации темы, был виден перевес ценности содержимого над всем остальным. Сейчас же качество видео упало до среднестатистического, если не ниже. Такое ощущение, что первичная цель выпуска роликов поменялась. Раньше на первом месте была информация, сейчас же - просто сам факт выпуска видео, потому что в него можно вставить рекламу. Подача информации путаная, местами видны пробелы в повествовании, как будто из книги вырвали страницу. Фоновая музыка стала громче, что затрудняет понимание и без того заниженного по сравнению с первыми роликами качества информации.
Доброго дня! на какой структуре данных лучше всего реализовать хэш таблицу (ключ-значение) для миллиарда записей. нужно делать извлечение,вставку,удаление,изменение. удаление,изменение,вставка не должны снижать скорость извлечения ?
От 0 до (2^32)-1 в инт может поместится значений. Если мы говорим что хэш 32бита то на все равно положительное там число или отрицательные, мы все равно будем его использовать поэтому для наглядности чтения его записывают как unsigned int. Или я что то не понял?
вопрос: откуда взято, что при модуле 2^k -1 при делении строки(я так понимаю набор char-ов cклеенных) на такой модуль, получится то же, что и при любой перестановке char-ов и повторении операции с ней аналогично? Меня просто интересует какой-то учебник или материалы, где подобные глубокие штуки выводятся. Не уверен даже, есть ли это в Кормене или в Кнуте.
В конце (выбор хэш-функции), надо полагать, имелось в виду не "создание объекта В хэш-таблице", а "создание объекта хэш-таблицы". И еще мне не совсем понятно, при чем тут "взлом". Специально выбирать данные для максимизации числа коллизий - это достаточно странное занятие. Не уверен, что в реальной жизни можно с этим столкнуться, учитывая, если только вместо произвольных данных для вставки не выбирать одинаковые, приводящие к коллизиям.
Интересно, но пока очень сложно)
Я не понял! Зачем ТГ канал если про видос мы узнаем из ютуба? Не надо так! ps За видос мега-лайк! Оч круто! Пожалуйста не пропадай!
Не понял, а почему хеш с множителем 2^k по модулю (2^k) - 1независимо от перестановки букв в слову dog выдаёт индекс 4?
Автор, вы сами говорите, что необходимы базовые знания в математике для программирования и тут же рекламируете чудодейственные сжатые курсы, где ни материал нормально не подан (обратная связь фактически отсутствует, а раз нельзя задать уточняющие вопросы в реальном сремени - эффективность обваливается) ни практические задания не дают закрепить знания. Нормально материал подать, с шансом на реальное понимание - это в университете, исключительно на очном отделении, когда с преподавателем можно вживую обсудить а не печатать запрос и ждать, пока ответят. Даже в универе не всегда выходит научиться. А тут сжатые курсы. Я знаю человека, который у них начал обучение и собеседовал такого выпускника. Вы абсолютно правы - без базовых знаний математики и теории обработки и хранения данных (то, что на первых курсах не по одному семестру проходится) - ловить нечего. От этих курсов выигрывает только организатор. Ни знаний, ни навыков по их добыче (а этому университет и учит) люди не получают. "Говнокод" который пишут "программисты" после подобной экспресс подготовки не позволяет им работать в команде. Что дальше делать такому "программисту" после выпуска, вы бы лично его на работу взяли, будь вы lead или PM?
@8yt3
Жыл бұрын
Разве кто-то ведётся по ссылке рекламы? Программирование почти не требует физических навыков. Это значит, что лишь цифровая информация понадобится для обучения. Раз в интернете можно найти всё разрешённое и не, то почему бы не сыскать готовые материалы по нужной тематике? Новичкам зачастую нужны дороги изучения, чтобы не блуждать и изучить только необходимое для работы. Насколько известно, ИНФОЦЫГАНЕ используют синдром упущенной выгоды. Да вообще, что за тренд создавать курсы в пространстве СНГ? напишу для целеустремлённых. Курсы всегда раскрывают план или силлабус бесплатно. вот и вам темы, по которой становятся профи. Да, сертификат не получишь, но это неважно. Лучше ходить корочкой, чем сертификатами от инфоцыгане. Знающий программист не останется безработным. Стартапы в помощь.
@studying-me
Жыл бұрын
Тут стоит также понимать, что изготовление подобного видео с такого качества анимацией - большой труд, поэтому должен оплачиваться, а как вы понимаете когда просмотров ещё не так много, рекламодателей выбирать не приходиться.
@gagogoga794
Жыл бұрын
Таким образом автор дал тебе подсказку, что идти туда не надо) Все пробелы в знаниях математике можно закрыть в ходе самостоятельного обучения. Не нужно знать весь матан)))
@xmahz
Жыл бұрын
Во-первых прошел ли ты сам эти курсы чтобы так рассказывать о них, во вторых - это реклама, в третьих реклама ресурса легального он не обманывает и все такое, а значит она правоверная и в четвертых любая работа должна оплачиваться
@daniilb5346
Жыл бұрын
@@xmahz 1. Я собеседовал человека после них. И лично знаю того, кто на них учится. Пробовать что-то тухлое, чтобы узнать его вкус не обязательно 2. Есть разница, что рекламировать, именно о этом и моё сообщение. 3. При чем тут обман или что-то нелегальное? Я про это и не писал, остальное - ваши домыслы. 4. Должна. И что?
1:32 Как минимум в Python не все типы данных могут быть ключами, потому что у неизменяемых типов метод __hash__ не переопределён
какой-то винегрет из информации которая пролетела перед глазами на первой космической
Помогите пожалуйста! Что значит "все перестановки одной и той же строки ключа ... "? 13:56
Разве нельзя проблему коллизии свести к приемлемому минимуму путём добавления соли к ключу, который в свою очередь сам есть строка фиксированной длины? Или путём получения индекса пересечением двух или даже более хэшей одного ключа?
чего я в хешировании не понимаю, так это как именно ускоряется доступ к данным без необходимости прохода по всем данным. Когда работал с размерами в 2-4 Гб файлов то моя программа делал все вычисления за 5 часов, а использование хеширования свело работу к
Ролик хорош, но 2 рекламы за одно видео это перебор
Связанные списки в ячейках хэштаблицы? Ну да, ну да, технологии 90х еще живее всех живых.
После первого просмотра осталось очень много открытых вопросов, но закрывать их не вижу смысла, так как я на своем пути пока не сталкивался с необходимостью понимать внутреннее устройство. Может быть изза того что я новичок. Хз
Немогли бы вы уточнить про веб разработчиков?
Спасибо! Пойду тик-токи снимать
Миф про то, что не нужно знать ничего за пределами своих прямых обязанностей порождён теми, кто заинтересован, чтобы программисты пахали, никуда не стремились и умерли на работе. Современный программист -- почти полный аналог фабричного рабочего 19го века.
никто не использует int для длины массива) Зачем упоминать про знак, если всегда есть uint?
Привет , анимация не перекроет то, что всё скомкано. Человек , который первый раз знакомиться с этой темой, просто н проймет. Может стоит останавливаться на некоторых моментах. Не раскидывать код по разным частям экрана. Может вместо c#(это вроде он?) стоит использовать псевдокод?
@fusted4630
11 ай бұрын
Так это и есть псевдокод
5:04 Если у тебя бит уходит под знак, то так и надо писать от -2^31, а не от нуля
Массив Tuple ? 2 массива string ? Двумерный массив? Меиод поиска И всё. Смысл этого? Скорость. Ладно. Я Контент интересный, спасибки Алекс. Как обычно информативно и без лишнего.
В начале по превьюхи подумал,что это очередной выпуск варламова
Не очень понял как работает случай , когда у нас место в массиве заканчивается. Может кто нибудь пояснить? И rehash
Очень интересно, но ко 2/3 видео немного уже сложновато становится)
Не хочу показаться душнилой НО хэш таблица это не абстрактный тип, а структура данных, которая является одной из возможных реализаций ассоциативного массива, который в свою очередь уже является абстрактным типом данных. Если конечно я ничего не путаю)))
Зачем работать над коллизиями таблицы, если можно изменить функцию хэширования так, что бы банально не выходило два индекса, типо делить, брать модуль и домножать пока не получится уникальный индекс?
Я уже третий месяц учусь в SkillFactory и должен сказать что обучение у них такое себе. 5 баллов из 10 (имхо)
Почему нельзя ключ хранить также в массиве?