- 47
- 198 624
Олимпиадное программирование в УлГТУ
Russia
Приєднався 1 лип 2020
Отрицательные циклы: проверка существования, вывод, пометка вершин, до которых нет кратчайшего пути
Это вторая, обновлённая версия видео, в которой рассмотрена проблема с выводом отрицательного цикла при помощи алгоритма Флойда (с 19:32).
Старая версия: ua-cam.com/video/LnOOuNcRLIo/v-deo.html
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html
Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Старая версия: ua-cam.com/video/LnOOuNcRLIo/v-deo.html
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html
Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Переглядів: 488
Відео
Идея алгоритма Флойда-Уоршелла
Переглядів 2,3 тис.Місяць тому
Это вторая, обновлённая версия видео, в которой исправлены опечатки на слайдах. Старая версия: ua-cam.com/video/kaA3_qNfpCA/v-deo.html Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полез...
Отрицательные циклы: почему они усложняют поиск кратчайших путей в графах
Переглядів 1,2 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Алгоритмы Флойда-Уоршелла и Джонсона
Переглядів 3,1 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Кратчайшие пути в ациклических ориентированных графах
Переглядів 1,6 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Алгоритм Форда-Беллмана и SPFA
Переглядів 9 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Отрицательные веса рёбер: почему алгоритм Дейкстры с ними не справляется
Переглядів 1,5 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Алгоритм Дейкстры: два варианта реализации
Переглядів 10 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Идея алгоритма Дейкстры
Переглядів 9 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Задачи на поиск в ширину: вершины и рёбра на кратчайших путях, неочевидные графы
Переглядів 1,9 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Задачи на поиск в ширину: лабиринты, BFS из нескольких стартовых вершин, 0-1-BFS
Переглядів 4,3 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Поиск в ширину (BFS)
Переглядів 23 тис.Рік тому
Плейлист по кратчайшим путям в графах: ua-cam.com/play/PLGhUJWLZ8uQ4EWdQwVyUFnz82kbeGRP97.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Очередь с приоритетами: эффективное построение двоичной кучи, сортировка кучей
Переглядів 1,7 тис.Рік тому
Плейлист по последовательным структурам данных: ua-cam.com/play/PLGhUJWLZ8uQ4PVZ5sIyiJy8EQduBKEqRN.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Очередь с приоритетами: реализация на двоичной куче
Переглядів 3,3 тис.Рік тому
Плейлист по последовательным структурам данных: ua-cam.com/play/PLGhUJWLZ8uQ4PVZ5sIyiJy8EQduBKEqRN.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Очередь и дек: варианты реализации, очередь с минимумом
Переглядів 2,1 тис.Рік тому
Плейлист по последовательным структурам данных: ua-cam.com/play/PLGhUJWLZ8uQ4PVZ5sIyiJy8EQduBKEqRN.html Это видео записывалось как часть онлайн-курса, которому, увы, уже не суждено увидеть свет. Тем не менее, мы опубликуем его материалы, так как они могут оказаться полезными при изучении соответствующих тем.
Стек: ближайший больший элемент, стек с минимумом, стек в рекурсии
Переглядів 555Рік тому
Стек: ближайший больший элемент, стек с минимумом, стек в рекурсии
Стек: реализация на массиве и списке, скобочные последовательности, постфиксная нотация
Переглядів 1,3 тис.Рік тому
Стек: реализация на массиве и списке, скобочные последовательности, постфиксная нотация
Расширяющийся массив: неправильные и правильные подходы к реализации
Переглядів 558Рік тому
Расширяющийся массив: неправильные и правильные подходы к реализации
Поиск компонент сильной связности в графе. Алгоритм Косараджу
Переглядів 7 тис.Рік тому
Поиск компонент сильной связности в графе. Алгоритм Косараджу
Поиск циклов в неориентированном графе. Двудольность
Переглядів 4 тис.Рік тому
Поиск циклов в неориентированном графе. Двудольность
Поиск циклов в ориентированном графе. Восстановление цикла
Переглядів 7 тис.Рік тому
Поиск циклов в ориентированном графе. Восстановление цикла
Поиск компонент связности в неявном графе. DFS на графе-сетке
Переглядів 2,6 тис.Рік тому
Поиск компонент связности в неявном графе. DFS на графе-сетке
Поиск компонент связности в графе. Раскраска компонент связности
Переглядів 6 тис.Рік тому
Поиск компонент связности в графе. Раскраска компонент связности
Способы представления графов: список рёбер, матрица смежности, списки смежности
Переглядів 9 тис.Рік тому
Способы представления графов: список рёбер, матрица смежности, списки смежности
спасибо вам огромное!!
Спасибо!
круто!
Спасибо, очено помогли,единственный нормально объяснение на ютубе
А стоит ли на олимпиаде этим заниматься? Я про тестинг автоматический.. Ведь время жмет.
На последних часах пятичасовых соревнований нередко есть выбор между поиском ошибки в решении одной задачи или написанием с нуля решения другой задачи. Стресс-тестирование в такой ситуации может очень сильно помочь. Кроме того, есть форматы соревнований, когда решения отправляются «втёмную» (то есть итоговый вердикт становится известен только после окончания). В этом случае стресс-тестирование просто незаменимо.
Идеальный канал,спасибо
3:10 - почему сдвинули R на 40, а не на 43?
Спасибо за наблюдательность, здесь на слайдах ошибка. Правильная последовательность шагов при поиске элемента 33: L = 0, R = 19, M = 9; A[M] > 33, смещаем R на M - 1 L = 0, R = 8, M = 4; A[M] < 33, смещаем L на M + 1 L = 5, R = 8, M = 6; A[M] > 33, смещаем R на M - 1 L = 5, R = 5, M = 5; A[M] < 33, смещаем L на M + 1 L = 6, R = 5; индексы зашли друг за друга, следовательно, элемента 33 в массиве нет.
@@op_ulstu понял, большое спасибо за уточнение! И за курс в целом - он отличный!
Легенда. Спасибо. Добавьте еще дополнительные задачи про мосты и точки сочленения, все люди, грокающие графы, будут благодарны
Большое вам спасибо за наглядные примеры и код.
Найс
Нааааайс
Топ
Спасибо за такое понятное и подробное объяснение!
Спасибо вам болшое
Огонь 🔥
Коммент в поддержку канала, большое дело делает автор.
Спасибо огромное за видео! Пожалуйста, объясните для чайника, когда мы пишем l = m+1, r = m - 1; а когда просто приравниваем m? Первый случай только для поиска конкретного элемента?
Мы начали с такого примера и такого решения потому, что для начинающих зрителей они являются более понятными и естественными. Далее мы придём к более общему решению. Задача, которая решается при помощи бинпоиска, чаще состоит не в том, чтобы найти какое-то заданное значение, а в том, чтобы найти первый или последний элемент, обладающий определённым свойством. Для таких задач уже проще запомнить общее решение, когда цикл while идёт до 2 элементов, а l и r всегда смещаются на m (без +1/-1). Подробнее об этом рассказано в следующем видео: ua-cam.com/video/_u2yypDA6R0/v-deo.html Когда нужен поиск заданного значения в массиве, его можно выполнять так, как показано здесь, но можно воспользоваться и вышеупомянутой общей схемой, например, искать первый элемент, который больше или равен заданному значению (цикл while в этом случае идёт до 2 элементов, l и r смещаются на m).
@@op_ulstu благодарю! Вы один из топовых авторов по объяснению алгоритмов.
Спасибо большое! Отличный урок!
Спасибо за все видео, очень доступно объясняете, пожалуйста, не останавливайтесь, если есть такая возможность:)
Матреца смежнасти лутшая
Я вообще не понимал как устроен этот алгоритм и другие, пока не начал смотреть ваши видосы. Все просто разжеванно, спасибо большое !
Здравствуйте ! Будут ли лекции по парсочам , строкам ? Планируется ли регулярное выкладывание видео ? . Хочу поблагодарить вас за ваш большой труд, вы помогаете довольно многим людям, студентам. Хороший интерактивный формат (коротко по делу, с упоминанием нюансов, приложения). Также хотел спросить есть ли конспекты по этим видео ?
Лучший канал по алгоритмам и структурам данным на русскоязычном пространстве.
😨😓💩🤡👌🏿🤛🏿💁🏿
thank you so much, do you have anything related to number theory or math for cp in general ?
Прям вовремя видос выпустили, я как раз сейчас этот алгоритм изучаю. Было бы классно увидеть ролики о динамическом программировании на вашем канале, очень хорошо объясняете, только вот просмотров мало(
Это слишком хорошо
Здравствуйте я написал этот же код но результат немного иной выходит вот результат:45 40 65 75 X 65 40 0 30 X 50 60 35 100 X А вот код: //Dijkstra algorithm with an array #include <bits/stdc++.h> using namespace std; const int INF=1e9; vector<int> Dijkstra(int start,vector<vector<pair<int,int>>> graph) { vector<int> dist(graph.size(),INF); vector<bool> visited(graph.size()); dist[start]=0; for(int i=0;i<graph.size();i++) { int nearest=-1; for(int v=0;v<graph.size();v++) if(!visited[v] && (nearest==-1 || dist[nearest]>dist[v])) nearest=v; visited[nearest]=true; for(auto &[to,weight] : graph[nearest]) if(dist[to]>dist[nearest]+weight) dist[to]=dist[nearest]+weight; } return dist; } int main() { int VertexCount,EdgeCount; cin>>VertexCount>>EdgeCount; vector<vector<pair<int,int>>> graph(VertexCount); for(int i=0;i<EdgeCount;i++) { int a,b,weight; cin>>a>>b>>weight; graph[a].push_back({b,weight}); graph[b].push_back({a,weight}); } int start; cin>>start; vector<int> dist=Dijkstra(start,graph); for(int i=0;i<dist.size();i++) { if(dist[i]!=INF) cout<<dist[i]<<" "; else cout<<"X "; } }
how can i start CP
Мего харош Просто лучший
Где я могу найти код из урока?
acm.khpnets.info/wiki/Алгоритм_Флойда
Здравствуйте вы онлайн уроки проводите для олимпиады?
Здравствуйте. Увы, нет.
Ты топ
у вас звезда амперсанд в аргументе сплита - это бан на полчаса
Что именно вас смутило? a и b в split() - это указатели на вершины результирующих деревьев, они имеют тип Node *. Это выходные параметры, мы хотим изменять их внутри split, поэтому передаём их по ссылке: Node *&. Если хотите, можете возвращать из split пару указателей: pair<Node *, Node *> split(Node *n, int key).
@@op_ulstu это некоторый мем с лабораторных работ по C в моём универе, если подойти с таким на сдачу лабы, то вас не будут принимать следующие полчаса, так как в си такая конструкция не имеет смысла. Если говорить о том что меня смутило в этом видеоролике, то мне и словами не описать ту боль которую мне пришлось пережить чтобы понять как дерево на самом деле работает, то как вы объяснили на визуализации конечно складно и понятно, но код так не работает, (я говорю о ф-ии split). Возможно этого поверхностного "понимания" достаточно чтобы использовать такой подход как инструмент в олимпиадных задачах и далеко не всем хочется знать как обстоят дела на самом деле
@@klausvreinherz7145 Код в видео написан на C++, а не на C. Здесь & - это не операция взятия адреса (в объявлении типа эта операция всё равно не имела бы смысла), а признак ссылки. В показанном коде *& - не две взаимообратные операции, а ссылка на указатель.
@@op_ulstuпоэтому я и упомянул что лабораторные мы писали на си
@@op_ulstu так как этот мем был несколько неуместен, но всё же достойным упоминания в обществе моих одногрупников, с коими я и пытался смотреть ваше видео
огромное спасибо за объяснение и за проделанную работу!
очень хороший мини-курс, очень! спасибо. и анимация приятная, когда от одного к другому переходит. интересно, как это сделано всё разжёвано в нужной степени, вкусно)
великолепно )
Как же шикарно автор объясняет. Я прям кайфую от объяснений автора.
Спасибо за видео. Возник вопрос, почему есть утверждение, что при использовании матрицы смежности асимптотика алгоритма равняется O(V**2), - я понимаю вашу логику, что проверок условий действительно будет больше, но ведь самих запусков dfs - столько же, ведь у нас в условии IF фигуририрует visited, который мы обновляем на предыдущуих вызовах рекурсии
Проверка, существует ли ребро между вершинами a и b, - не бесплатная операция. Представьте себе запуск DFS на пустом графе из 1000 вершин. Если граф был сохранён в виде списков смежности, то после запуска DFS от каждой вершины мы сразу делаем вывод, что у неё нет соседей, так как соответствующий список смежности пуст; в цикл for мы даже не входим. Итого O(1) на обработку каждой вершины и общая сложность O(V) для запусков от всех вершин. Если граф был сохранён в виде матрицы смежности, после запуска от любой вершины алгоритму придётся просмотреть 1000 ячеек соответствующей строки матрицы, чтобы понять, что там всюду нули и соседних вершин нет. Итого O(V) на обработку каждой вершины и общая сложность O(V^2).
А 8адачу с сасудами можно решить с помощи дп
Задачу
Большое спасибо за урок! Очень просто и понятно объяснили как работает декартово дерево, как балансируется и как его писать
Лучшее видео!
Огромное спасибо за видео
Как же автор все круто объяснил. Я физически ощутил как поумнел и вспомнил множество задач где можно было бы использовать бинарный поиск предварительно отсортировав коллекцию любой сортировкой с той же логарифмической сложностью.
лучший канал, спасибо огромное❤
Большое спасибо за видео! Очень понятно и доступно!
В общем, это буквально ИДЕАЛЬНЫЙ канал, чтоб заботать алгоритмы к интервью. Спасибо огромное!
Попалась задача данного типа в Я.Контесте, отличное видео, спасибо!)
А случаем не в нлогн
Кружок такой есть
Спасибо за видео! Можно ли с помощью Дейкстры найти все кратчайшие пути? То есть у нас могут быть более чем один "path"? Или надо использовать другой алгоритм?
Ответ на ваш вопрос - чуть далее по плейлисту, в видеозаписях про алгоритм Флойда-Уоршелла.
@@op_ulstu Я неправильно наверно выразилась - алгоритм Floyd ищет все кратчайшие пути попарно, но у меня всё-таки задачи более похоже на алгоритмДейкстры. То есть мне нужно найти все возможные пути от Start до Finish, где Start и Finish фиксированной… В отличие от видео нужно распечатать все пути от Start до Finish если их несколько. Надо структуру from дополнить? Или другой алгоритм искать?
@@vidruska Вы можете попробовать сделать вектор from двумерным, чтобы в ячейке с индексом to сохранять не одного, а сразу всех возможных предков вершины to на каком-то кратчайшем пути (добавится условие else if (dist[to] == dist[nearest] + weight) from[to].push_back(nearest); ). Затем вам придётся написать рекурсивную функцию, перебирающую все возможные пути от finish до start по этому массиву. Правда, имейте в виду, что количество кратчайших путей между start и finish в графе может быть экспоненциальным, и в общем случае вывести их все не получится. Рассмотрите, например, граф: 7 12 1 2 100 1 2 100 2 3 100 2 3 100 3 4 100 3 4 100 4 5 100 4 5 100 5 6 100 5 6 100 6 7 100 6 7 100 Даже в этом маленьком графе между вершинами 1 и 7 есть 64 различных кратчайших пути.