КАК РАБОТАЮТ ГРАФЫ | СТРУКТУРЫ ДАННЫХ
Vložit
- čas přidán 9. 05. 2024
- Стань “Белым” хакером в SkillFactory: go.skillfactory.ru/LfyBTQ
Скидка 50% по промокоду ALEKOS до 15.05.2023 г.
Оригинальные тюменские CGPods тут: cli.co/ALEKOS. Сочный звук. Гарнитура с завода Apple. В 4 раза дешевле «яблок» - 5 000 р. По коду ALEKOS - скидка 200 р.
Подписывайся в соц. сетях:
Телеграм - t.me/Alek_OS
ВК - alekos1
❤️ Поддержка канала:
Бусти - boosty.to/alekos
Юмани - yoomoney.ru/to/410011179144828
✔️ Полезные ссылки:
Основы программирования - • КАК РАБОТАЕТ ПАМЯТЬ КО...
Полезно знать - • ЯЗЫКИ ПРОГРАММИРОВАНИЯ...
Алгоритмы и структуры данных - • УСКОРЬ СВОЙ КОД В МИЛЛ...
Мысли Алека - • КАК ИЗУЧАТЬ ПРОГРАММИР...
00:00 Введение
01:34 Характеристики графа
02:44 Интеграция
04:11 Граф как двумерный массив
07:09 Граф как набор узлов
08:05 Создание графа
09:04 Обход в глубину
12:16 Поиск пути
12:51 Поиск всех путей
13:18 Интеграция
14:36 Обход в ширину
16:07 Поиск кратчайшего пути
17:20 Алгоритм Дейкстры
Pb3XmBtztBuvyFvz2c9VpgyrNKgVozDjgpdAZzY
Код и структуры данных из видео - это просто шаблон.
В реальных языках порядок поиска и обхода может отличаться.
Более подробно об этом в телеграм канале - t.me/Alek_OS
Графы не работают - это делают крепостные. Единственным широко известным исключением в истории, и то с большими оговорками, является Л.Н. Толстой.
Черт, ты меня опередил! Я хотел это сказать!!!
@@user-du8rw6tb6r ничего, бывает) Комментарий, конечно, напрашивался.
Кому как не крепостным фашистким федерастам этого не знать
То чувство, когда гуманитарий решил зайти на видос по программированию
@@romansmirnov5813 Точно))
как врач могу сказать, что использовать слово "ребра" и в картинку вставлять бедреные кости - несколько сбивает с толку. С другой стороны, натуральные ребра не отражали бы идею прямой "грани", они же изогнутые. А те, которые не сильно изогнутые (например, ребра некоторых животных), не будут узнаваемыми "ребрами". Хотя и бедра - не очень узнаваемые "ребра")
спасибо огромное за твои видео! я не видел больше таких понятных, интересных, и приятных обьяснений таких тем, спасибо!
Так ждала этот видос. Большое спасибо. Очень люблю вашу лаконичную подачу материала.
Это супер полезное видео. Информация и визуализация и звук, тут все прекрасно
Ооооооо. Ништяк. Заморочки на ноч грядущую подъехали. Спасибо
Спасибо большое за труд, очень классные видео!
Вовремя зашел! Топ контент, благодарю!
Очень крутой видос, спасибо)
ОоО как раз начал изучать алгоритмы и структуры данных спасибо
Все круто, но алгоритм Дейкстры для поиска именно пути обычно так не рассказывают в вузах. Принято все таки при обновлении значения хранить и вершину из которой ведет минимальный маршрут. По памяти будет также линейно, но и по времени сделается линейным (от количества вершин в минимальном пути). В вашем же случае, если граф является полносвязным (что часто так и бывает), то вам придется при обратном проходе постоянно перебирать все вершины, чтобы все же найти откуда мы пришли.
сказал ребро, а на картинке бедренная кость! и как теперь доверять?😄
Круто
Очень круто
Большое спасибо за видео
Красава. Как всегда доступно только сжато.
Впервые не пропускаю рекламу, в дань уважения к автору за такие максимально понятные и разжëваные видеоролики👍
Я по прежнему пропускаю
ФУУУ, ТЕРПИЛА
У меня авто пропуск реклыммых интерграций)
Не очень умно. Как поможет автору просмотр рекламы, он что от этого больше денег получит?
Ютуб не отдаёт анализ просмотра ролика пользователями из России.
Так что, не имеет никакого значения пропускают или смотрят рекламу.
Рекламодатель ориентируется на общее число просмотров видео у каждого автора.
Кроме того, реклама остаётся навечно - она вшита в ролик и её будут смотреть спустя годы и века....
Спасибо за видео, теперь хоть стало понятно как работает навигатор под капотом )
Кто-то: "Аристократов на фонарь!"
Тем временем графы:
Делал задачу на графы - буквально нашёл решение в твоём новом ролике! Спасибо!
По поводу практического применения, самым наглядным примером может быть протокол OSPF(поиск кратчайшего пути маршрутизации в сети)
О, спасибо, кто-то подтвердил мою теорию, что графы - это чистый OSPF, значит, не совсем я гуманитарий для математики
Когда думал что оптимизируешь а на самом деле оказалось...
Напишу просто чтобы ютубчик продвигал в реки, а так видосик как обычно топовый, а когда видос по третьей части ассемблера?
Однозначно вижу популяризацию знаний ставлю лайк ❤
Братан, просто респект 🫡
Когда мы ищем путь или кратчайший путь от точки A до точки B нам не нужны несвязанные графы - они не могут привести нас из точки A в точку B.
С каждым подобным видео, понимаю, как же уныло и максимально сложно объясняли это мне в ВУЗе...
Спасибо, что даешь нам возможность получать такую иныормацию с такой крутой подачей, еще и бесплатно!
Точно!
@@MegoRosst и вдобавок упущено немало подробностей
Не соглашусь с этом полностью, т.к. я помню на пример как отлично мне объясняли всю математику (включая и графы), но для большинства сокурсников это было уныло... возможно у вас мозг только сейчас созрел для этого. Так что тут всё относительно и не всегда так как вам казалось тогда.
@@Vic7bd либо же чел в вузе в первый раз познакомился с этими структурами, и ему тогда было сложно/тяжело освоить весь материал, а теперь, когда в голове уложилось, ему легко смотреть такие видосы, особо не задумываясь
Либо сверху позеры и зазнайки, которых мы (одногруппники с несозревшим мозгом) не особо воспринимали за людей социализированных и адекватных
Как всегда афигенное подробное видео, где всё разложено по полочкам 👍👍👍
19:10 а можно просто попутно для каждой вершины сохранять номер предшествующей ей вершины. И тогда путь автоматически будет готов под конец (правда в обратном порядке, но реверснуть его не сложно)
Тоже вариант
Мне кажется, что путь, которому мы добрались до назначения не обязательно самый короткий: например, если бы путь от C до D был бы равен 1, то обратно машина поехала бы по нему.
@@_mrix_534так... В смысле?
Фактически, когда мы вычисляем кратчайшие расстояния до точек, двигаемся мы по всему графу, так как метод calculateTimeToEachNode крутит цикл до тех пор, пока unprocessedNodes не пуст, а unprocessedNodes заполняется всеми точками графа. Когда метод заканчивается, остановиться мы могли на любой точке графа(в видео это обговаривается, когда автор из точки B двигается не в D, а в E; а в точке E мог быть тупик) , но уже зная все кратчайшие пути от точки start до остальных, поэтому обратный путь приходится вычислять таким способом. В своих примерах я постоянно говорю, что то-то могло быть равно тому-то, потому что в видео выбран довольно неудачный пример графа, из-за чего не видна вся суть алгоритма Дейкстры. @@Secvad
Да и в коде в конце метода calcutaleTimeToEachNode не видно, чтобы мы как-то сохраняли даже последнюю точку, поэтому мы в метод getPath передаём и стартовую, и последнюю точки.@@Secvad
Спасибо бро
Золотой, золотой ты человек
Как же у меня сгорело от двух частей видео (во мне проснулся мастер по спортивному программированию и я начал ломать код в видео)
1 Нерекурсивный обход в глубину - вы не сохраняете состояние обхода дочерних узлов - получается что для каждой вершины обход совершается в квадратическое время от количества потомков вместо линейного - это недопустимое упрощение (представте граф-звезда тогда будет квадрат от количества вершин время обхода). Нерекурсивная реализация рекурсии - это очень сложная задача когда я в первый раз ее писал вышло в 2 раза медленее обычной рекурсии по быстродействию В олимпиадной жизни да в крайних случаях приходится писать такое если время на задачу осталось и больше решать нечего а в реальной жизни можно в опции компилятора увеличить размер стека.
2 Двунаправленный поиск в ширину - что??? meet-in-the-middle да есть такой вид перебора очень редкий вид задач в реальной жизни слышал про взломы защит таким способом Вместо 2^n получаем 2^(n/2) * что-нибудь типа n^2 (проверки совместимости половинок) тут реально есть смысл. А в графе что? В лучшем случае в 2 раза выйгрыш неимоверными усилиями не факт что так будет. Граф цепочка - и тогда путь между концами диаметра графа будет всегда n вершин - выйгрыша не будет зато помучаетесь немного с реализацией и будет расходоваться доп память для быстрой проверки принадлежности дереву поиска второй половинки. Неудачный просто пример вышел.
Вот наконец-то нашёл человека, который реально шарит
Крутейкий ролик! Буду думать где такое применить... Может "Навител" переписать 😁
А то тащит вечно в непонятные графы
У автора талант преподавания !
Спасибо
чувство, будто бы кто-то написал приятные конспекты и дает почитать
круто !!! просто нет слов !!! В универе .....
Наверное, первый ролик на канале, который разочаровал. При этом я подписан и считаю автора топовым по качеству изложения материала. И не понимаю восторгов в комментариях именно к этому видео, т. к. похоже, большинство дальше заголовка не идет, или смотрит на перемотке и строчит коменты по привычке, "за былые заслуги" (а остальные ролики, действительно, выше всяких похвал). Если я не прав, и дело во мне, буду благодарем, если мне объяснят хотя бы следующую идею из видео. Я понимаю, что можно взять учебник и вспомнить/разобраться во все самостоятельно, но я пытался честно вникнуть во все, что хотел донести автор, и КМК, один из немногих, . Первый раз "завис" на 4:30 идее "оставить в виде двумерного массива".
Что значит "оставить", если смысл хранимых данных полностью меняется?
Что означает "каждая ячейка будет являться отдельным узлом"? Какие данные будут храниться в "каждой ячейке"? Судя по картинке, номер узла?
Зачем тут вообще ДВУМЕРНЫЙ массив?
И что означает "отсутствие узла"?
В итоге на 4:55 список "минусов" (каждый пункт, не буду повторять) и картинка выглядят, мягко говоря, станными. Лучше бы проиллюстрировали, какую топологию описывает данная "структура"...
Еще больше вопросов в комментарии ув. @QwDragon. Буду признателен, если кто-то из разобравшихся ответит на них.
Вообще, зная качество остальных роликов, эти неясности кажутся результатом неаккуратного монтажа. Если так - с нетерпением буду ждать "расширенную" версию.
Да, жаль конечно, что автор не разъясняет до конца, что происходит в видео. Сам на красно-чёрных деревьях завис, потому что некоторые методы надо было поменять или тонкости реализации не упомянуты. Однако я считаю, что это можно простить автору, потому что, по-моему, главная цель видео - описать логику реализации различных структур данных в коде, работу с ними, их плюсы и минусы. А то, что мы не понимаем некоторых моментов, - это уже наша проблема. Более того, если достаточно долго поработать со структурой данных, то начинаешь понимать смысл её реализаций и сам можешь разбираться в этом.
@@_mrix_534да я вообще готов автору простить все за талант просто объяснять сложные вещи :) Тут скорее не претензия, а фидбек от "аудитории". "Ничего не понял, но очень интересно". Хотелось бы каких-нибудь пояснений, хотя, конечно, все можно "допилить" самостоятельно (гугл, лекции, учебники...)
Будучи студентом, и участвуя в олимпиадах по программированию от вуза в разных городах, часто были задачки - найти кратчайший путь и тп. В лучшем случае на Паскале
имба тема, топовые видео, ахуенный чел, все до тапок хорошо
Ждем разбор алгоритмов поиска А-стар и Суурбалле! )
10 из 10 👍
Насколько я знаю, cg pods так и не показали своё производство. А это значит, что с большой вероятностью, они таскают наушники из Китая и переклеивают шильдики. Об этом есть масса инфы в интернете, на пикабу в частности...
Отлично как всегда! Немного быстро, но это не проблема ведь можно пересматривать и замедлять :-) Когда же мы изучим как обходить и перепрыгивать рекламу на автомате )))) это самый востребованный сейчас бот в мире, чтоб распознавал и перескакивал или если перескочить нельзя (на ТВ), то глушил сразу звук и замещал отсчётом времени или своей картинкой "Отдохните n-минут, посмотрите на своего котика" )))
смотрю этот канал, ничего не понимая, чисто офигеваю со сложности программирования
Спасибо за классный контент!
Но есть несколько вопросов:
04:33 Вообще не понял, что за структура.
05:04 Зачем тут нужен -1?
06:47 Значения узлов? Это вершины? Почему это минус? А веса могут быть любыми - они значения массива, а не индексы.
07:09 Ну с деревьями такая структура ещё используется (dom, xml), но вот с обычными графами - никогда не встречал. И её жирный минус - большое потребление памяти.
11:25 А как мы можем достать из стека посещённый узел, если проверяем посещённость перед тем, как его туда положить?
12:16 Обёртку теперь можно объединить с обходом.
13:17 Стоило отметить, что из passed теперь ещё и удаляются вершины. Ну и это будет жутко медленно.
20:48 Цикл по хэштаблице асимптотику портит же? Очередь приоритетов была бы лучше.
классно тебе ответили чувак 😂
Пятый раз уже пересматриваю чтобы сделать свою реализацию
Можешь показать как это делается в Lua?
cgpods, блин. понимаю, что реклама необходима, но надо же достоинство иметь. так и до онлайн казино скатиться можно.
Okey❤
Видос класс. Единственное в алгоритме Дейкстры при обратном обходе не совсем понятно, что происходит если несколько ребер соответствуют условию равенства!
Хаха, ты даже не представляешь как ты мне помог. Дело в том, что я делаю стратегию и игровая карта как раз таки представляет граф :) От сюда я почерпнул много инфы, которую я сейчас принимаю на практике.
Не influence случайно?)
@@zmeyotkusitel Нет, но я ей вдохновлялся. Хорошая игра в своем жанре:)
Полезное видео, лайк!
Для интересующихся графами рекомендую свободно распространяемую электронную книгу «Графомания» (автор Деревенец О.В.). Даны решения задач с исходными текстами и контрольными примерами. Рассмотрены следующие темы:
Задачи на множествах:
• разбиение множества на подмножества;
• задача о наименьшем разбиении (ЗНР);
• задача о наименьшем покрытии (ЗНП).
Группа задач на достижимость:
• взаимная достижимость вершин;
• кратчайшие пути между вершинами;
• выделение сильно связанных компонент.
Группа задач на размещение:
• независимые вершины и клики;
• доминирующие множества;
• раскраски;
• центры;
• p-центры;
• p-медианы.
Остовные деревья
Группа задач о потоках:
• максимальный поток в сети;
• поток, ограниченный сверху и снизу;
• минимальная стоимость потока.
Паросочетания на взвешенных графах:
• паросочетание в двудольном графе;
• паросочетание в произвольном графе.
Цикл Эйлера и задача почтальона на взвешенных графах:
• на неориентированном графе;
• на орграфе.
Задачи Гамильтона и коммивояжёра на взвешенных графах:
• разомкнутая задача Гамильтона;
• замкнутая задача Гамильтона (контур);
• комбинирование методов для задач Гамильтона;
• замкнутая и разомкнутая задачи коммивояжёра.
Хотелось бы ещё узнать про алгоритм А*
На мой взгляд тоненькая книжка под названием "Грокаем Алгоритмы" лучше объясняет алгоритмы чем такой видос
Я уже давно смотрю канал Артём граф, но никогда не знал ничего про графы. Спасибо
А канал то хороший, Артем крайне воспитанный и начитанный молодой человек, не то что эти ваши блогеры современные
В ОГЭ по информатике есть задача по алгоритму Дейкстры, получается.
Забросил программирование и математику уже как пол года, но всё же интересно
Почему?
@@Piixel2517 понял, что не моё. Родители были программистами, все остальные в семье - тоже. Я думал, что стать программистом - моя судьба, продолжал что-то изучать, делать... Никогда у меня это занятие не вызывало подлинного интереса. Это начинало понемножку "убивать" меня. Я выгорел, мне было очень плохо, я не понимал, что со мной происходит. Решил всё-таки сменить курс, как только понял, что не замечал истинную страсть. 8 лет своей жизни я просто просрал, ведь думал, что раз все избрали именно этот путь, то и мне будет там хорошо...
@@Aristotle314 а если не секрет, то в какой степь двигаешься?
@@Piixel2517 биологию я для себя открыл
@@Aristotle314 звучит круто, успехов тебе)
Вопрос по алгоритму Дейкстры. Для восстановления пути мы можем запоминать родителя той или иной вершины, ну и менять родителя при необходимости. Так разве не проще, чем восстанавливать путь по значениям расстояний?
проще, я так и делаю
Тема родителя номер 1 и родителя номер 2 не раскрыта в графах...
Подробнее с алгоритмами поиска кратчайшего пути в направленных графах поверхностно можно ознакомится в книге Т.Х. Кармена Алгоритмы:Вводный курс.
кости не ребряные а бедряные)
Даёшь разбор алгоритма Тарьяна и Кхана
жёстко
Спасибо за видео!
Вот только узлы это не классы, а объекты (классов). 7:18
Не бывает самой минимальной или самой максимальной величины. Бывает минимальная или самая малая и максимальная или самая большая. А самая мин. или самая макс - это как масло масляное.
читал это и слушал много раз за последние 30 лет, но так и не понял чем это отличается от двумерных массивов или структур в Си/Паскале, без всякого ООП. Я всегда пользовался каким-то движком БД и SQL. Там то же хеширование для двумерных массивов. Скорость огромная. Память? Ну оно всегда так - либо быстро либо мало памяти. Задачи на память конечно бывают, в тех же МК, где порой оперативки 1-16 Кб, но там и SQL нет.
Круто рассказываешь! но этот звук карандаша... просто жесть..
Если графы работают, значит произошла революция
👏👍
4:41 ааа, скрип карандаша о бумагу(вернее, наверное об доску)
7:17 ааа, опять
4:25
Ужснх! Вы б ещё пенопластом по стеклу посребли >.
Сложно, но познавательно.
Картинки красивые и стильные. Но речь очень сложно воспринимать. Например такая фраза: "Минус один здесь снова обозначает отсутсвие узла и получается, что если у одного узла есть три ребра, которые ведут на три его дочерних элемента, то в масиве под каждые из этих ребер будет создано три записи". Как одно из другого следует? Почему эти две фразы слиты в одну посредством "и получается"? 🥱
Как раз в унике проходим графы. На парах это очень уныло, в ролике достаточно показательно и информативно. Спасибо.
Продвигаем твой контент комментарием.
Дискретная математика 2 курс)
Продлевать слово это как заполнять паузу пока думаешь что сказать, можно просто сказать в обычном темпе и сделать паузу чтобы зритель мог обдумать сказанное
Тиканье фоном крайне раздражает, сделайте тише в будущем.
В методе getPath после цикла забыл return false;
Учёный под названием Дейкстра)
АлекОС - провидец. Только мы начали тему графов в учебке - и тут как тут с видосом)))
А можно как-то просто объяснить где дешевле использовать рекурсию, а где цикл? В общем случае
Ничего не понял с двумерных массивов(
Даров
Уважаемый, у вас там не рёбра, а бёдра))
Если убрать всю рекламу и воду, останется 5 минут полезной информации. Но автор ценит только своё время
Так, сразу стоп, я не понял... Зачем представлять переходы в виде данных?? Переходы надо делать, а не представлять. Тогда зачем данные, когда всё-ровно всё сведётся к переходам в коде. Jmp, jne, call, ret, int... Сразу пишем код, ну и флаги состояний.
Как работают графы?
Странный вопрос. Графы дворяне, они не работают! )))
норм
Открывай школу )) 😅
А если граф неориентированный, кто будет его родителями?(parents)
За ролик огромное спасибо!
А вот реклама наушников меня насмешила)))
Реально штоль кто-то покупает наушники за 5000? Или тем более за 12000+?)))
У меня весь телефон стока стоит, а наушники мы отхватили за 150 рублей на китайской распродаже, и шикарные оказались)))
Два года проработали, пока аккумуляторы не сдохли!
Лайк не глядя, комментарий для статистики любимого канала
Семестр теории графов в университете или видео на 22 минуты? Сложный выбор.
говорит про ребра, а показывает бедренную кость.
а на каком языке программирование лучше всего использовать графы?
Графы я так и не осилил. Теория просто проваливается без понимания, а практических задач решать так и не приходилось.
Автор бедренную кость (это та, которая ходить мало-мало) называет ребрами. Вопрос - как он называет другую кость, голову?
Я гуманитарий. Почему я это смотрю...?