Что такое алгоритм

Понятие алгоритма
Представим: захотелось приготовить любимое блюдо. У нас есть список ингредиентов и рецепт приготовления, то есть шаги, которые нужно выполнить, чтобы получилось именно то, что мы хотим. Нарушим последовательность — и наше любое блюдо уже не будет таким вкусным, забудем какой-то ингредиент — вообще все развалится!
Мы можем представить рецепт в виде схемы:
Начало (Мы очень хотим яичницу) → Взять сковородку → Взять масло → Налить масло в сковородку → Включить плиту → Разогреть масло → Взять яйцо → Разбить яйцо в разогретое масло → Довести до готовности → Выключить плиту → Переложить в тарелку → Конец (Наслаждаемся яичницей)
Рецепт тоже можно считать алгоритмом, но все же в жизни мы можем пропускать какие-то шаги, менять что-то на свой вкус. Компьютеры так не умеют: алгоритм становится как бы основой его работы.
Алгоритм — это четкий и последовательный набор шагов, которые нужно выполнить, чтобы решить какую-то задачу или достичь цели за определенное время.
Все процессы внутри компьютера подчиняются строгой последовательности, которую заложил разработчик.
Для чего нужны алгоритмы
схема, которую создает разработчик. В ней он описывает все шаги от начала до конца действия, указывая стрелками направление движения после каждого шага.
Пример:
Нам нужно, чтобы компьютер помог нам с умножением. Это действие можно описать следующим алгоритмом:
Начало → Ввести Х1 → Ввести Х2 → Выполнить действие Х1 * Х2 = Y → Вывести Y → Конец.
То есть нам нужно создать программу таким образом, чтобы при вводе Х компьютер понимал, что следующим действием наш икс нужно будет умножить на конкретное число, а после выводил нам результат.
А еще алгоритмы упрощают работу айтишникам. Многие схемы действия компьютеров уже давно известны и прописаны, достаточно взять уже готовый алгоритм, чтобы на его основе создать эффективную программу, способную быстро решать поставленные задачи.
Свойства алгоритмов
Представим, что нам нужно написать рецепт для компьютера. Чтобы машина нас понимала, алгоритм должен соответствовать определенным требованиям:
1) Понятность: каждый шаг должен быть четким и ясным и точно определенным, чтобы не вызывать у компьютера сомнений в интерпретации.
Нет: Добавить соль по вкусу.
Да: Добавить 0,05 г соли.
2) Конечность: алгоритм должен заканчиваться, а не повторяться бесконечно, иначе в нем не будет никакого смысла, ведь цель алгоритма решить поставленную задачу, а не вечность зависать над ней.
Нет: Жарить яичницу.
Да: Жарить яйцо 10 минут. Выключить плиту.
3) Наличие ввода и вывода: чтобы совершить какое-то действие и достичь результата, нужно определить исходные данные и пустить их в работу с помощью ввода, а в конце обязательно нужно получить результаты выводом (например на экран или на принтер)
Нет: Начать жарить яичницу → … → Закончить жарить.
Да: Взять 1 яйцо, 1 чайную ложку растительного масла, 0,05 г соли → … → Выложить готовую яичницу в тарелку.
4) Эффективность: алгоритм должен достигать цели с минимальными затратами времени и ресурсов, долгие запутанные алгоритмы будут тормозить работу компьютера и всех бесить.
Нет: Взять яйцо → Разбить яйцо в сковороду → Налить масла → Если нет масла, жарить без него → Если получилось, съесть яичницу → Если не получилось, выкинуть яичницу.
Да: Взять масло → Налить масло в сковородку → Взять яйцо → Разбить яйцо в сковороду → Жарить 10 минут → Выключить плиту → Выложить блюдо в тарелку.
5) Универсальность: алгоритм, созданный ради одного действия не будет эффективным, нужно чтобы по этой схеме можно было выполнить задачи с разными исходными данными.
Нет: Взять оливковое масло → Налить масло в сковородку с тефлоном → Взять перепелиное яйцо → Разбить перепелиное яйцо в сковороду → Жарить 10 минут → Выключить плиту → Выложить блюдо в тарелку.
Да: Взять масло → Налить масло в сковородку → Взять яйцо → Разбить яйцо в сковороду → Жарить 10 минут → Выключить плиту → Выложить блюдо в тарелку.
Виды алгоритмов
Алгоритмы бывают разными в зависимости от поставленной задачи Рассмотрим три основных вида: линейные, разветвляющиеся и циклические.
Линейные алгоритмы
Это самый простой вид алгоритмов, действия в которых выполняются последовательно, шаг за шагом, без отклонений.
Например, в бытовом плане примером такой схемы может быть чистка зубов:
- Возьми зубную щетку.
- Нанеси зубную пасту.
- Почисти зубы.
- Сполосни рот.
В компьютерном мире этот вид подойдет для простейшей операции из нашего прошлого примера с умножением:
Линейные алгоритмы встречаются редко, так как имеют ограниченный функционал. При работе современных компьютеров с множеством задач нужно больше универсальности.
Разветвляющиеся алгоритмы
Более популярный вариант — это разветвляющиеся алгоритмы, они позволяют выбирать между разными действиями в зависимости от условий.
Усложним наш пример с чисткой зубов до условия, что пасты может не оказаться.
- Возьми зубную щетку.
- Возьми тюбик пасты.
- Если пасты нет, закажи доставку.
- Если паста есть, нанеси зубную пасту.
- Почисти зубы.
- Сполосни рот.
Мы можем использовать такие примеры в программах, чтобы проверять условия и выдавать нужный результат при тех или иных вводных данных.
Например, в онлайн-школе есть курс подготовки к ЕГЭ для учеников 11-х классов. Это и будет условием. Если ученик вводит «11» при запросе, то ему открывается интересующий его курс, а счетчик фиксирует нового ученика. А если вводится что-то иное, то программа идет в обход нескольких шагов и переводит на выбор других курсов.
Циклические алгоритмы
Циклические алгоритмы повторяют одни и те же действия несколько раз пока не завершат установленный цикл своей работы.
Например, если брать наш случай с зубами, мы можем изобразить цикл в ополаскивании рта. Пока рот не будет чистым, ты будешь повторять это действие.
- Возьми зубную щетку.
- Нанеси зубную пасту.
- Почисти зубы.
- Сполосни рот.
- Если остатки пасты остались, сполосни еще раз.
- Если остатков пасты нет, можешь идти.
В программировании можно использовать циклы для разных задач.
Например, для счетчиков. Мы набираем курс на 100 учеников, это будет ограничением нашего счетчика. Каждый раз при нажатии кнопки «Записаться» он будет прибавлять к текущему значению 1, пока не дойдет до этого ограничения.
Графическое изображение алгоритмов
Чтобы лучше понять и показать алгоритмы, люди часто используют блок-схемы. Это специальные картинки, где каждый шаг алгоритма представлен в виде блока соединенного стрелками. Рассказываем, какие блоки за что отвечают:
Это основные элементы блок-схем, есть и другие, для более сложных алгоритмов. Во всеми можно ознакомиться в документе межгосударственного стандарта ГОСТ 19.701-90.
Попробуем собрать наши примеры разных видов алгоритмов в удобные блок-схемы.
Линейный алгоритм
Разветвляющиеся алгоритм
Циклический алгоритм
Лайфхак: создавать блок-схемы своих алгоритмов можно в гугл-доках в разделе «Insert» — «Drawing».
Проверь себя
Алгоритм — это
– частота выполнения задач компьютером;
– набор арифметических действий, которые совершает компьютер;
– набор последовательных шагов для решения задач за определенное время.
Какого вида алгоритмов не существует?
– разветвляющий;
– классический;
– циклический.
Каким должен быть алгоритм?
– четким, конечным, эффективным и универсальным;
– четким, бесконечным, эффективным и универсальным;
– бесконечным и неоднозначным.