Запишитесь на мой онлайн курс «Программирование с нуля» www.pylot.me/
Прохождение интервью в первый раз когда ты ищешь работу на позицию начинающего разработчика сложно и страшно. Я пригласил Игоря который недавно прошел Python курсы и теперь планирует устроиться на работу. И провел с ним детальное интервью как с начинающим программистом. Мы сделали полный разбор вопросов которые чаще всего задают людям ищущим работу python программиста.
курс: Информатика. Алгоритмы и структуры данных на Python 3.
лектор: Хирьянов Тимофей Фёдорович
24.10.2017
Темы, рассмотренные на лекции №8:
— Генерация комбинаторных объектов.
— Рекурсивная генерация всех чисел длины M.
— Генерация всех перестановок (рекурсивная).
— Быстрые сортировки: Тони Хоара и слиянием (без реализации).
Я расскажу о том, как получить невероятно сложные и красивые фракталы, как замоделировать молнию, рост плесени и броуновское движение, а также расскажу, по каким правилам растут папоротники. Уверяю: это перевернёт ваше представление о природе!
Для построения множества Жюлиа понадобится небольшая формула над комплексными числами! Вместо того, чтобы сразу разбирать полную формулу, я предлагаю сначала занулить константу C.
Понятно, что если точки находятся внутри единичного круга, то они должны притянуться к центру. Точки, которые находятся вне единичной окружности будут отдалятся от нуля.
Точки, находящиеся на границе окружности, будут оставаться на границе.
Нас интересуют только такие точки плоскости, которые не уходят на бесконечность. Понятно, что для данной формулы множество таких точек – это круг радиуса 1.
А что теперь будет, если в формулу добавить очень маленькую константу C и постепенно увеличивать её по модулю. Если немного подождать, то мы увидим уже знакомое нам множество Мандельброта. При некоторых параметрах фрактал разделяется на небольшие островки, которые то образуются, то опять комбинируются в единое целое.
Увеличивая границу этого множества, мы будем видеть все больше и больше мелких деталей. Каждая отдельная часть содержит бесконечное множество вариаций исходного фрактала.
Одна компактная формула способна породить целую вселенную с бесконечно сложными циклонами, причудливыми иглами, острыми вилами, полувилами, супервилами, тайфунами, небоскребами, океанами, долинами морских коньков и долинами слонов.
Вместо второй степени можно выбрать любую: третью, четвёртую, пятую, восьмую и даже дробную.
Фракталы можно строить в трехмерном, четырёхмерном или даже в пятисотмерном пространстве.
Для более высоких размерностей используют уже не комплексные числа, а, например, кватернионы. Это не пары чисел, а группы по 4 числа.
Каждый трехмерный фрактал, полученный той или иной формулой, – это сечение четырёхмерного множества. Для алгебры октав или Клиффорда эта область математики на данный момент изучена мало.
Во многих областях физики можно встретить фракталы. Один из самых известных примеров – движение Броуновской частицы. Если подождать достаточно долго, то можно увидеть, что траектория движения броуновской частицы самоподобна.
На этом фрактальность не заканчивается. Представьте теперь, что частицы движутся и могут прилипать к статичной затравочной частице в центре. Сначала мы с некоторого радиуса с произвольной стороны выпускаем частицу. Если она оказалась рядом с затравочной, то она к ней прилипнет. После этого мы опять выпускаем частицу и ждем её прилипания.
Постепенно налипает все больше и больше частиц. Образуется структура, называемая кластером.
Частицы, двигаясь по фрактальным траекториям, прилипают друг к другу и образуют фрактальный кластер.
Можно ввести вероятность прилипания и сделать её тем выше, чем больше соседей вокруг.
Забавная структура, да ещё и очень похожа на то, что мы наблюдаем в реальном эксперименте при химической агрегации DLA кластеров.
Коронный разряд — очень красивое явление, которое тоже является фракталом! С помощью уравнения Лапласа можно смоделировать распространение молнии.
При изменении свойств среды, в которой распространяется молния, изменяется ветвистость структуры.
Возьмем три любые точки на плоскости. Теперь нужно выбрать произвольную точку и много раз делать простую процедуру. Выберем одну из трех зафиксированных нами точек и сместимся в её сторону на половину расстояния до неё.
Так мы будем делать снова и снова. Получившаяся фигура называется треугольником Серпинского: это один из самых популярных фракталов.
То есть мы случайно смещались в сторону одной из вершин треугольника и получили такой фантастический результат.
Это работает не только с треугольником.
Можно задать другое правило: en.wikipedia.org/wiki/Barnsley_fern
Если запрограммировать это правило, то получится папоротник Барнсли. Каждое из этих четырех правил отвечает за рост его отдельных частей.
Достаточно четырёх преобразований для хранения всех возможных комбинаций папоротников.
Поэтому фракталы уже давно применяют в компьютерной графике для генерации миров в играх. Они получаются очень интересными и разнообразными.
Вот такая интересная бывает математика.
Огромная благодарность всем моим спонсорам на patreon!