Академический Документы
Профессиональный Документы
Культура Документы
ОТЧЕТ
по учебной практике
на тему:
«Число Хадвигера»
Выполнила:
студентка группы 381706-3
Кашина Анастасия Александровна
_______________________Подпись
Научный руководитель:
Доцент кафедры АГДМ
Сорочан Сергей Владимирович
_______________________Подпись
Нижний Новгород
2019
Содержание
1. СОДЕРЖАНИЕ............................................................................................................................................2
2. ПОСТАНОВКА ЗАДАЧИ..............................................................................................................................3
3. МЕТОД РЕШЕНИЯ.....................................................................................................................................5
4. СХЕМА РАСПАРАЛЛЕЛИВАНИЯ................................................................................................................6
5. ОПИСАНИЕ ПРОГРАММНОЙ РЕАЛИЗАЦИИ............................................................................................7
1.1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ.......................................................................................................7
1.2. РУКОВОДСТВО ПРОГРАММИСТА.....................................................................................................8
6. ПОДТВЕРЖДЕНИЕ КОРРЕКТНОСТИ..........................................................................................................9
7. РЕЗУЛЬТАТЫ ЭКСПЕРИМЕНТОВ.............................................................................................................10
8. ЗАКЛЮЧЕНИЕ..........................................................................................................................................12
9. ПРИЛОЖЕНИЕ.........................................................................................................................................13
Шшш
2
Постановка задачи
3
Метод решения
4
Примеры
5
Результаты экспериментов
Персональный компьютер:
RAM: 16 Gb;
1600
1400
1200
1000
800
Время
600
400
200
0
15 30 45 60 75 90 120 140 160 175 190 300 450 600 750 900 100 400 700 000 300 600 500
1 1 1 2 2 2 3
Количество вершин
6
30
25
Число Хадвигера 20
15
10
0
15 30 45 60 75 90 110 135 155 170 185 250 400 550 700 850 000 300 600 900 200 500 000 500
1 1 1 1 2 2 3 4
Количество вершин
7
Заключение
8
Литература
1. Лекции по теории графов / В. А. Емеличев [и др.]. — М.: Наука. Гл. ред. Физ.-
мат. Лит., 1990 — 384 с.
9
Приложение
1. void first_to_all(vector<vector<int>>vec)
{ unsigned int start_time = clock();
unsigned int counting = 0;
bool find = false;
int n = vec.size();
unsigned int versh1 = 0, versh2 = 1;
while (!find) {
for (int i = 1, size = n; i < size; ++i)//i с 1 т.к. не считаем диагональ
{ if (i != versh1)//чтобы вершина не складывалась с собой
if (vec[i][versh1] + vec[i][versh2] > 0)
vec[i][versh1] = 1;
} for (int i = 1, size = n; i < size; ++i)
vec[versh1][i] = vec[i][versh1];
for (int i = versh2, size = n - 1; i < size; ++i)//удаляю следующую строку
for (int j = 0; j < n; ++j)
vec[i][j] = vec[i + 1][j];//присваивает следующую
for (int j = versh2; j < n - 1; ++j)//удаляю следующий столбец
for (int i = 0, size = n; i < size; ++i)
vec[i][j] = vec[i][j + 1];
--n;//уменьшаем размерность
find = checking(vec, n);
counting++;
}
}
2. void min_max_degree(vector<vector<int>>vec)
{ unsigned int counting = 0;
vector<unsigned int> array;//будем хранить вектор степеней
array.resize(vec.size());//задает размер, равный количеству вершин
counting_degree(vec, array);
bool find = false;
int n = vec.size();
unsigned int versh1, versh2;
while (!find)
{ int min_index = 0, max_index = 1;
int min = array[0], max = array[1];
if (max < min)
{ min = max;
max = array[0];
min_index = 1, max_index = 0;
}
else if (min > max)
{ max = min;
min = array[1];
min_index = 1, max_index = 0;
}
for (int i = 2; i < n; i++)//т.к. в строке выше присвоили 0 и 1
if (array[i] <= min)
{ min = array[i];
min_index = i;
}else if (array[i] >= max)
{ max = array[i];
max_index = i;
} versh1 = min_index; versh2 = max_index;
for (int i = 1, size = n; i < size; ++i)//i с 1 т.к. не считаем диагональ
{ if (i != versh1)//чтобы вершина не складывалась с собой
if (vec[i][versh1] + vec[i][versh2] > 0)
vec[i][versh1] = 1;
}
10
for (int i = 1, size = n; i < size; ++i)
vec[versh1][i] = vec[i][versh1];
12