Поиск в ширину (BFS)
16:39
Двусвязный список
9:56
Массив
11:33
Жыл бұрын
Поиск в глубину (DFS)
11:05
Пікірлер
@vrakitine
@vrakitine 3 күн бұрын
В институте я много слышал про конечные автоматы (КА), но это всё было теорией - как облака в небе: воды в них много, а напиться нельзя. Корпел три месяца после института, пока не реализовал свой КА в коде в 1981 году. Сейчас существует методология программирования на этой основе - v-agent oriented programming (VAOP) - и множество примеров её реализации. Лучше начать знакомство с VAOP с этой статьи на Medium: "Bagels and Muffins of Programming or How Easy It Is to Convert a Bagel into a Black Hole" или на Хабре: "Бублики и Коржики Программирования".
@makarov...
@makarov... 5 күн бұрын
Откуда взялась вершина 4 если визуально её нигде нет? Чуть повозившись с gpt, он мне разжевал, что в данном случае, вначале задается количество вершин - 8, далее идут ребра. Заполняется массив вершин 1..8 получается [1,2,3,4,5,6,7,8]. Далее мы как бы между вершин натягиваем ребра.Так как вершина 4 была сгенерирована, но у неё было ребер, она остается изолированной вершиной. Таким образом у нас два компонента связности: [1,2,3,5,6,7,8] и [4].
@op_ulstu
@op_ulstu 5 күн бұрын
Граф, который используется в примерах, был показан в предыдущем видео плейлиста: kzfaq.info/get/bejne/aZOIf7WZl7OZiX0.html Вершина 4 (в 0-индексации - 3) действительно не содержит смежных рёбер и образует отдельную компоненту связности в этом графе.
@georgevonfloydmann1797
@georgevonfloydmann1797 5 күн бұрын
О да, легендарное ПиВо, ака КуРево, ака ДеРамида. Было бы интересно услышать от Вас про Авл и красночерные деревья
@makarov...
@makarov... 6 күн бұрын
V (vertex) - вершина E (edge) - ребро
@indominusmonster6433
@indominusmonster6433 9 күн бұрын
пытаться переписать этот код на python - трэш
@op_ulstu
@op_ulstu 9 күн бұрын
Да ладно вам. ideone.com/SlQ8Cy
@indominusmonster6433
@indominusmonster6433 9 күн бұрын
@@op_ulstu о, спасибо
@indominusmonster6433
@indominusmonster6433 7 күн бұрын
​@@op_ulstu спасибо за код. Пришлось, конечно, доделывать чтобы найти и вернуть цикл (индексация в списках без -1 и пустые ретерны), но в целом прога рабочая
@jetairliner5706
@jetairliner5706 12 күн бұрын
От души всё растолковано, спасибо
@nekoie6150
@nekoie6150 17 күн бұрын
спасибо вам огромное!!
@RedFeuer.
@RedFeuer. 18 күн бұрын
Спасибо!
@user-iw7zo9vm8o
@user-iw7zo9vm8o 18 күн бұрын
круто!
@adventureswithstan1026
@adventureswithstan1026 22 күн бұрын
Спасибо, очено помогли,единственный нормально объяснение на ютубе
@tusman4ik
@tusman4ik 23 күн бұрын
А стоит ли на олимпиаде этим заниматься? Я про тестинг автоматический.. Ведь время жмет.
@op_ulstu
@op_ulstu 23 күн бұрын
На последних часах пятичасовых соревнований нередко есть выбор между поиском ошибки в решении одной задачи или написанием с нуля решения другой задачи. Стресс-тестирование в такой ситуации может очень сильно помочь. Кроме того, есть форматы соревнований, когда решения отправляются «втёмную» (то есть итоговый вердикт становится известен только после окончания). В этом случае стресс-тестирование просто незаменимо.
@adventureswithstan1026
@adventureswithstan1026 24 күн бұрын
Идеальный канал,спасибо
@antonnesterov8711
@antonnesterov8711 26 күн бұрын
3:10 - почему сдвинули R на 40, а не на 43?
@op_ulstu
@op_ulstu 26 күн бұрын
Спасибо за наблюдательность, здесь на слайдах ошибка. Правильная последовательность шагов при поиске элемента 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 в массиве нет.
@antonnesterov8711
@antonnesterov8711 26 күн бұрын
@@op_ulstu понял, большое спасибо за уточнение! И за курс в целом - он отличный!
@quirenceh4ndeir156
@quirenceh4ndeir156 Ай бұрын
Легенда. Спасибо. Добавьте еще дополнительные задачи про мосты и точки сочленения, все люди, грокающие графы, будут благодарны
@ducbyk8169
@ducbyk8169 Ай бұрын
Большое вам спасибо за наглядные примеры и код.
@user-vf7xz3kd9h
@user-vf7xz3kd9h Ай бұрын
Найс
@user-vf7xz3kd9h
@user-vf7xz3kd9h Ай бұрын
Нааааайс
@user-vf7xz3kd9h
@user-vf7xz3kd9h Ай бұрын
Топ
@lobiritus1512
@lobiritus1512 Ай бұрын
Спасибо за такое понятное и подробное объяснение!
@aveok1
@aveok1 Ай бұрын
Спасибо вам болшое
@user-vf7xz3kd9h
@user-vf7xz3kd9h Ай бұрын
Огонь 🔥
@Bibliophilos
@Bibliophilos Ай бұрын
Коммент в поддержку канала, большое дело делает автор.
@Bibliophilos
@Bibliophilos Ай бұрын
Спасибо огромное за видео! Пожалуйста, объясните для чайника, когда мы пишем l = m+1, r = m - 1; а когда просто приравниваем m? Первый случай только для поиска конкретного элемента?
@op_ulstu
@op_ulstu Ай бұрын
Мы начали с такого примера и такого решения потому, что для начинающих зрителей они являются более понятными и естественными. Далее мы придём к более общему решению. Задача, которая решается при помощи бинпоиска, чаще состоит не в том, чтобы найти какое-то заданное значение, а в том, чтобы найти первый или последний элемент, обладающий определённым свойством. Для таких задач уже проще запомнить общее решение, когда цикл while идёт до 2 элементов, а l и r всегда смещаются на m (без +1/-1). Подробнее об этом рассказано в следующем видео: kzfaq.info/get/bejne/ldtirNyhqaeagmQ.html Когда нужен поиск заданного значения в массиве, его можно выполнять так, как показано здесь, но можно воспользоваться и вышеупомянутой общей схемой, например, искать первый элемент, который больше или равен заданному значению (цикл while в этом случае идёт до 2 элементов, l и r смещаются на m).
@Bibliophilos
@Bibliophilos Ай бұрын
@@op_ulstu благодарю! Вы один из топовых авторов по объяснению алгоритмов.
@lekopin1783
@lekopin1783 Ай бұрын
Спасибо большое! Отличный урок!
@Bibliophilos
@Bibliophilos Ай бұрын
Спасибо за все видео, очень доступно объясняете, пожалуйста, не останавливайтесь, если есть такая возможность:)
@user-vf7xz3kd9h
@user-vf7xz3kd9h Ай бұрын
Матреца смежнасти лутшая
@front-rud
@front-rud Ай бұрын
Я вообще не понимал как устроен этот алгоритм и другие, пока не начал смотреть ваши видосы. Все просто разжеванно, спасибо большое !
@hackernet1408
@hackernet1408 2 ай бұрын
Здравствуйте ! Будут ли лекции по парсочам , строкам ? Планируется ли регулярное выкладывание видео ? . Хочу поблагодарить вас за ваш большой труд, вы помогаете довольно многим людям, студентам. Хороший интерактивный формат (коротко по делу, с упоминанием нюансов, приложения). Также хотел спросить есть ли конспекты по этим видео ?
@pashaxd7337
@pashaxd7337 2 ай бұрын
Лучший канал по алгоритмам и структурам данным на русскоязычном пространстве.
@203-ve8hk
@203-ve8hk 2 ай бұрын
😨😓💩🤡👌🏿🤛🏿💁🏿
@macbeth143
@macbeth143 2 ай бұрын
thank you so much, do you have anything related to number theory or math for cp in general ?
@FaxWeb7
@FaxWeb7 2 ай бұрын
Прям вовремя видос выпустили, я как раз сейчас этот алгоритм изучаю. Было бы классно увидеть ролики о динамическом программировании на вашем канале, очень хорошо объясняете, только вот просмотров мало(
@user-zw3rq6ij2n
@user-zw3rq6ij2n 2 ай бұрын
Это слишком хорошо
@huseynscratchprogram2438
@huseynscratchprogram2438 2 ай бұрын
Здравствуйте я написал этот же код но результат немного иной выходит вот результат: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 "; } }
@macbeth143
@macbeth143 2 ай бұрын
how can i start CP
@OrionKropt
@OrionKropt 2 ай бұрын
Мего харош Просто лучший
@borsuk7617
@borsuk7617 2 ай бұрын
Где я могу найти код из урока?
@op_ulstu
@op_ulstu 2 ай бұрын
acm.khpnets.info/wiki/Алгоритм_Флойда
@huseynscratchprogram2438
@huseynscratchprogram2438 2 ай бұрын
Здравствуйте вы онлайн уроки проводите для олимпиады?
@op_ulstu
@op_ulstu 2 ай бұрын
Здравствуйте. Увы, нет.
@aveok1
@aveok1 2 ай бұрын
Ты топ
@klausvreinherz7145
@klausvreinherz7145 2 ай бұрын
у вас звезда амперсанд в аргументе сплита - это бан на полчаса
@op_ulstu
@op_ulstu 2 ай бұрын
Что именно вас смутило? a и b в split() - это указатели на вершины результирующих деревьев, они имеют тип Node *. Это выходные параметры, мы хотим изменять их внутри split, поэтому передаём их по ссылке: Node *&. Если хотите, можете возвращать из split пару указателей: pair<Node *, Node *> split(Node *n, int key).
@klausvreinherz7145
@klausvreinherz7145 2 ай бұрын
@@op_ulstu это некоторый мем с лабораторных работ по C в моём универе, если подойти с таким на сдачу лабы, то вас не будут принимать следующие полчаса, так как в си такая конструкция не имеет смысла. Если говорить о том что меня смутило в этом видеоролике, то мне и словами не описать ту боль которую мне пришлось пережить чтобы понять как дерево на самом деле работает, то как вы объяснили на визуализации конечно складно и понятно, но код так не работает, (я говорю о ф-ии split). Возможно этого поверхностного "понимания" достаточно чтобы использовать такой подход как инструмент в олимпиадных задачах и далеко не всем хочется знать как обстоят дела на самом деле
@op_ulstu
@op_ulstu 2 ай бұрын
@@klausvreinherz7145 Код в видео написан на C++, а не на C. Здесь & - это не операция взятия адреса (в объявлении типа эта операция всё равно не имела бы смысла), а признак ссылки. В показанном коде *& - не две взаимообратные операции, а ссылка на указатель.
@klausvreinherz7145
@klausvreinherz7145 2 ай бұрын
@@op_ulstuпоэтому я и упомянул что лабораторные мы писали на си
@klausvreinherz7145
@klausvreinherz7145 2 ай бұрын
@@op_ulstu так как этот мем был несколько неуместен, но всё же достойным упоминания в обществе моих одногрупников, с коими я и пытался смотреть ваше видео
@user-tr8xi3ik3c
@user-tr8xi3ik3c 2 ай бұрын
огромное спасибо за объяснение и за проделанную работу!
@pechinkin
@pechinkin 2 ай бұрын
очень хороший мини-курс, очень! спасибо. и анимация приятная, когда от одного к другому переходит. интересно, как это сделано всё разжёвано в нужной степени, вкусно)
@user-sf9fd8up5b
@user-sf9fd8up5b 2 ай бұрын
великолепно )
@user-do3zm3vp2f
@user-do3zm3vp2f 2 ай бұрын
Как же шикарно автор объясняет. Я прям кайфую от объяснений автора.
@user-nt7lj6eu6b
@user-nt7lj6eu6b 3 ай бұрын
Спасибо за видео. Возник вопрос, почему есть утверждение, что при использовании матрицы смежности асимптотика алгоритма равняется O(V**2), - я понимаю вашу логику, что проверок условий действительно будет больше, но ведь самих запусков dfs - столько же, ведь у нас в условии IF фигуририрует visited, который мы обновляем на предыдущуих вызовах рекурсии
@op_ulstu
@op_ulstu 3 ай бұрын
Проверка, существует ли ребро между вершинами a и b, - не бесплатная операция. Представьте себе запуск DFS на пустом графе из 1000 вершин. Если граф был сохранён в виде списков смежности, то после запуска DFS от каждой вершины мы сразу делаем вывод, что у неё нет соседей, так как соответствующий список смежности пуст; в цикл for мы даже не входим. Итого O(1) на обработку каждой вершины и общая сложность O(V) для запусков от всех вершин. Если граф был сохранён в виде матрицы смежности, после запуска от любой вершины алгоритму придётся просмотреть 1000 ячеек соответствующей строки матрицы, чтобы понять, что там всюду нули и соседних вершин нет. Итого O(V) на обработку каждой вершины и общая сложность O(V^2).
@user-vf7xz3kd9h
@user-vf7xz3kd9h 3 ай бұрын
А 8адачу с сасудами можно решить с помощи дп
@user-vf7xz3kd9h
@user-vf7xz3kd9h 3 ай бұрын
Задачу
@onlyc583
@onlyc583 3 ай бұрын
Большое спасибо за урок! Очень просто и понятно объяснили как работает декартово дерево, как балансируется и как его писать
@user-dz6hn8vk9w
@user-dz6hn8vk9w 3 ай бұрын
Лучшее видео!
@MartinIden-hn7ld
@MartinIden-hn7ld 3 ай бұрын
Огромное спасибо за видео