Спасибо, очено помогли,единственный нормально объяснение на ютубе
@tusman4ik14 күн бұрын
А стоит ли на олимпиаде этим заниматься? Я про тестинг автоматический.. Ведь время жмет.
@op_ulstu14 күн бұрын
На последних часах пятичасовых соревнований нередко есть выбор между поиском ошибки в решении одной задачи или написанием с нуля решения другой задачи. Стресс-тестирование в такой ситуации может очень сильно помочь. Кроме того, есть форматы соревнований, когда решения отправляются «втёмную» (то есть итоговый вердикт становится известен только после окончания). В этом случае стресс-тестирование просто незаменимо.
@adventureswithstan102615 күн бұрын
Идеальный канал,спасибо
@antonnesterov871117 күн бұрын
3:10 - почему сдвинули R на 40, а не на 43?
@op_ulstu17 күн бұрын
Спасибо за наблюдательность, здесь на слайдах ошибка. Правильная последовательность шагов при поиске элемента 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 в массиве нет.
@antonnesterov871117 күн бұрын
@@op_ulstu понял, большое спасибо за уточнение! И за курс в целом - он отличный!
@quirenceh4ndeir15623 күн бұрын
Легенда. Спасибо. Добавьте еще дополнительные задачи про мосты и точки сочленения, все люди, грокающие графы, будут благодарны
@ducbyk816928 күн бұрын
Большое вам спасибо за наглядные примеры и код.
@user-vf7xz3kd9hАй бұрын
Найс
@user-vf7xz3kd9hАй бұрын
Нааааайс
@user-vf7xz3kd9hАй бұрын
Топ
@lobiritus1512Ай бұрын
Спасибо за такое понятное и подробное объяснение!
@aveok1Ай бұрын
Спасибо вам болшое
@user-vf7xz3kd9hАй бұрын
Огонь 🔥
@BibliophilosАй бұрын
Коммент в поддержку канала, большое дело делает автор.
@BibliophilosАй бұрын
Спасибо огромное за видео! Пожалуйста, объясните для чайника, когда мы пишем l = m+1, r = m - 1; а когда просто приравниваем m? Первый случай только для поиска конкретного элемента?
@op_ulstuАй бұрын
Мы начали с такого примера и такого решения потому, что для начинающих зрителей они являются более понятными и естественными. Далее мы придём к более общему решению. Задача, которая решается при помощи бинпоиска, чаще состоит не в том, чтобы найти какое-то заданное значение, а в том, чтобы найти первый или последний элемент, обладающий определённым свойством. Для таких задач уже проще запомнить общее решение, когда цикл while идёт до 2 элементов, а l и r всегда смещаются на m (без +1/-1). Подробнее об этом рассказано в следующем видео: kzread.info/dash/bejne/kalm29updKScgpM.html Когда нужен поиск заданного значения в массиве, его можно выполнять так, как показано здесь, но можно воспользоваться и вышеупомянутой общей схемой, например, искать первый элемент, который больше или равен заданному значению (цикл while в этом случае идёт до 2 элементов, l и r смещаются на m).
@BibliophilosАй бұрын
@@op_ulstu благодарю! Вы один из топовых авторов по объяснению алгоритмов.
@lekopin1783Ай бұрын
Спасибо большое! Отличный урок!
@BibliophilosАй бұрын
Спасибо за все видео, очень доступно объясняете, пожалуйста, не останавливайтесь, если есть такая возможность:)
@user-vf7xz3kd9hАй бұрын
Матреца смежнасти лутшая
@front-rudАй бұрын
Я вообще не понимал как устроен этот алгоритм и другие, пока не начал смотреть ваши видосы. Все просто разжеванно, спасибо большое !
@hackernet1408Ай бұрын
Здравствуйте ! Будут ли лекции по парсочам , строкам ? Планируется ли регулярное выкладывание видео ? . Хочу поблагодарить вас за ваш большой труд, вы помогаете довольно многим людям, студентам. Хороший интерактивный формат (коротко по делу, с упоминанием нюансов, приложения). Также хотел спросить есть ли конспекты по этим видео ?
@pashaxd7337Ай бұрын
Лучший канал по алгоритмам и структурам данным на русскоязычном пространстве.
@203-ve8hkАй бұрын
😨😓💩🤡👌🏿🤛🏿💁🏿
@macbeth143Ай бұрын
thank you so much, do you have anything related to number theory or math for cp in general ?
@FaxWeb7Ай бұрын
Прям вовремя видос выпустили, я как раз сейчас этот алгоритм изучаю. Было бы классно увидеть ролики о динамическом программировании на вашем канале, очень хорошо объясняете, только вот просмотров мало(
@user-zw3rq6ij2nАй бұрын
Это слишком хорошо
@huseynscratchprogram2438Ай бұрын
Здравствуйте я написал этот же код но результат немного иной выходит вот результат: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Ай бұрын
how can i start CP
@OrionKroptАй бұрын
Мего харош Просто лучший
@borsuk7617Ай бұрын
Где я могу найти код из урока?
@op_ulstuАй бұрын
acm.khpnets.info/wiki/Алгоритм_Флойда
@huseynscratchprogram2438Ай бұрын
Здравствуйте вы онлайн уроки проводите для олимпиады?
@op_ulstuАй бұрын
Здравствуйте. Увы, нет.
@aveok1Ай бұрын
Ты топ
@klausvreinherz71452 ай бұрын
у вас звезда амперсанд в аргументе сплита - это бан на полчаса
@op_ulstu2 ай бұрын
Что именно вас смутило? a и b в split() - это указатели на вершины результирующих деревьев, они имеют тип Node *. Это выходные параметры, мы хотим изменять их внутри split, поэтому передаём их по ссылке: Node *&. Если хотите, можете возвращать из split пару указателей: pair<Node *, Node *> split(Node *n, int key).
@klausvreinherz7145Ай бұрын
@@op_ulstu это некоторый мем с лабораторных работ по C в моём универе, если подойти с таким на сдачу лабы, то вас не будут принимать следующие полчаса, так как в си такая конструкция не имеет смысла. Если говорить о том что меня смутило в этом видеоролике, то мне и словами не описать ту боль которую мне пришлось пережить чтобы понять как дерево на самом деле работает, то как вы объяснили на визуализации конечно складно и понятно, но код так не работает, (я говорю о ф-ии split). Возможно этого поверхностного "понимания" достаточно чтобы использовать такой подход как инструмент в олимпиадных задачах и далеко не всем хочется знать как обстоят дела на самом деле
@op_ulstuАй бұрын
@@klausvreinherz7145 Код в видео написан на C++, а не на C. Здесь & - это не операция взятия адреса (в объявлении типа эта операция всё равно не имела бы смысла), а признак ссылки. В показанном коде *& - не две взаимообратные операции, а ссылка на указатель.
@klausvreinherz7145Ай бұрын
@@op_ulstuпоэтому я и упомянул что лабораторные мы писали на си
@klausvreinherz7145Ай бұрын
@@op_ulstu так как этот мем был несколько неуместен, но всё же достойным упоминания в обществе моих одногрупников, с коими я и пытался смотреть ваше видео
@user-tr8xi3ik3c2 ай бұрын
огромное спасибо за объяснение и за проделанную работу!
@pechinkin2 ай бұрын
очень хороший мини-курс, очень! спасибо. и анимация приятная, когда от одного к другому переходит. интересно, как это сделано всё разжёвано в нужной степени, вкусно)
@user-sf9fd8up5b2 ай бұрын
великолепно )
@user-do3zm3vp2f2 ай бұрын
Как же шикарно автор объясняет. Я прям кайфую от объяснений автора.
@user-nt7lj6eu6b2 ай бұрын
Спасибо за видео. Возник вопрос, почему есть утверждение, что при использовании матрицы смежности асимптотика алгоритма равняется O(V**2), - я понимаю вашу логику, что проверок условий действительно будет больше, но ведь самих запусков dfs - столько же, ведь у нас в условии IF фигуририрует visited, который мы обновляем на предыдущуих вызовах рекурсии
@op_ulstu2 ай бұрын
Проверка, существует ли ребро между вершинами a и b, - не бесплатная операция. Представьте себе запуск DFS на пустом графе из 1000 вершин. Если граф был сохранён в виде списков смежности, то после запуска DFS от каждой вершины мы сразу делаем вывод, что у неё нет соседей, так как соответствующий список смежности пуст; в цикл for мы даже не входим. Итого O(1) на обработку каждой вершины и общая сложность O(V) для запусков от всех вершин. Если граф был сохранён в виде матрицы смежности, после запуска от любой вершины алгоритму придётся просмотреть 1000 ячеек соответствующей строки матрицы, чтобы понять, что там всюду нули и соседних вершин нет. Итого O(V) на обработку каждой вершины и общая сложность O(V^2).
@user-vf7xz3kd9h2 ай бұрын
А 8адачу с сасудами можно решить с помощи дп
@user-vf7xz3kd9h2 ай бұрын
Задачу
@onlyc5833 ай бұрын
Большое спасибо за урок! Очень просто и понятно объяснили как работает декартово дерево, как балансируется и как его писать
@user-dz6hn8vk9w3 ай бұрын
Лучшее видео!
@MartinIden-hn7ld3 ай бұрын
Огромное спасибо за видео
@user-do3zm3vp2f3 ай бұрын
Как же автор все круто объяснил. Я физически ощутил как поумнел и вспомнил множество задач где можно было бы использовать бинарный поиск предварительно отсортировав коллекцию любой сортировкой с той же логарифмической сложностью.
@z3sker4673 ай бұрын
лучший канал, спасибо огромное❤
@michaelbom11003 ай бұрын
Большое спасибо за видео! Очень понятно и доступно!
@beworld_pasha3 ай бұрын
В общем, это буквально ИДЕАЛЬНЫЙ канал, чтоб заботать алгоритмы к интервью. Спасибо огромное!
Пікірлер
пытаться переписать этот код на python - трэш
Да ладно вам. ideone.com/SlQ8Cy
@@op_ulstu о, спасибо
От души всё растолковано, спасибо
спасибо вам огромное!!
Спасибо!
круто!
Спасибо, очено помогли,единственный нормально объяснение на ютубе
А стоит ли на олимпиаде этим заниматься? Я про тестинг автоматический.. Ведь время жмет.
На последних часах пятичасовых соревнований нередко есть выбор между поиском ошибки в решении одной задачи или написанием с нуля решения другой задачи. Стресс-тестирование в такой ситуации может очень сильно помочь. Кроме того, есть форматы соревнований, когда решения отправляются «втёмную» (то есть итоговый вердикт становится известен только после окончания). В этом случае стресс-тестирование просто незаменимо.
Идеальный канал,спасибо
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). Подробнее об этом рассказано в следующем видео: kzread.info/dash/bejne/kalm29updKScgpM.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адачу с сасудами можно решить с помощи дп
Задачу
Большое спасибо за урок! Очень просто и понятно объяснили как работает декартово дерево, как балансируется и как его писать
Лучшее видео!
Огромное спасибо за видео
Как же автор все круто объяснил. Я физически ощутил как поумнел и вспомнил множество задач где можно было бы использовать бинарный поиск предварительно отсортировав коллекцию любой сортировкой с той же логарифмической сложностью.
лучший канал, спасибо огромное❤
Большое спасибо за видео! Очень понятно и доступно!
В общем, это буквально ИДЕАЛЬНЫЙ канал, чтоб заботать алгоритмы к интервью. Спасибо огромное!