-
Notifications
You must be signed in to change notification settings - Fork 169
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
Лаганина Елена. Задача 3. Вариант 22. Поиск кратчайших путей из одной вершины (Алгоритм Дейкстры). С CRS графов. #811
Conversation
There was a problem hiding this 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
There was a problem hiding this 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 ReportAttention: Patch coverage is
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. |
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; | ||
} |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extra include
There was a problem hiding this comment.
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) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add test with 128
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extra includes
There was a problem hiding this comment.
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( |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extra include
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
There was a problem hiding this 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) { |
There was a problem hiding this 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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Its unreal
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
okey
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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_"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
Seq версия:
Алгоритм инициализирует массив расстояний, присваивая начальной вершине расстояние ноль, а всем остальным вершинам — бесконечность. Также создается массив для отслеживания посещенных вершин, изначально все вершины помечены как непосещенные. На каждом шаге алгоритм выбирает непосещенную вершину с наименьшим текущим расстоянием. Выбранная вершина отмечается как посещенная. Затем для каждой соседней вершины выбранной вершины пересчитывается расстояние от начальной вершины. Если новое вычисленное расстояние оказывается меньше, чем текущее расстояние до соседней вершины, то текущее расстояние обновляется. Данная процедура повторяется до тех пор, пока все вершины не будут посещены. По завершении алгоритма, массив расстояний содержит кратчайшие пути от начальной вершины до всех остальных вершин графа.
MPI версия:
В представленной параллельной реализации алгоритма Дейкстры для повышения вычислительной эффективности используется распределенная обработка графа между несколькими процессами. Суть подхода заключается в том, что на начальном этапе определяются все непосредственные потомки стартовой вершины, которые затем распределяются между вычислительными процессами. Каждый процесс, получив потомка, вычисляет кратчайшие расстояния от этого потомка до всех остальных вершин графа параллельно. При этом используется локальный массив расстояний, и глубина обхода графа в каждом процессе будет меньше по сравнению с последовательным алгоритмом. За счет параллельной обработки, вычислительная нагрузка на каждом процессе снижается пропорционально числу задействованных процессов. После завершения вычислений на каждом процессе, результаты собираются на управляющем процессе. На управляющем процессе также вычисляются расстояния от стартовой вершины до всех ее потомков и добавляются к полученным расстояниям. Далее происходит сбор минимальных расстояний, с использованием операции reduce, для получения окончательных значений. Полученные минимальные расстояния сравниваются с локальными данными на управляющем процессе и обновляются, таким образом, формируется финальный массив кратчайших расстояний от стартовой вершины до всех вершин графа. Основным преимуществом данного алгоритма является распараллеливание вычислений, что обеспечивает сокращение общего времени выполнения.