Наша жизнь — это череда следующих друг за другом дней, которые мы проживаем, даже не задумываясь над тем, что делаем многие вещи по установленным кем-то правилам, выполняем различные действия по написанным инструкциям или чьим-либо указаниям. Почти все наши поступки — это выполнение конкретной пошаговой программы, придуманной кем-либо. Например:
•делаем себе по утрам бутерброд так, как показывала мама;
•переходим дорогу на пешеходном перекрёстке именно так, как учил папа;
•в школе выполняем деление в столбик так, как учила учительница математики;
•пользуемся новым пылесосом так, как написано в инструкции по его эксплуатации.
Конечно, иногда бывает так, что чему-то вы можете (или вынуждены) научиться сами, без чьей-либо помощи или подсказки. Представьте себе такую ситуацию: вы поехали в летний лагерь и вам нужно постирать носки. Вы этого раньше никогда не делали, потому что этим занималась мама. Сейчас мамы рядом нет, научить нас некому, написанных инструкций тоже нет, а спросить вы стесняетесь. Поэтому стирать носки будете сами.
Сначала вы продумываете последовательность действий и только потом начинаете стирать. После нескольких попыток, иногда не совсем удачных, вы определите, какие действия, и в каком порядке следует выполнять, чтобы после стирки носки выглядели достойно. Вскоре на собственном опыте, методом проб и ошибок, вы научитесь быстро и чисто стирать носки (чему мама будет приятно удивлена). Это станет для вас несложным делом, которое вы будете делать, не задумываясь, привычными механическими движениями. Однако, чтобы научить этому младшего брата, придётся чётко разъяснить ему и эти действия, и порядок их выполнения. Знаете, что вы сделали? Вы написали алгоритм стирки носков!
Минутка истории
Слово «алгоритм» происходит от латинской транскрипции имени известного математика Востока Мухаммеда Аль-Хорезми ( Algorizmi или Algorizmus ), который в IX веке в книге «Об индийском счёте» сумел чётко описать правила записи натуральных чисел с использованием арабских цифр и выполнения простых арифметических действий с ними.
А так как это сочинение об арифметике было очень популярно в Европе, имя автора стало нарицательным — средневековые европейские математики так называли арифметику, основанную на десятичной системе счисления. Позднее так называли всякую систему вычислений по определённому правилу, теперь этот термин означает предписание, определяющее порядок выполнения действий с целью получения конкретных результатов.
Алгоритм — описание последовательности действий (план), строгое исполнение которых приводит к решению поставленной задачи за определённое число шагов. Мы постоянно сталкиваемся с понятием «алгоритм» в различных сферах деятельности человека (кулинарные книги, инструкции по использованию различных приборов, правила решения математических задач и т. д.). Мир алгоритмов очень разнообразен, но, несмотря на это, все алгоритмы обладают общими свойствами.
Свойства алгоритмов
- Дискретность (разделённость, прерывистость) — алгоритм должен состоять из конкретных действий, следующих в определённом порядке. Каждое действие, предусмотренное алгоритмом, исполняется только после того, как за-кончилось исполнение предыдущего. Перестановка некоторых пунктов алгоритма может сделать его неразумным или вовсе бессмысленным. Нарушая порядок действий алгоритма, мы рискуем либо не достичь поставленной цели, либо получить совсем другой результат, порой очень плачевный.
2. Детерминированность (определённость, точность) — любое действие должно быть чётким, однозначным и не оставлять исполнителю места для произвола или творчества. Например, в действии 3 алгоритма стирки носков можно было бы написать «Набрать в таз воду». Это означало бы, что для стирки подойдёт и горячая вода (но тогда можно обжечься), и холодная (тогда носки хуже постираются). Благодаря детерминированности выполнение алгоритма носит механический хаpактеp и не требует никаких дополнительных указаний
3. Результативность (конечность) — это значит, что исполнение алгоритма должно завершиться за конечное число шагов и привести к решению задачи (либо пониманию того, что задача не имеет решения). В алгоритме стирки носков наши носки постираны за 14 шагов.
4. Массовость (универсальность) — один и тот же алгоритм можно использовать для решения всего класса задач данного типа. Алгоритм стирки носков обладает этим свойством, потому что он составлен так, чтобы им мог воспользоваться любой исполнитель (мальчик или девочка, взрослый или ребёнок) и применим для стирки разных носков — взрослых и детских, мужских и женских, белых и цветных.
Если алгоритм обладает всеми этими свойствами, то, выполняя его, исполнитель может не вникать в смысл того, что он делает, и вместе с тем получать нужный результат. Дайте младшему брату в руки носки и алгоритм стирки носков, не объясняя ему ничего. Если он в точности исполнит его, он постирает носки, даже не вникая в смысл того, что он делает. В таком случае говорят, что исполнитель действует формально.
Субъект или объект, которому не обязательно вникать в суть алгоритма, называется формальным исполнителем. Задача любого исполнителя — максимально точная реализация алгоритма, при этом исполнитель не должен (а зачастую даже не способен) понимать сути выполняемого процесса. Формальным исполнителем можно назвать стиральную машину, которая выполнит заданную программу стирки даже в отсутствие стирального порошка или белья в баке.
Виды алгоритмов
Линейный алгоритм — алгоритм, описывающий действия (шаги), которые выполняются однократно, одно за другим в за-данном порядке. Алгоритм стирки носков является примером линейного алгоритма.
Разветвляющийся алгоритм — алгоритм, в котором сначала проверяется определённое условие, и в зависимости от результатов проверки выполняется либо одна, либо другая последовательность действий. Алгоритм стирки носков станет разветвляющимся, если у нас есть возможность стирать носки не только вручную, но и в стиральной машине. Если мы выберем ручную стирку, то наши действия пойдут по одной ветви (которая в свою очередь будет линейным алгоритмом). Если же мы будем стирать носки в стиральной машине, то наши действия пойдут по другой ветви (которая будет выполнять команды, описанные в инструкции к стиральной машине).
Циклический алгоритм — алгоритм, предусматривающий повторение одного и того же действия (или действий) указанное число раз или до тех пор, пока не выполнено заданное условие. Наш алгоритм станет циклическим, если нам нужно будет постирать не одну, а несколько пар носков. В этом случае действия с 4 по 8 будут повторяться столько раз, сколько пар носков мы будем стирать. Даже из таких простых примеров становится ясно, что создание алгоритма требует творческого подхода, поэтому его может создать только человек. А вот для исполнения уже существующих инструкций фантазию иметь не обязательно, с этим справится даже бездушная техника.
Зачем нужны алгоритмы?
Применение алгоритмов позволяет быстро решать однотипные задачи, сократить время на поиск решения и автоматизировать процесс его нахождения. Алгоритмы применяются во всех сферах человеческой жизни. Вот самые новые из них:
- Электронная очередь в банках и госучреждениях. Она ускоряет продвижение очереди и позволяет избегать конфликтных ситуаций.
- Осуществление коммунальных платежей через систему платёжных автоматов либо по интернету, не выходя из дома.
- Покупки по интернету.
- Нахождение по карте оптимального маршрута передвижения из одной точки в другую, с указанием километража и даже номера автобуса.
- Бронирование и покупка online билетов (отели, любые средства передвижения)
Можете ли вы представить себе, как выглядят алгоритмы, описывающие эти процессы? Это очень сложные, многоуровневые системы, представляющие собой комбинацию линейных, разветвляющихся и циклических алгоритмов. И, чтобы написать этот алгоритм, нужно быть человеком недюжинного ума.
Этой сложной, но очень интересной, и к тому же хорошо оплачиваемой работой занимаются программисты, которые описывают эти алгоритмы на языках программирования, понятных компьютерами другой автоматизированной технике. Таким образом, не только обычные человеческие будни состоят из алгоритмов, но и высокотехнологичные и интеллектуальные продукты — это также результат создания и исполнения алгоритма.
Заглавное изображение: Unsplash