Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Лаганина Елена. Задача 3. Вариант 22. Поиск кратчайших путей из одной вершины (Алгоритм Дейкстры). С CRS графов. #811

Merged
merged 16 commits into from
Dec 29, 2024

Conversation

laganina-cod
Copy link
Contributor

@laganina-cod laganina-cod commented Dec 27, 2024

Seq версия:

Алгоритм инициализирует массив расстояний, присваивая начальной вершине расстояние ноль, а всем остальным вершинам — бесконечность. Также создается массив для отслеживания посещенных вершин, изначально все вершины помечены как непосещенные. На каждом шаге алгоритм выбирает непосещенную вершину с наименьшим текущим расстоянием. Выбранная вершина отмечается как посещенная. Затем для каждой соседней вершины выбранной вершины пересчитывается расстояние от начальной вершины. Если новое вычисленное расстояние оказывается меньше, чем текущее расстояние до соседней вершины, то текущее расстояние обновляется. Данная процедура повторяется до тех пор, пока все вершины не будут посещены. По завершении алгоритма, массив расстояний содержит кратчайшие пути от начальной вершины до всех остальных вершин графа.

MPI версия:

В представленной параллельной реализации алгоритма Дейкстры для повышения вычислительной эффективности используется распределенная обработка графа между несколькими процессами. Суть подхода заключается в том, что на начальном этапе определяются все непосредственные потомки стартовой вершины, которые затем распределяются между вычислительными процессами. Каждый процесс, получив потомка, вычисляет кратчайшие расстояния от этого потомка до всех остальных вершин графа параллельно. При этом используется локальный массив расстояний, и глубина обхода графа в каждом процессе будет меньше по сравнению с последовательным алгоритмом. За счет параллельной обработки, вычислительная нагрузка на каждом процессе снижается пропорционально числу задействованных процессов. После завершения вычислений на каждом процессе, результаты собираются на управляющем процессе. На управляющем процессе также вычисляются расстояния от стартовой вершины до всех ее потомков и добавляются к полученным расстояниям. Далее происходит сбор минимальных расстояний, с использованием операции reduce, для получения окончательных значений. Полученные минимальные расстояния сравниваются с локальными данными на управляющем процессе и обновляются, таким образом, формируется финальный массив кратчайших расстояний от стартовой вершины до всех вершин графа. Основным преимуществом данного алгоритма является распараллеливание вычислений, что обеспечивает сокращение общего времени выполнения.

@laganina-cod laganina-cod changed the title Лаганина Елена. Задача 3. Поиск кратчайших путей из одной вершины (Алгоритм Дейкстры). С CRS графов. Лаганина Елена. Задача 3, вариант 22. Поиск кратчайших путей из одной вершины (Алгоритм Дейкстры). С CRS графов. Dec 27, 2024
@laganina-cod laganina-cod changed the title Лаганина Елена. Задача 3, вариант 22. Поиск кратчайших путей из одной вершины (Алгоритм Дейкстры). С CRS графов. Лаганина Елена. Задача 3. Вариант 22. Поиск кратчайших путей из одной вершины (Алгоритм Дейкстры). С CRS графов. Dec 27, 2024
Copy link
Contributor

@VladislavPoroshin VladislavPoroshin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with the changes

Copy link
Contributor

@KorotinEgor KorotinEgor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with with changes

@codecov-commenter
Copy link

codecov-commenter commented Dec 27, 2024

Codecov Report

Attention: Patch coverage is 92.66055% with 16 lines in your changes missing coverage. Please review.

Project coverage is 93.72%. Comparing base (041bb28) to head (97edb7c).
Report is 104 commits behind head on master.

Files with missing lines Patch % Lines
tasks/mpi/laganina_e_dejkstras_a/src/ops_mpi.cpp 89.47% 4 Missing and 10 partials ⚠️
...sks/mpi/laganina_e_dejkstras_a/include/ops_mpi.hpp 96.66% 0 Missing and 1 partial ⚠️
...sks/seq/laganina_e_dejkstras_a/include/ops_seq.hpp 95.45% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #811      +/-   ##
==========================================
+ Coverage   93.38%   93.72%   +0.34%     
==========================================
  Files        1090     1191     +101     
  Lines       38499    42186    +3687     
  Branches    17429    19231    +1802     
==========================================
+ Hits        35951    39540    +3589     
- Misses        904      905       +1     
- Partials     1644     1741      +97     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Comment on lines 12 to 29
std::vector<int> getRandomgraph(int v) {
std::vector<int> graph(v * v);
std::mt19937 engine;
for (int i = 0; i < v; i++) {
for (int j = 0; j <= i; j++) {
if (i == j) {
graph[i * v + j] = 0;
continue;
}
int tmp1 = engine() % 10;
if (tmp1 < 0) {
tmp1 *= -1;
}
graph[j * v + i] = graph[i * v + j] = tmp1;
}
}
return graph;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please generate structure of graph too

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The graph’s structural configuration can now be adjusted via the assignment of the requisite number of edges.

@@ -0,0 +1,426 @@
#include <gtest/gtest.h>

#include <boost/mpi/communicator.hpp>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extra include

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

}
}

TEST(laganina_e_dejkstras_a_mpi, Test_101_random) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add test with 128

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@@ -0,0 +1,290 @@
#include "mpi/laganina_e_dejkstras_a/include/ops_mpi.hpp"

#include <boost/mpi/communicator.hpp>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extra includes

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

return true;
}

void laganina_e_dejskras_a_mpi::TestMPITaskSequential::get_children_with_weights(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use static and replace function in top of file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

}
}

void laganina_e_dejskras_a_mpi::TestMPITaskSequential::dijkstra(int start_vertex, const std::vector<int>& row_ptr,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use static and replace function in top of file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

return true;
}

void laganina_e_dejkstras_a_Seq::laganina_e_dejkstras_a_Seq::dijkstra(int start_vertex, const std::vector<int>& row_ptr,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use static and replace function in top of file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


#include <queue>
#include <thread>
#include <vector>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extra include

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor

@BrunoBucCcellati BrunoBucCcellati left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a test with random graphs

testTaskSequential.post_processing();
ASSERT_EQ(expectResult, trueResult);
}
TEST(laganina_e_dejkstras_a, Test_v_less_1) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a test with random graphs

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its unreal

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okey

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

because it's seq version and correct answer for random is not know

TEST(laganina_e_dejkstras_a_mpi, Test_25_random) {
boost::mpi::communicator world;
int v_ = 25;
int e_ = 5;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use a larger value of "e_"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@aobolensk aobolensk merged commit 108a937 into learning-process:master Dec 29, 2024
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants