Розріджені матриці

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2022
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування складних алгоритмів

Частина тексту файла (без зображень, графіків і формул):

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ “КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ імені ІГОРЯ СІКОРСЬКОГО” ЗВІТ з лабораторної роботи №6 з навчальної дисципліни “Програмування складних алгоритмів” Тема: «Розріджені матриці» Варіант 13 Київ 2022 Мета: Метою лабораторної роботи є ознайомитися з основами роботи з представленням у пам’яті розріджених матриць, зберіганням та обробкою такого вигляду матриць. Теоретичні відомості Розріджена матриця — матриця, більша частина елементів якої є нулі. Немає єдиного визначення, яка кількість ненульових елементів має бути в матриці, щоб вона була розрідженою. Величезні розріджені матриці часто виникають, наприклад, при чисельному розв’язуванні диференціальних рівнянь у частинних похідних. Зберігати цілу матрицю у пам'яті комп'ютера є неефективно по відношенню до пам'яті, тому є альтернативні способи збереження таких матриць. Одним з таких способів полягає в зберіганні ненульових елементів та їх координат. Цей спосіб є економний для пам'яті але для виконання дій з матрицями (додавання, множення) він є неефективний, оскільки кожного разу потрібно перебирати всі елементи для пошуку відповідного елемента. У цьому способі збереження кожен ненульовий елемент зберігається у вигляді значення, номера рядка та стовпця і вказівника на наступний елемент в рядку і стовпці. Для цього методу збереження потрібно також зберігати рамку, яка складається з таких самих елементів, до якої ми будемо прив'язувати всі елементи вказівниками. Цей спосіб потребує більше пам'яті, але при цьому збільшується швидкість виконання дій над матрицями. Для матриці порядку n елементів кількість ненульових елементів / Завдання до лабороторної роботи: Розробити спосіб економного зберігання в пам’яті розріджених матриць Виконати індивідуальне завдання над стисненою матрицею. Вивести матрицю до та після обробки у стисненому та розгорнутому вигляді / Рисунок 1. Завдання 13 варіанту. Результат роботи / / / / Висновки: розроблено програму, що виконує створення такої матриці, в якої більшість елементів є нулями, тобто таку матрицю можна назвати розрідженою. Для економного представлення такої матриці у пам’яті побудовано клас SparseMatrix, який представляє розріджену матрицю як масив підкласів, полями яких є координати ненульового елменту та його значення. Оброблено розріджену матрицю за особистим завданням. Програмний код class Lr6 { public static void main(String[] args) { System.out.println("Матриця ДО обробки у розгорнутому вигляді:"); var matrix = createDefaultMatrix(10); displayDefaultMatrix(matrix); System.out.println("Матриця ДО обробки у стисненому вигляді:"); SparseMatrix sparseMatrix = new SparseMatrix(matrix); sparseMatrix.display(); System.out.println("Матриця ПІСЛЯ обробки у розгорнутому вигляді:"); sparseMatrix.task(); displayDefaultMatrix(sparseMatrix.getDefaultMatrix()); System.out.println("Матриця ПІСЛЯ обробки у стисненому вигляді:"); sparseMatrix.display(); } static int[][] createDefaultMatrix(int n) { int[][] arr = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { double rand = Math.random(); if (rand >= 0.7 && rand <= 0.9) arr[i][j] = (int)(Math.random() * 9.0) + 1; } } return arr; } static void displayDefaultMatrix(int[][] arr) { for (int i = 0; i < arr.length; i++) { System.out.println(Arrays.toString(arr[i])); } } } class SparseMatrix { SparseMatrixElement[] matrix; int columns; int rows; SparseMatrix(int[][] defaultMatrix) { List<SparseMatrixElement> list = new ArrayList<SparseMatrixElement>(); for (int i = 0; i < defaultMatrix.length; i++) for (int j = 0; j < defaultMatrix[i].length; j++) { if (defaultMatrix[i][j] != 0) { list.add(new SparseMatrixElement(new Point(i, j), defaultMatrix[i][j])); } } matrix = new SparseMatrixElement[list.size()]; list.toArray(matrix); rows = defaultMatrix.length; columns = defaultMatrix[0].length; } void display() { for (int i = 0; i< matrix.length; i++) System.out.println("<"+matrix[i].position.x+", "+matrix[i].position.y+"> = "+matrix[i].value); } void task() { for (int i = 0; i < rows; i++) { for (int j = 0; j <= columns - 5; j+=5) { replace(new Point(i,j), new Point(i,j+4)); replace(new Point(i,j+1), new Point(i,j+3)); } } } void replace(Point pos1, Point pos2) { SparseMatrixElement el1 = find(pos1); SparseMatrixElement el2 = find(pos2); if (el1 == null && el2 == null) return; if (el1 != null && el2 != null) { el1.position = pos2; el2.position = pos1; return; } if (el1 != null) { el1.position = pos2; return; } if (el2 != null) { el2.position = pos1; return; } } SparseMatrixElement find(Point pos) { for (int i = 0; i < matrix.length; i++) if (matrix[i].position.x == pos.x && matrix[i].position.y == pos.y) return matrix[i]; return null; } int[][] getDefaultMatrix() { int[][] arr = new int[rows][columns]; for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { SparseMatrixElement current = find(new Point(i, j)); if (current == null) arr[i][j] = 0; else arr[i][j] = current.value; } } return arr; } private class SparseMatrixElement { Point position; int value; SparseMatrixElement(Point point, int val) { position = point; value = val; } } }
Антиботан аватар за замовчуванням

29.06.2023 21:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!