https://github.com/romanturas/goit-algo-fp
GoIt Algorythms Final Project
https://github.com/romanturas/goit-algo-fp
Last synced: 11 months ago
JSON representation
GoIt Algorythms Final Project
- Host: GitHub
- URL: https://github.com/romanturas/goit-algo-fp
- Owner: RomanTuras
- Created: 2024-05-01T09:59:26.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-05-25T07:19:30.000Z (about 2 years ago)
- Last Synced: 2025-04-08T11:26:15.482Z (about 1 year ago)
- Language: Python
- Size: 9.77 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Завдання 1.
Файл: `task_1.py`
Структури даних. Сортування. Робота з однозв'язним списком
## Завдання 2.
Файл: `task_2.py`
Рекурсія. Створення фрактала “дерево Піфагора” за допомогою рекурсії
## Завдання 3.
Файл: `task_3.py`
Дерева, алгоритм Дейкстри
## Завдання 4.
Файл: `task_4.py`
### Аналіз коду
**Цей код створює і візуалізує бінарне дерево за допомогою бібліотеки `networkx та matplotlib`, що допомагає візуально зрозуміти структуру дерева та його вузли.**
### Клас Node:
Визначає клас Node, який представляє вузол у бінарному дереві.
Кожен вузол має три атрибути:
- **left:** посилання на лівого нащадка.
- **right:** посилання на правого нащадка.
- **val:** значення, яке зберігається в вузлі.
- **color:** додатковий аргумент, що визначає колір вузла.
- **id:** унікальний ідентифікатор, що генерується за допомогою бібліотеки uuid, для ідентифікації кожного вузла.
#### Функція add_edges:
Додає зв'язки між вузлами дерева у граф networkx.
Рекурсивно викликається для кожного вузла та його нащадків.
При цьому, враховуються координати (x, y) вузлів для правильного розташування на графі.
#### Функція draw_tree:
Створює граф `networkx.DiGraph` та визначає початкові позиції для вузлів дерева.
Викликає `add_edges` для додавання зв'язків між вузлами.
Визначає кольори та мітки для вузлів.
Використовує `matplotlib` для візуалізації графа.
#### Створення та відображення дерева:
Створюється бінарне дерево з декількома вузлами.
Викликається функція draw_tree для візуалізації дерева.
## Завдання 5.
Файл: `task_5.py`
Візуалізація обходу бінарного дерева
## Завдання 6.
Файл: `task_6.py`
Жадібні алгоритми та динамічне програмування
**Жадібний алгоритм:** Вибирає страви на основі максимального співвідношення калорій до вартості, доки не буде вичерпано бюджет. Це швидкий і простий алгоритм, але не завжди дає оптимальне рішення.
**Алгоритм динамічного програмування:** Створює таблицю значень для кожного можливого бюджету і страви, щоб знайти максимальну калорійність. Це точний метод, але вимагає більше часу та пам'яті.
## Завдання 7.
Файл: `task_7.py`
Використання методу Монте-Карло
**Порівняння з аналітичними ймовірностями**
Результати, отримані методом Монте-Карло, будуть дуже близькі до аналітичних ймовірностей, особливо при великій кількості симуляцій. Графік допоможе наочно побачити цю відповідність.