Мы сталкиваемся с алгоритмами каждый день, от заваривания утреннего кофе до просмотра ленты перед сном. Разбираемся, как устроены эти невидимые инструкции и почему без них не работает современный цифровой мир
Содержание:
- Что такое
- Алгоритмы в программировании
- Свойства алгоритмов
- Виды алгоритмов
- Способы записи
- Станут ли алгоритмы совершеннее человека
Что такое алгоритм
Нравится РБК? Главные новости дня, эксклюзивы и аналитика ждут вас:
на радио
в подписке
в Max
в Telegram
в приложениях для Android или iOS
Алгоритм — это последовательность действий, выполнение которых приводит к достижению конкретной цели или решению поставленной задачи [1]. Мы постоянно действуем по алгоритмам в реальной жизни: собираем шкаф по инструкции, решаем уравнение в школе или едем на автомобиле по навигатору. Например, алгоритм приготовления омлета выглядит так: достать яйца из холодильника, разбить их в чашку, добавить молоко, взбить, включить плиту, поставить сковороду, налить масло, вылить смесь, подождать несколько минут, перевернуть, выключить плиту.
Слово «алгоритм» произошло от имени персидского математика IX века Мухаммада ибн Мусы аль-Хорезми, который сформулировал правила выполнения арифметических действий. В латинском переводе его имя звучало как Algoritmi, от которого образовалось слово algorismus (оно сначала означало просто «десятичная система счисления» или «арифметика по индийскому методу»). Затем под влиянием греческого arithmos (число) и по аналогии со словом «логарифм» в XVII веке закрепилась форма algorithm. К концу XIX века термин приобрел современное значение «набор правил для решения задачи» [2].
Алгоритмы в программировании
Если в быту люди могут отклониться от рецепта (например, добавить соль на глаз), то компьютерам эта опция пока недоступна [3]. Устройства воспринимают предельно точные и однозначные команды, а затем действуют только по ним.
В программировании алгоритм выступает связующим звеном между проблемой и написанным кодом [4]. Перед тем как создать код на Python, Java или C++, IT-специалист должен придумать алгоритм — логическую схему того, как именно программа будет обрабатывать данные.
Любой вычислительный алгоритм работает по схеме из трех этапов [5]:
- Ввод данных (Input): получение информации извне (нажатие кнопки, массив чисел, текст).
- Обработка (Processing): выполнение логических и математических операций над полученными данными.
- Вывод (Output): предоставление готового результата (сообщение на экране, отсортированный список).
Например, алгоритм навигатора получает координаты и адрес назначения (ввод), перебирает все доступные дороги с учетом пробок (обработка) и накладывает маршрут на карту (вывод).
Свойства алгоритмов
Чтобы набор инструкций можно было назвать алгоритмом (особенно в рамках IT-технологий), он должен обладать определенными свойствами [6].
Дискретность
Процесс решения задачи должен быть разбит на отдельные изолированные шаги-команды. Компьютер выполняет инструкции строго по очереди, а каждый новый шаг начинается только после завершения предыдущего [7].
Результативность (конечность)
У любого алгоритма должно быть логическое завершение, чтобы за определенное число шагов можно было выдать результат. Программа не может работать бесконечно. Даже если результатом является сообщение «Решение не найдено», это тоже результат, после которого процесс останавливается [8].
Массовость
Алгоритм должен решать не одну уникальную задачу, а набор схожих проблем. Например, алгоритм сложения в калькуляторе должен уметь проводить операции с любыми числами, которые введет пользователь, а не только 2+2 [9].
Детерминированность (определенность)
Каждая команда должна быть предельно точной и однозначной, не оставляющей места для двойных толкований. При многократном запуске алгоритма с одними и теми же исходными данными результат всегда должен быть одинаковым.
Понятность
Команды алгоритма должны входить в систему команд исполнителя, для которого они написаны. Например, компьютер не поймет команду «сделай красиво», но выполнит действие «закрась пиксель красным цветом».
Виды алгоритмов
В программировании алгоритмы классифицируют по структуре их выполнения [10]. Основные виды, из которых строится любая программа, включают в себя следующие варианты.
Линейные
Самый простой вид. Все действия выполняются строго последовательно, друг за другом, сверху вниз [11]. Нет никаких условий или повторений. Например, программа, которая запрашивает у пользователя два числа, складывает их и выводит результат на экран.
Ветвящиеся
Алгоритмы, в которых порядок выполнения шагов зависит от определенного условия [12]. Если условие истинно, выполняется один блок команд, если ложно — другой. Например, банкомат. Если введен правильный ПИН-код — открыть меню карты. Если неправильный — вывести ошибку на экран и попросить попытаться снова.
Циклические
Включают в себя команды, которые повторяются несколько раз до тех пор, пока условие не перестанет соблюдаться [13]. Повторяющийся участок называется «телом цикла». Например, поиск нужного имени в телефонной книге. Алгоритм будет «перелистывать» контакты один за другим (повторять действие), пока не найдет совпадение с запросом.
Рекурсивные
Особый вид алгоритмов, где функция вызывает саму себя для решения более мелкой подзадачи, пока не дойдет до базового условия выхода [14]. Например, вычисление факториала числа или обход дерева папок на жестком диске компьютера.
Вероятностные
Алгоритмы, которые используют генератор случайных чисел для принятия решений на определенных этапах. При одних и тех же исходных данных они могут выдавать разные результаты или идти по нескольким путям. Часто применяются в криптографии и машинном обучении, например метод Монте-Карло, в рамках которого случайные числа генерируются много раз, чтобы рассчитать вероятность события [15].
Способы записи алгоритмов
Прежде чем переводить алгоритм на язык программирования, его нужно спроектировать. Для этого используют несколько способов записи [16].
Словесный
Описание алгоритма на естественном языке. Это самый понятный для обычного человека способ, но он может быть слишком громоздким и допускать неоднозначные трактовки. Например, «Шаг 1. Возьми число А. Шаг 2. Возьми число Б. Шаг 3. Сложи их...».
Визуальный
Графическое представление, где каждый шаг обозначается определенной геометрической фигурой. Овалы означают начало и конец, прямоугольники — действия, ромбы — условия (ветвления), а стрелки показывают направление процесса. Это классический стандарт в IT, который позволяет охватить взглядом всю логику программы.
Псевдокод
Промежуточный вариант между естественным языком и настоящим кодом [17]. В псевдокоде используются элементы конструкций языков программирования (циклы for, условия if-else), но слова пишутся на понятном человеку языке (например, на русском или английском). Псевдокод не запустится на компьютере, но программист может перевести его на нужный язык.
Алгоритм Евклида
Один из древнейших и самых известных математических алгоритмов, дошедших до наших дней, называется «алгоритм Евклида» [18]. Он был описан еще в IV–III веках до нашей эры. Его задача — найти наибольший общий делитель (НОД) для двух натуральных чисел (то есть самое большое число, на которое они оба делятся без остатка).
В рамках алгоритма большее число делят на меньшее. Если есть остаток, то меньшее число из предыдущего шага делят на этот остаток. Процесс повторяется в рамках циклического алгоритма, пока остаток не станет равен нулю. Последний делитель, при котором это произошло, и является НОД [19].
В современном программировании алгоритм Евклида до сих пор применяется для сокращения дробей и формирования алгоритмов шифрования данных.
Станут ли алгоритмы совершеннее человека
С развитием нейросетей и машинного обучения кажется, что алгоритмы становятся умнее своих создателей. Они обыгрывают чемпионов мира в шахматы и го, корректно ставят медицинские диагнозы и управляют автомобилями [20].
Однако важно понимать границы. Алгоритм, даже самый современный (как генеративные нейросети), лишь обрабатывает огромные массивы данных, выявляет в них закономерности и действует в рамках заданных задач. У алгоритма нет самосознания, эмпатии или моральных ориентиров [21]. Он способен генерировать тексты и изображения достойного качества, но не способен оценить их этичность или истинную ценность.
Алгоритмы превосходят людей в скорости обработки данных и выполнении рутинных, логических задач. Но целеполагание, нестандартное творческое мышление и ответственность за принятые решения остаются прерогативой человека [22].
Главное об алгоритмах в программировании
- Алгоритм — это конечная и однозначная последовательность действий, приводящая к решению задачи.
- Основа программирования: любая компьютерная программа строится на алгоритмах; без них устройство не способно выполнить даже простое сложение двух чисел.
- Основные свойства: дискретность (шаги), результативность (конечность), массовость (универсальность), детерминированность (однозначность) и понятность для исполнителя.
- Базовые виды: логика алгоритмов строится на линейных последовательностях, ветвлениях (условиях) и циклах (повторениях).
- Этапы создания: от словесного описания и блок-схем программисты переходят к написанию псевдокода, а затем — к реальному коду на выбранном языке программирования.
Читайте также:
➤ Подписывайтесь на телеграм-канал «РБК Трендов» — будьте в курсе последних тенденций в науке, бизнесе, обществе и технологиях.
Читайте также:
Кремль назвал терактом удар ВСУ по автобусу с детской футбольной командой
Минск потребовал от Киева объяснений после атаки в Брянской области
Росавиация ограничит полеты легких самолетов в Центральной России