Рассказать в первом посте об алгоритмах? Пожалуйста...
Для начала стоит представиться. На двоичном коде меня зовут 10000000 10001011 10001000 10001101 10000000, и я программист. Не только по профессии и навыку, но и по своей натуре. Как это? Всё очень просто. Всё вокруг нас это код. И я вижу мир как один большой алгоритм, работающий логично, рационально и слаженно, пускай и с исключениями и багами. Все человеческие действия представляют из себя стандартные алгоритмы, имеющие разные виды.
Пускай, это абсурдно, но всё в этой жизни подчиняется этой самой системе алгоритмов.
Если говорить по-научному, то алгоритм - конечная совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения определённой задачи. И название происходит от имени среднеазиатского математика Аль-Хорезми.
Кстати, от его имени также произошло название алгебра :D
Но всё вышеизложенное это по-научному. А у нас алгоритмы простым языком, а лучший способ объяснения - пример из реальной жизни. Ну начнём развивать гипотезу, что вся наша жизнь это алгоритмы, алгоритмы и алгоритмы...
Например, возьмём самый простейший цикл в жизни каждого человека - школу. Каждые пять (а то и шесть) дней в неделю повторяется одно и то же, пока не выполняется условие с окончанием программы 11 класса и сдачей экзаменов (ну или 9, у кого как). Да это же тот самый алгоритм с повторением из схемы выше, не так ли?
Пока [экзамены не сданы]: Посещай школу с понедельника по пятницу (/субботу)
А тем временем мы начинаем медленно подходить к созданию "торта", и этот циклический алгоритм станет его основой. Но разве в жизни мы едим сухие бисквитные коржи? Так и с данным алгоритмом - "реальная" школа намного сложнее и содержит в себе много нюансов.
Поэтому наш пирог требует преобразований.
Теперь усложним алгоритм, приблизив его к реальной жизни. Что есть в школе, помимо классических зацикленных уроков? Правильно - самостоятельные и контрольные. Данные моменты происходят не постоянно, а при прохождении какой-то темы или выполнении другого определенного условия, которое заранее обозначается, поэтому внутрь нашего основного цикла следует добавить кусок кода, который будет являться алгоритмом с ветвлением. А именно:
- Если [Тема 2 изучена] : напиши контрольную работу
- Иначе: продолжи изучение темы 2
Можно добавить и другие условия при выполнении которых будут выполняться другие действия. Это был крем для нашего торта.
И кажется, что уж с циклом и содержащимися внутри другими циклами и ветвлениями наш алгоритм обычной школьной жизни во многом идентичен настоящему. Да только остался последний тип алгоритмов, проявления которого есть в обоих предыдущих.
Речь идёт о линейном алгоритме, когда действия выполняются строго одно за другим и не ветвятся или не повторяются. Это будет верхушкой нашего торта, хотя справедливо было бы сделать линейный его основной, потому что чаще всего именно на линейном всё строится, а циклы/ветвления его дополняют. Хотя можно сказать и принципиально обратное, ситуации бывают разные.
Итак, в качестве представления линейного алгоритма послужит кусок нашей программы, который продолжает наше ветвление с проведением самостоятельной или контрольной работы. А конкретнее:
Если [Тема 2 изучена]: (НЕ написать контрольную работу, а следующее)
* Возьми двойной листочек *Возьми лист с заданием *Выполни задания *Сдай работу
Это и будет являться классическим линейным алгоритмом, пускай и расположенными внутри алгоритма с ветвлением. И это и были те самые ягоды на верхушке торта.
В заключение, следует сказать, что именно так и реализуются компьютерные игры и модели поведения ИИ. Конечно, там много сложностей и нюансов, но начинается всё с именно простого. Подытожу сказанное, кратко и по-научному описав каждый вид алгоритмов:
Линейный алгоритм – описание действий, которые выполняются однократно в заданном порядке.
Алгоритм с ветвлением (разветвляющийся) — это алгоритм, в котором в зависимости от некоторого условия выполняется либо одно действие, либо другое.
Циклический алгоритм – описание действий, которые должны повторяться указанное число раз или пока не выполнено заданное условие.