Алгоритм Дейкстры за O(M log N) | Реализация на C++
HTML-код
- Опубликовано: 5 фев 2025
- Алгоритм Дейкстры позволяет находить кратчайшие пути от заданной вершины до всех остальных вершин. В данном видео мы реализуем алгоритм Дейкстры за O(M log N), где N - количество вершин, M - количество ребер.
Код: github.com/she...
const int Inf = 30000
Не знаю, прочитаешь ли ты комментарий, но я благодаря тебе понял все, что связано с этим алгоритмом. Спасибо большое и надеюсь, что у тебя все отлично!
Спасибо тебе огромное :)
Долго искала понятный урок про Дейкстру именно с приоритетной очередью и наконец-то нашла
Спасибо за видео
Как и было сказано ранее, в самой матрице неверно рассчитано значение
"Из 3й вершины в 1ю за 2 еденицы веса, у вас 1 в таблице смежности"
Вот код без ручного ввода и использующий очередь с приоритетом с компаратором (не нужно будет исп-ть минус)
const int INF = 100000;
int main() {
// Входные данные, сам граф, начальная и конечные точки
vectorgraf = {
{0, 1, 1},
{4, 0 , 1},
{2, 1, 0}
};
int start = 2;
int end = 1;
start--;
end--;
// Вектор для расстояний, инициализация начальной вершины, очередь из пар, пуш стартового эл-та в очередь
vectordist(graf.size(), INF);
dist[start] = 0;
priority_queueq;
q.push(make_pair(0, start));
while (!q.empty()) {
int length = q.top().first;
int v = q.top().second;
q.pop();
if (length > dist[v]) continue;
for (int i = 0; i < graf.size(); i++) {
int to = i;
int len = graf[v][i];
if (dist[to] > dist[v] + len and len >= 0) {
dist[to] = dist[v] + len;
q.push(make_pair(dist[to], to));
}
}
}
cout
Огромное спасибо за объяснение, искал очень долго реализацию с очередью этой, наконец-то, спустя столько времени, я нашёл её
От третьей вершины к первому расстояние 2, на минуте 1:19
девочке 10 лет, а она уже шарит
Если ты ты это читаешь, то знай, что видео топовое. Зря забросила
Из 3й вершины в 1ю за 2 еденицы веса, у вас 1 в таблице смежности
Скорей всего ошиблась, человеческий фактор
Спасибо большое, а можно и флойда?
Очень долго, гораздо быстрее было бы, если бы вы складывали все посещенные вершины в какой-нибудь хэш-сет и каждый раз его проверяли.
А если узлы не все со всеми ?
Здравствуйте ,можете объяснить почему сложность данного алгоритма именно MlogN,logN в приоритетной очереди получается ,а где ещё проход на M
подскажите как надо изменить программу, чтобы вектор заполнять матрицей весов из файла?
А как сделать, чтобы выводилось расстояние от заданной вершины до всех оставшихся?
Просто проходишся від 1 до н і виводиш d[i]
Женись на мне
Очень плохо сделано, сделай себе граф, у которого 10к вершин, твой алгоритм пройдет все вершины, даже если путь нужен от 1 до 4, но все вершины не нужно смотреть, зачем
Bogdan Shelomanov, если ты не просмотришь все вершины, то просто можешь не найти кратчайший путь, а именно эту задачу мы и хотим решить. e-maxx.ru/algo/dijkstra_sparse
@@it.alchemist можешь, достаточно посмотреть, что эта вершина является минимальной и немзменной
@@it.alchemist если она минимальна, меньше она быть не может, посмотри как люди на бумаге делают, каждая итерация по новой вершине добавляет какую-то в наименьшую, наименьшая - это вершина, путь до которой самый минимальный среди посещенных вершин, исключая уже наименьшие до этого
@@it.alchemist ruclips.net/video/tyQSgTytc4s/видео.html
Тут мужик вот показал как раз
Bogdan Shelomanov у меня точно такой же алгоритм, только я ищу минимум с помощью приоритетной очереди, поэтому сложность не O(N^2 + M), а O(MlogN)!