Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс / Курсовая работа.docx
Скачиваний:
0
Добавлен:
26.01.2026
Размер:
410.5 Кб
Скачать

Лабораторная работа №5 «Рекурсия. Фракталы.» Вариант №10 «Салфетка Серпинского»

Цель работы

Реализовать генерацию фрактала "Салфетка Серпинского" с использованием рекурсивных функций на Python. Исследовать зависимость времени выполнения от глубины рекурсии.

Ход выполнения:

Салфетка Серпинского - классический фрактал, который строится путем рекурсивного деления равностороннего треугольника на 4 меньших треугольника и удаления центрального.

Математическая основа:

  • На каждом шаге рекурсии треугольник делится на 3 части

  • Глубина рекурсии определяет детализацию фрактала

  • Количество элементов растет как 3^n, где n - глубина рекурсии

Глубина рекурсии 1:

Глубина рекурсии 3:

Глубина рекурсии 4:

Глубина рекурсии 5:

Код программы:

import turtle import time import sys class Sierpinski: def __init__(self): self.count = 0 self.time = 0 self.turtle = turtle.Turtle() self.screen = turtle.Screen() self.screen.title("Салфетка Серпинского") self.screen.setup(width=800, height=800) self.turtle.speed(0) self.turtle.hideturtle() def draw_triangle(self, points, color): self.turtle.fillcolor(color) self.turtle.up() self.turtle.goto(points[0][0], points[0][1]) self.turtle.down() self.turtle.begin_fill() self.turtle.goto(points[1][0], points[1][1]) self.turtle.goto(points[2][0], points[2][1]) self.turtle.goto(points[0][0], points[0][1]) self.turtle.end_fill() def get_mid(self, p1, p2): return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2) def sierpinski(self, points, depth): self.count += 1 colors = ['blue', 'red', 'green', 'white', 'yellow', 'violet', 'orange'] self.draw_triangle(points, colors[depth % len(colors)]) if depth > 0: self.sierpinski([points[0], self.get_mid(points[0], points[1]), self.get_mid(points[0], points[2])], depth - 1) self.sierpinski([points[1], self.get_mid(points[0], points[1]), self.get_mid(points[1], points[2])], depth - 1) self.sierpinski([points[2], self.get_mid(points[2], points[1]), self.get_mid(points[0], points[2])], depth - 1) def run(self, depth): self.count = 0 self.screen.clear() self.turtle.reset() self.turtle.speed(0) self.turtle.hideturtle() start_time = time.time() points = [[-350, -300], [0, 350], [350, -300]] self.sierpinski(points, depth) self.time = time.time() - start_time print(f"Глубина: {depth}, Время: {self.time:.2f} сек, Вызовов: {self.count}") self.screen.update() if __name__ == "__main__": fractal = Sierpinski() depths = [1, 3, 4, 5] for d in depths: fractal.run(d) fractal.screen.textinput("Продолжить", f"Глубина {d} завершена. Нажмите OK для продолжения") fractal.screen.exitonclick()

Вывод программы:

Глубина: 1, Время: 0.53 сек, Вызовов: 4

Глубина: 3, Время: 5.91 сек, Вызовов: 40

Глубина: 4, Время: 16.82 сек, Вызовов: 121

Глубина: 5, Время: 55.75 сек, Вызовов: 364

Список литературы:

Кормен, Т. Алгоритмы: построение и анализ / Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн. — 3-е изд. — М.: Вильямс, 2019. — 1328 с.

Скиена, С. С. Алгоритмы. Руководство по разработке / С. С. Скиена. — 2-е изд. — СПб.: БХВ-Петербург, 2019. — 720 с.

Кнут, Д. Э. Искусство программирования. Том 3. Сортировка и поиск / Д. Э. Кнут. — 2-е изд. — М.: Вильямс, 2020. — 832 с.

GeeksforGeeks. Heap Sort [Электронный ресурс]. — URL: https://www.geeksforgeeks.org/heap-sort/

GeeksforGeeks. QuickSort [Электронный ресурс]. — URL: https://www.geeksforgeeks.org/quick-sort/

GeeksforGeeks. Hashing | Set 2 (Separate Chaining) [Электронный ресурс]. — URL: https://www.geeksforgeeks.org/hashing-set-2-separate-chaining/

Wikipedia. Хэш-таблица [Электронный ресурс]. — URL: https://ru.wikipedia.org/wiki/Хэш-таблица

Real Python. Hash Tables in Python [Электронный ресурс]. — URL: https://realpython.com/python-hash-table/

GeeksforGeeks. KMP Algorithm for Pattern Searching [Электронный ресурс]. — URL: https://www.geeksforgeeks.org/kmp-algorithm-for-pattern-searching/

Wikipedia. Алгоритм Кнута — Морриса — Пратта [Электронный ресурс]. — URL: https://ru.wikipedia.org/wiki/Алгоритм_Кнута_—_Морриса_—_Пратта

Real Python. String Searching Algorithms in Python [Электронный ресурс]. — URL: https://realpython.com/python-string-search/

Python Documentation [Электронный ресурс]. — URL: https://docs.python.org/3/

LeetCode. Algorithms Problems [Электронный ресурс]. — URL: https://leetcode.com/problemset/algorithms/

Coursera. Algorithms Specialization [Электронный ресурс]. — URL: https://www.coursera.org/specializations/algorithms

Хабр. Алгоритмы и структуры данных [Электронный ресурс]. — URL: https://habr.com/ru/hub/algorithms/

Бхаргава, А. Грокаем алгоритмы / А. Бхаргава ; пер. с англ. А. А. Слинкина. — Санкт-Петербург : Питер, 2022. — 288 с. : ил. — ISBN 978-5-4461-2033-6.

Лафоре, Р. Структуры данных и алгоритмы в Java / Р. Лафоре ; пер. с англ. В. А. Ковалева. — 2-е изд. — Москва : Вильямс, 2020. — 704 с. — ISBN 978-5-8459-2102-4.

Соседние файлы в папке 4 курс