Найти тему

Алгоритмы простым языком или причем тут торт?

страшные строки кода...
страшные строки кода...

Рассказать в первом посте об алгоритмах? Пожалуйста...

Для начала стоит представиться. На двоичном коде меня зовут 10000000 10001011 10001000 10001101 10000000, и я программист. Не только по профессии и навыку, но и по своей натуре. Как это? Всё очень просто. Всё вокруг нас это код. И я вижу мир как один большой алгоритм, работающий логично, рационально и слаженно, пускай и с исключениями и багами. Все человеческие действия представляют из себя стандартные алгоритмы, имеющие разные виды.

собственно какие алгоритмы бывают
собственно какие алгоритмы бывают

Пускай, это абсурдно, но всё в этой жизни подчиняется этой самой системе алгоритмов.

Если говорить по-научному, то алгоритм - конечная совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения определённой задачи. И название происходит от имени среднеазиатского математика Аль-Хорезми.

тот самый Аль-Хорезми
тот самый Аль-Хорезми

Кстати, от его имени также произошло название алгебра :D

Но всё вышеизложенное это по-научному. А у нас алгоритмы простым языком, а лучший способ объяснения - пример из реальной жизни. Ну начнём развивать гипотезу, что вся наша жизнь это алгоритмы, алгоритмы и алгоритмы...

Например, возьмём самый простейший цикл в жизни каждого человека - школу. Каждые пять (а то и шесть) дней в неделю повторяется одно и то же, пока не выполняется условие с окончанием программы 11 класса и сдачей экзаменов (ну или 9, у кого как). Да это же тот самый алгоритм с повторением из схемы выше, не так ли?

Пока [экзамены не сданы]: Посещай школу с понедельника по пятницу (/субботу)

А тем временем мы начинаем медленно подходить к созданию "торта", и этот циклический алгоритм станет его основой. Но разве в жизни мы едим сухие бисквитные коржи? Так и с данным алгоритмом - "реальная" школа намного сложнее и содержит в себе много нюансов.

Кстати интересный факт - в Швеции школьникам платят 187$ всего лишь за то, что они посещают школу.
Кстати интересный факт - в Швеции школьникам платят 187$ всего лишь за то, что они посещают школу.

Поэтому наш пирог требует преобразований.

Теперь усложним алгоритм, приблизив его к реальной жизни. Что есть в школе, помимо классических зацикленных уроков? Правильно - самостоятельные и контрольные. Данные моменты происходят не постоянно, а при прохождении какой-то темы или выполнении другого определенного условия, которое заранее обозначается, поэтому внутрь нашего основного цикла следует добавить кусок кода, который будет являться алгоритмом с ветвлением. А именно:

  • Если [Тема 2 изучена] : напиши контрольную работу
  • Иначе: продолжи изучение темы 2

Можно добавить и другие условия при выполнении которых будут выполняться другие действия. Это был крем для нашего торта.

Кстати, несколько столетий назад тортом называли круглый хлеб – толстую лепешку, которая хорошо пропекалась с обеих сторон.
Кстати, несколько столетий назад тортом называли круглый хлеб – толстую лепешку, которая хорошо пропекалась с обеих сторон.

И кажется, что уж с циклом и содержащимися внутри другими циклами и ветвлениями наш алгоритм обычной школьной жизни во многом идентичен настоящему. Да только остался последний тип алгоритмов, проявления которого есть в обоих предыдущих.

Речь идёт о линейном алгоритме, когда действия выполняются строго одно за другим и не ветвятся или не повторяются. Это будет верхушкой нашего торта, хотя справедливо было бы сделать линейный его основной, потому что чаще всего именно на линейном всё строится, а циклы/ветвления его дополняют. Хотя можно сказать и принципиально обратное, ситуации бывают разные.

Итак, в качестве представления линейного алгоритма послужит кусок нашей программы, который продолжает наше ветвление с проведением самостоятельной или контрольной работы. А конкретнее:

Если [Тема 2 изучена]: (НЕ написать контрольную работу, а следующее)

* Возьми двойной листочек *Возьми лист с заданием *Выполни задания *Сдай работу

Это и будет являться классическим линейным алгоритмом, пускай и расположенными внутри алгоритма с ветвлением. И это и были те самые ягоды на верхушке торта.

В заключение, следует сказать, что именно так и реализуются компьютерные игры и модели поведения ИИ. Конечно, там много сложностей и нюансов, но начинается всё с именно простого. Подытожу сказанное, кратко и по-научному описав каждый вид алгоритмов:

Линейный алгоритм – описание действий, которые выполняются однократно в заданном порядке.

Алгоритм с ветвлением (разветвляющийся) — это алгоритм, в котором в зависимости от некоторого условия выполняется либо одно действие, либо другое.

Циклический алгоритм – описание действий, которые должны повторяться указанное число раз или пока не выполнено заданное условие.