Роль алгоритма в программировании

Слово «алгоритм» вы наверняка слышали, хотя бы от блогеров на YouTube, сетующих на них. На самом деле, это не таинственная сила, а одно из основных понятий в айти-технологиях. Объясняю простыми словами, на пальцах, как все работает.

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

Все просто — это любая техническая последовательность действий. Для понимания, что такое алгоритм, приведу пример из жизни. Допустим, вы захотели попить чай. Чтобы налить себе чаю, нужно выполнить примерно такой цикл:

  1. Взять кружку.
  2. Подойти к столу.
  3. Включить чайник.
  4. Вскипятить воду.
  5. Положить в чашку чай.
  6. Налить кипяток.

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

Что такое алгоритм в информатике? То же самое, но записанное на машинном языке компьютера: самообучающаяся программа, нейросеть, искусственный интеллект, робот.

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

Причем алгоритм в информатике ‒ это инструкция, написанная на языке программирования, который будет понятен исполнителю.

Свойства алгоритмов

Важно понимать: именно параметры определяют, алгоритм перед вами или, например, формула. Теперь перейду к характеристикам.

Дискретность. Слово означает «прерывистый, разделенный». Подразумевает, что алгоритм состоит из маленьких последовательных, неразрывно связанных друг с другом шагов, вытекающих одно из другого. То есть следующее действие невозможно без завершения предыдущего.

Наличие ввода. Чтобы алгоритм начал работать, в него нужно ввести данные: массив чисел, запрос, действие пользователя. Важным свойством выступает конечность.

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

Закономерность. Проще говоря, это определенность, понятность, четкость инструкций, чтобы исполнитель все понял и не допустил ошибок.

Универсальность. Важно, чтобы алгоритм можно было перевести на любой язык программирования (Python, Java Script).

Эффективность. Чем быстрее алгоритм справляется с задачей, чем он лаконичнее, изящнее ‒ тем лучше. Если скорость работы падает, в зависимости от массива данных ‒ это считается неэффективным.

Алгоритмы состоят из набора конкретных действий. Они обладают вводом и выводом, результативны, определенны и понятны, универсальны, эффективны. Эти свойства расширяют понятие алгоритма, отличают его от инструкции или уравнения.

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

Виды алгоритмов

Существует несколько классификаций, далее раскрываю каждую их них.

  1. По конструкции: линейные, разветвленные, циклические, рекурсивные.
  2. По типу задач: сетевые, поисковые, сортировочные, строковые, численные.
  3. По точности результатов: нормальные, вероятностные.
  4. По месту в структуре: основные, вспомогательные.

Наиболее распространенная ‒ первая, о ней расскажу подробнее. В чистом виде типы алгоритмов не встречаются. Они работают взаимосвязано и помогают решать задачи.

Типы алгоритмов по конструкции

Привожу описание типологии по порядку.

Линейные. Это алгоритмы с простой последовательностью действий. Например, программа, которая переводит сумму, написанную прописью, в цифры. Нужно сначала ввести цифры прописью, трансформировать их в числовое выражение, потом вывести на экран пользователю.

Разветвленные. Пример из жизни: когда при входе на сайт просят подтвердить возраст или блокируют доступ, если нет восемнадцати лет.

В упрощенном варианте он выглядит так: введение возраста; если посетителю меньше восемнадцати — вывод окна блокировки, если больше ‒ вывод приветствия «Добро пожаловать». Ветвиться алгоритм может сколь угодно сложно.

Циклические. С повторяющимися наборами команд, иногда ограниченными. Как пример: сбор ресурсов в компьютерной игре. Однообразные шаги пока игрок не насобирает нужное количество припасов.

Рекурсивные. Используются в математике, например, для вычисления степеней. Суть: алгоритм воспроизводит сам себя, но вводные другие. Пользователь вводит число ‒ получает его же, возведенное в нужную степень.

Можно решить эту задачу циклическим алгоритмом (умножать определенное количество раз), рекурсия будет быстрее, но потребует большого объема памяти программы.

Классификация по сложности

Важный показатель, позволяющий узнать, хорошо ли будет работать алгоритм. Ложность обозначается большой буквой О и разграничивается так (самые распространенные):

  1. О (1) ‒ алгоритм завершится за четко отведенное время. Самый выигрышный по эффективности вариант.
  2. О (n) ‒ линейное соотношение данных, чем их больше ‒ тем дольше работа.
  3. О (n²) ‒ квадратичная зависимость от количества показателей.
  4. О (log n) ‒ логарифмическая. Быстрее предыдущей.
  5. О (√n) ‒ отталкивается от корня суммы введенных чисел. Лучше, чем О(n), но уступает последней.

Теперь вы знаете, как классифицируются алгоритмы по уровню задач.

Как записываются алгоритмы

Важное условие создания рабочего алгоритма: записать его таким образом, чтобы разработчик понял, как внедрять, независимо от используемого им языка программирования. Это достигается двумя методами: графическая запись (блок-схемы) или псевдокод.

Что такое блок-схема

Запись алгоритма с помощью рисунка, соединенного чередой геометрических объектов, где каждый обозначает определенную деталь кода. Значение фигур фиксированное:

  • скругленный прямоугольник ‒ начало или конец программы;
  • косой прямоугольник ‒ ввод или вывод данных;
  • обычный четырехугольник ‒ арифметические операции;
  • ромб ‒ условие;
  • шестиугольник ‒ цикл со счетчиком;
  • четырехугольник с волнистой линией ‒ ввод или вывод в файл;
  • стрелки ‒ последовательность действий.

Такие схемы вы могли видеть на уроках информатики, и сейчас их можно посмотреть во вкладке «Рисунки» в Microsoft Word.

Что такое псевдокод

Это условный код, помогающий увидеть алгоритм действий без тонкостей, связанных с конкретным языком программирования. Он встречается в учебниках по информатике. В отличие от графических изображений, четко определенных значений нет.

Где используются алгоритмы

Практически везде, где нужна обработка информации. Например:

  1. При разработке программ и сайтов с мелкими деталями интерфейса, символами.
  2. Работа с данными, их сортировка, удаление, изменение, добавление новых вводных.
  3. Поисковые (крупные поисковые сервисы свои алгоритмы обычно не разглашают).
  4. Для обучения искусственного интеллекта, нейросетей.

На последнем остановлюсь подробнее, тема животрепещущая. Особенность нейросетей: они сами создают алгоритм, обучаясь на ходу.

Программист формирует только модель, начальные данные, пример конечного результата. Благодаря этому, нейросети могут создавать алгоритмы, которые по подробности значительно превышают написанные человеком.

Удалось ли понять, что такое «алгоритм»? Есть ли у вас что дополнить на эту тему? Делитесь своим опытом в комментариях. Остались вопросы – задавайте. Буду рад помочь!