Professional Documents
Culture Documents
ТПР ЛР5 Іванюк СА-41
ТПР ЛР5 Іванюк СА-41
ЗВІТ
про виконання лабораторної роботи № 5
“Міри близькості відношень”
з дисципліни “Теорія прийняття рішень”
Львів 2023
Мета роботи: Вивчення та практичне ознайомлення з основними мірами
близькості на відношеннях.
Варіант – 7
Завдання на роботу
1. Робота виконується на базі реалізованих в лабораторних роботах №1 – 3
базового віртуального об’єкту “ВІДНОШЕННЯ” і його реалізацій
“ВІДНОШЕННЯ_МАТР” та “ВІДНОШЕННЯ_МАТР_МЕТР”.
2. Реалізувати механізми знаходження міри близькості – між
відношеннями лінійного порядку G та R, і між метризованими відношеннями S
і T.
3. Реалізувати механізм знаходження структурної міри близькості між
відношеннями еквівалентності Q1, Q2.
4. За допомогою отриманої програми знайти міру близькості між
відношеннями лінійного порядку G та R та між метризованими відношеннями
S і T, а також знайти структурну міру близькості між відношеннями
еквівалентності Q1, Q2.
5. Оформити звіт про виконану роботу.
matrix.clear();
matrix = newMatrix;
}
crossRelation->crossing(mRelation);
for (size_t i{ 0 }; i < crossRelation->size; i++)
{
std::vector<int> elements;
bool check{ true };
int count{ 0 };
for (size_t j{ 0 }; j < crossRelation->size; j++)
{
if (crossRelation->matrix[i][j] == 1)
{
if (classes22.size() == 0)
{
elements.push_back(j);
++count;
}
else
{
for (size_t k{ 0 }; k < classes22.size(); k++)
{
for (size_t m{ 0 }; m < classes22[k].size(); m++)
{
if (j == classes22[k][m])
{
check = false;
break;
}
}
}
if (check == true)
{
elements.push_back(j);
count++;
}
}
}
else
continue;
}
if (count > 0) {
classes22.push_back(elements);
cross.push_back(elements.size());
}
}
int sum{ 0 };
for (size_t i{ 0 }; i < classes.size(); i++)
{
int max{ -10 };
if (coordinates.size() == 0)
{
int jmax{ 0 };
for (size_t j{ 0 }; j < cross.size(); j++)
{
if (cross[j] > max)
{
max = cross[j];
jmax = j;
}
}
coordinates.push_back(jmax);
}
else
{
int jmax{ 0 };
for (size_t j{ 0 }; j < cross.size(); j++)
{
int check{ false };
for (size_t k{ 0 }; k < coordinates.size(); k++)
{
if (j == coordinates[k])
check = true;
}
if (check)
continue;
else
{
if (cross[j] > max)
{
max = cross[j];
jmax = j;
}
}
}
coordinates.push_back(jmax);
}
int res = 2 * (classes[i].size() - max) - r1[i] + 1;
sum += res;
}
int main()
{
std::vector<std::vector<int>> relationQ = { {1,0,0,0,0},{1,1,1,1,0},{0,0,1,0,0},{0,0,1,1,0},
{0,0,0,0,1} };
std::vector<std::vector<int>> relationR = { {0},{1},{0,1,2},{0,3},{0,4} };
std::vector<std::vector<int>> relationS = { {0,-2,-1,-1,-2},{2,0,1,1,0},{1,-1,0,0,-1},{1,-1,0,0,-1},
{2,0,1,1,0} };
std::vector<std::vector<int>> relationT = { {0,-1,1,-1,1},{1,0,2,0,2},{-1,-2,0,-2,0},{1,0,2,0,2},{-1,-
2,0,-2,0} };
std::vector<std::vector<int>> relationQ1 = { {1,0,0,0,0},{0,1,0,0,1},{0,0,1,0,0},{0,0,0,1,0},
{0,1,0,0,1} };
std::vector<std::vector<int>> relationQ2 = { {1,0,0,0,0},{0,1,1,0,1},{0,1,1,0,1},{0,0,0,1,0},
{0,1,1,0,1} };
PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc,
sizeof(pmc));
size_t memUsedByMe = pmc.WorkingSetSize;
std::cout << "Memory wasted on calculations: " << memUsedByMe / (1024) << " kb." << std::endl;
}