Алгоритмика что это такое


Алгоритмика: Чему детей учат в школе программирования

программирование для детей 30 августа 2018 

Эксперт детской школы о том, как детей учат на курсах программирования.

На вопросы Воркингмамы отвечает Антон Алексашкин, руководитель отдела методологии детской школы программирования «Алгоритмика» – Расскажите о детском программировании – чему именно вы учите детей, с какого возраста?

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

Но расскажу подробнее и о самом программировании. Мы учим основным понятиям программирования — алгоритмы, циклы, условия, переменные, классы, объекты. Наши курсы рассчитаны на детей от 5 до 7 лет и от 8 до 12 лет.

Групповая работа — важная составляющая наших курсов.

Есть ещё курс робототехники для детей от 8 до 12 лет. Среда программирования во всех курсах – визуальная: код собирается из блоков. Это позволяет ребёнку не тратить время на написание кода и сразу получать обратную связь. Он просто понимает, правильно ли собрал программу, по тому, что видит – бежит его мишка, куда он хочет, или нет.

– Есть ли требования для поступающих к вам? Например, базовые навыки владения компьютером, какими-то программами, наличие компьютера.

Нет, никаких специальных требований нет.

Слухи о вреде компьютеров сильно преувеличены.

– Как проходят занятия? Есть ли онлайн-формат обучения?

Все занятия проходят очно, групповая работа — важная составляющая наших курсов. Занятие состоит из разогрева, летучки, объяснения и отработки темы, разминки, затем снова разбора темы, рефлексии в конце. Для ребят 8-12 лет продолжительность занятия — 1,5 часа, для детей 5-7 лет — 45 минут. Онлайн-формат используется только для отработки пропущенных занятий.

– Какие проекты делают дети на курсе, с каким реальным продуктом ребёнок закончит обучение?

Курс разбит на модули по 5-10 занятий. Каждый модуль заканчивается презентацией проекта. Как правило, это игры, которые дети создают сами.

– Какие интересные курсы стартуют в сентябре 2018? Какова их продолжительность?

В сентябре стартуют все упомянутые выше курсы, продолжительность каждого из них — год. Есть ещё пилотные версии других курсов, какие-то из них запустятся поздней осенью, какие-то — в следующем году.

– Не можем проигнорировать вопрос о детском здоровье. Чтобы программировать, нужно сидеть за компьютером, а это влияет и на зрение, и на позвоночник. Что вы скажете обеспокоенным родителям?

– В группах 8-12 лет дети сидят за компьютерами два раза по 20-25 минут, в группах 5-7 лет дети работают с планшетами всего 15 минут. В остальное время есть другие активности, например, решение задач в рабочих тетрадях, научно-популярные лекции (в формате видео и теории от преподавателей), дискуссии с учениками. Да и в целом, слухи о вреде компьютеров сильно преувеличены.

Что такое алгоритмизация

Определение 1

Алгоритмизация – это математический термин, отражающий процесс создания некоторых алгоритмов для решения определенного круга задач. Стоит отметить, что алгоритмизация – это и процесс исследования свойств алгоритмов, с целью дальнейшего использования уже существующих видов алгоритмов для решения новых задач.

Понятие алгоритмизации и алгоритма появилось еще в IX веке нашей эры и произошло от имени его создателя, известного математика Мухаммеда ибн Муса ал-Хорезми (Alhorithmi).

Алгоритм представляет собой некоторый набор инструкций, описание действий исполнителя для достижения поставленной цели/результата за определенное количество так называемых шагов (итераций). Как правило, алгоритмы представляют собой набор математических символов, выстроенных в определенном порядке. Благодаря этому набору символов формируется алгоритм, который отражает элементарные акты некоторой задачи, причинно-следственные связи между этими актами, последовательность их исполнения. Процесс алгоритмизации является достаточно сложным и трудоемким, им занимаются узкоспециализированные специалисты, называемые алгоритмистами (наука называется «алгоритмикой»). Алгоритмика включена в состав области программирования. При построении алгоритмов используются подходы алгебр логики.

Ничего непонятно?

Попробуй обратиться за помощью к преподавателям

Алгоритмизация позволяет переформировать большой объем информации в структурированный, удобный вид. В настоящее время алгоритмизация используется все больше для вычислительных машин, но изначально алгоритмы были созданы для использования людьми для выполнения сложных операций посредством выполнения небольших элементарных шагов. Создание любой инструкции (к оборудованию, инструкции работы с чем-либо) является своего рода алгоритмизацией, т.к. представляет собой последовательной описание действий. Как правило, в инструкции для людей описываются простые процессе – взять, отрыть, повернуть. Те же самые действия описываются и для вычислительных машин, и единственным отличием является то, что для машины такая инструкция написана на языке, который понятен машине.

Методы алгоритмизации

В области алгоритмизации для записи решения могут быть использованы следующие методы описания алгоритма.

Словесное описание, которое представляет собой текстовое описание процесса с использованием формул и выстроенное последовательно – по пунктам, на естественном языке. Например, с помощью алгоритма необходимо решить следующее выражение: $y = 4x + (9 – 8r)$. Если бы решения данного алгоритма было необходимо представить с помощью словесного описания, то это приняло бы вид:

  1. Необходимо ввести значения $x$ и $r$;
  2. Вывести разницу выражения $9 – 8r$;
  3. Умножить $x$ на $4$;
  4. Результат умножения $4 x$ (результат реализации пункта 3) сложить с результатом вычисления $9 – 8r$ (результат реализации пункта 2);
  5. Вывести у как результат вычисления выражения $4x + (9 – 8r)$.

Замечание 1

Данный способ не является распространенным, так как имеет некоторый ряд ограничений: не является строго формализованным, достаточно емкий (большое количество лишний слов и, как следствие, большой объем описания), не характеризуется однозначностью.

Блок-схема, которая представляет собой один из методов графического представления алгоритма. При использование такого метода шаги отражаются в виде блоков разной формы, которые соединяются между собой стрелками (прерывистыми или сплошными). Пример блок-схемы алгоритма приведен на рисунке 1;

Рисунок 1. Блок-схема. Автор24 — интернет-биржа студенческих работ

На рисунке блок «процесс» представлен в виде прямоугольника и используется для обозначений действия или последовательности действий. Блок «решения» представлен в виде ромба и используется для проверки условия. Блок «Пуск/остановка» или так называемый «терминатор» представлен в виде овала и означает начало/окончание работы алгоритма. Блок «Пуск/остановка» является обязательным элементом любой блок-схемы алгоритма.

Псевдокод, который представляет собой компактный язык описания алгоритмов посредством ключевых слов императивных языков программирования. Как правило, псевдокод не описывает детали, которые могут быть восприняты человеком верно. Основная цель псевдокода – обеспечения понимания алгоритма пользователем (человеком). Псевдокод занимает некоторое промежуточное место между алгоритмическими языками программирования и естественными (словесным описанием). В псевдокоде используются служебные слова, смысл которых всегда строго определен заранее, они выделяются жирным шрифтом в печатном тексте или подчеркиваются, если тест рукописный. Пример псевдокода представлен на рисунке 2;

Рисунок 2. Псевдокод. Автор24 — интернет-биржа студенческих работ

Алгоритмические языки программирования. Наиболее популярный способ записи алгоритмов для вычислительных машин, который основан на применении кодов, точного описания синтаксиса алгоритма и семантики. Существует достаточно большое количество языков программирования (классифицируемых по различным признакам), например, Pascal, MatLAB, Prolog, Basic, Активный Оберон, Mathematica и т.д. Пример записи на одном из алгоритмических языков представлен на рисунке 3.

Рисунок 3. Язык программирования. Автор24 — интернет-биржа студенческих работ

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

Алгоритмизация/алгоритм характеризуется следующими свойствами:

  • Понятность для исполнителя. Исполнитель (вычислительная машин, человек) должен понимать каким образом выполнить данный алгоритм;
  • Дискретность. Алгоритм должен быть построен как блок последовательных элементарных операций;
  • Четкость. Каждая из элементарных операций должна быть четко и подробно описана, чтоб существовал лишь единственный способ выполнения данной операции;
  • Результативность. За определенное количество итераций алгоритм должен приводить к конечному решению поставленной задачи;
  • Массовость или универсальность. Разработанный алгоритм должен быть применим ко всем задачам, относящимся к одной группе, которые различаются исключительно вводными данными.

АЛГОРИТМ

Содержание статьи

АЛГОРИТМ – система правил, сформулированная на понятном исполнителю языке, которая определяет процесс перехода от допустимых исходных данных к некоторому результату и обладает свойствами массовости, конечности, определенности, детерминированности.

Слово «алгоритм» происходит от имени великого среднеазиатского ученого 8–9 вв. Аль-Хорезми (Хорезм – историческая область на территории современного Узбекистана). Из математических работ Аль-Хорезми до нас дошли только две – алгебраическая (от названия этой книги родилось слово алгебра) и арифметическая. Вторая книга долгое время считалась потерянной, но в 1857 в библиотеке Кембриджского университета был найден ее перевод на латинский язык. В ней описаны четыре правила арифметических действий, практически те же, что используются и сейчас. Первые строки этой книги были переведены так: «Сказал Алгоритми. Воздадим должную хвалу Богу, нашему вождю и защитнику». Так имя Аль-Хорезми перешло в Алгоритми, откуда и появилось слово алгоритм. Термин алгоритм употреблялся для обозначения четырех арифметических операций, именно в таком значении он и вошел в некоторые европейские языки. Например, в авторитетном словаре английского языка Webster's New World Dictionary, изданном в 1957, слово алгоритм снабжено пометкой «устаревшее» и объясняется как выполнение арифметических действий с помощью арабских цифр.

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

Проблема определения понятия «алгоритм».

На протяжении многих веков понятие алгоритма связывалось с числами и относительно простыми действиями над ними, да и сама математика была, по большей части, наукой о вычислениях, наукой прикладной. Чаще всего алгоритмы представлялись в виде математических формул. Порядок элементарных шагов алгоритма задавался расстановкой скобок, а сами шаги заключались в выполнении арифметических операций и операций отношения (проверки равенства, неравенства и т.д.). Часто вычисления были громоздкими, а вычисления вручную – трудоемкими, но суть самого вычислительного процесса оставалась очевидной. У математиков не возникала потребность в осознании и строгом определении понятия алгоритма, в его обобщении. Но с развитием математики появлялись новые объекты, которыми приходилось оперировать: векторы, графы, матрицы, множества и др. Как определить для них однозначность или как установить конечность алгоритма, какие шаги считать элементарными? В 1920-х задача точного определения понятия алгоритма стала одной из центральных проблем математики. В то время существовало две точки зрения на математические проблемы:

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

Есть проблемы, для которых алгоритм вообще не может существовать.

Идея о существовании алгоритмически неразрешимых проблем оказалась верной, но для того, чтобы ее обосновать, необходимо было дать точное определение алгоритма. Попытки выработать такое определение привели к возникновению теории алгоритмов, в которую вошли труды многих известных математиков – К.Гедель, К.Черч, С.Клини, А.Тьюринг, Э.Пост, А.Марков, А.Колмогоров и многие другие.

Точное определение понятия алгоритма дало возможность доказать алгоритмическую неразрешимость многих математических проблем.

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

Понятие «алгоритма».

В повседневной жизни каждый человек сталкивается с необходимостью решения задач самой разной сложности. Некоторые из них трудны и требуют длительных размышлений для поиска решений (а иногда его так и не удается найти), другие же, напротив, столь просты и привычны, что решаются автоматически. При этом выполнение даже самой простой задачи осуществляется в несколько последовательных этапов (шагов). В виде последовательности шагов можно описать процесс решения многих задач, известных из школьного курса математики: приведение дробей к общему знаменателю, решение системы линейных уравнений путем последовательного исключения неизвестных, построение треугольника по трем сторонам с помощью циркуля и линейки и т.д. Такая последовательность шагов в решении задачи называется алгоритмом. Каждое отдельное действие – это шаг алгоритма. Последовательность шагов алгоритма строго фиксирована, т.е. шаги должны быть упорядоченными. Правда, существуют параллельные алгоритмы, для которых это требование не соблюдается.

Понятие алгоритма близко к другим понятиям, таким, как метод (метод Гаусса решения систем линейных уравнений), способ (способ построения треугольника по трем сторонам с помощью циркуля и линейки). Можно сформулировать основные особенности именно алгоритмов.

Наличие исходных данных и некоторого результата.

Алгоритм – это точно определенная инструкция, последовательно применяя которую к исходным данным, можно получить решение задачи. Для каждого алгоритма есть некоторое множество объектов, допустимых в качестве исходных данных. Например, в алгоритме деления вещественных чисел делимое может быть любым, а делитель не может быть равен нулю.

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

Детерминированность.

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

Результативность.

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

Определенность.

На каждом шаге алгоритма у исполнителя должно быть достаточно информации, чтобы его выполнить. Кроме того, исполнителю нужно четко знать, каким образом он выполняется. Шаги инструкции должны быть достаточно простыми, элементарными, а исполнитель должен однозначно понимать смысл каждого шага последовательности действий, составляющих алгоритм (при вычислении площади прямоугольника любому исполнителю нужно уметь умножать и трактовать знак «x» именно как умножение). Поэтому вопрос о выборе формы представления алгоритма очень важен. Фактически речь идет о том, на каком языке записан алгоритм.

Формы представления алгоритмов.

Для записи алгоритмов необходим некоторый язык, при этом очень важно, какой именно язык выбран. Записывать алгоритмы на русском языке (или любом другом естественном языке) громоздко и неудобно.

Например, описание алгоритма Евклида нахождения НОД (наибольшего общего делителя) двух целых положительных чисел может быть представлено в виде трех шагов. Шаг 1: Разделить m на n. Пусть p – остаток от деления.

Шаг 2: Если p равно нулю, то n и есть исходный НОД.

Шаг 3: Если p не равно нулю, то сделаем m равным n, а n равным p. Вернуться к шагу 1.

Приведенная здесь запись алгоритма нахождения НОД очень упрощенная. Запись, данная Евклидом, представляет собой страницу текста, причем последовательность действий существенно сложней.

Одним из распространенных способов записи алгоритмов является запись на языке блок-схем. Запись представляет собой набор элементов (блоков), соединенных стрелками. Каждый элемент – это «шаг» алгоритма. Элементы блок-схемы делятся на два вида. Элементы, содержащие инструкцию выполнения какого-либо действия, обозначают прямоугольниками, а элементы, содержащие проверку условия – ромбами. Из прямоугольников всегда выходит только одна стрелка (входить может несколько), а из ромбов – две (одна из них помечается словом «да», другая – словом «нет», они показывают, соответственно, выполнено или нет проверяемое условие).

На рисунке представлена блок-схема алгоритма нахождения НОД:

Построение блок-схем из элементов всего лишь нескольких типов дает возможность преобразовать их в компьютерные программы и позволяет формализовать этот процесс.

Формализация понятия алгоритмов. Теория алгоритмов.

Приведенное определение алгоритма нельзя считать представленным в привычном математическом смысле. Математические определения фигур, чисел, уравнений, неравенств и многих других объектов очень четки. Каждый математически определенный объект можно сравнить с другим объектом, соответствующим тому же определению. Например, прямоугольник можно сравнить с другим прямоугольником по площади или по длине периметра. Возможность сравнения математически определенных объектов – важный момент математического изучения этих объектов. Данное определение алгоритма не позволяет сравнивать какие-либо две таким образом определенные инструкции. Можно, например, сравнить два алгоритма решения системы уравнений и выбрать более подходящий в данном случае, но невозможно сравнить алгоритм перехода через улицу с алгоритмом извлечения квадратного корня. С этой целью нужно формализовать понятие алгоритма, т.е. отвлечься от существа решаемой данным алгоритмом задачи, и выделить свойства различных алгоритмов, привлекая к рассмотрению только его форму записи. Задача нахождения единообразной формы записи алгоритмов, решающих различные задачи, является одной из основных задач теории алгоритмов. В теории алгоритмов предполагается, что каждый шаг алгоритма таков, что его может выполнить достаточно простое устройство (машина), Желательно, чтобы это устройство было универсальным, т.е. чтобы на нем можно было выполнять любой алгоритм. Механизм работы машины должен быть максимально простым по логической структуре, но настолько точным, чтобы эта структура могла служить предметом математического исследования. Впервые это было сделано американским математиком Эмилем Постом в 1936 (машина Поста) еще до создания современных вычислительных машин и (практически одновременно) английским математиком Аланом Тьюрингом (машина Тьюринга).

История конечных автоматов: машина Поста и машина Тьюринга.

Машина Поста – абстрактная вычислительная машина, предложенная Постом (Emil L.Post), которая отличается от машины Тьюринга большей простотой. Обе машины «эквивалентны» и были созданы для уточнения понятия «алгоритм».

В 1935 американский математик Пост опубликовал в «Журнале символической логики» статью Финитные комбинаторные процессы, формулировка 1. В этой статье и появившейся одновременно в Трудах Лондонского математического общества статье английского математика Тьюринга О вычислимых числах с приложением к проблеме решения были даны первые уточнения понятия «алгоритм». Важность идей Поста состоит в том, что был предложен простейший способ преобразования информации, именно он построил алгоритмическую систему (алгоритмическая система Поста). Пост доказал, что его система обладает алгоритмической полнотой. В 1967 профессор В.Успенский пересказал эти статьи с новых позиций. Он ввел термин «машина Поста». Машина Поста – абстрактная машина, которая работает по алгоритмам, разработанным человеком, она решает следующую проблему: если для решения задачи можно построить машину Поста, то она алгоритмически разрешима. В 1970 машина Поста была разработана в металле в Симферопольском университете. Машина Тьюринга была построена в металле в 1973 в Малой Крымской Академии Наук.

Абстрактная машина Поста представляет собой бесконечную ленту, разделенную на одинаковые клетки, каждая из которых может быть либо пустой, либо заполненной меткой «V». У машины есть головка, которая может перемещаться вдоль ленты на одну клетку вправо или влево, наносить в клетку ленты метку, если этой метки там ранее не было, стирать метку, если она была, либо проверять наличие в клетке метки. Информация о заполненных метками клетках ленты характеризует состояние ленты, которое может меняться в процессе работы машины. В каждый момент времени головка находится над одной из клеток ленты и, как говорят, обозревает ее. Информация о местоположения головки вместе с состоянием ленты характеризует состояние машины Поста. Работа машины Поста заключается в том, что головка передвигается вдоль ленты (на одну клетку за один шаг) влево или вправо, наносит или стирает метки, а также распознает, есть ли метка в клетке в соответствии с заданной программой, состоящей из отдельных команд.

Машина Тьюринга состоит из счетной ленты (разделенной на ячейки и ограниченной слева, но не справа), читающей и пишущей головки, лентопротяжного механизма и операционного исполнительного устройства, которое может находиться в одном из дискретных состояний q0, q1, …, qs , принадлежащих некоторой конечной совокупности (алфавиту внутренних состояний), при этом q0 называется начальным состоянием. Читающая и пишущая головка может читать буквы рабочего алфавита A = {a0, a1, …, at }, стирать их и печатать. Каждая ячейка ленты в каждый момент времени занята буквой из множества А. Чаще всего встречается буква а0 – «пробел». Головка находится в каждый момент времени над некоторой ячейкой ленты – текущей рабочей ячейкой. Лентопротяжный механизм может перемещать ленту так, что головка оказывается над соседней ячейкой ленты, при этом возможна ситуация выхода за левый край ленты, которая является аварийной (недопустимой), или машинного останова, когда машина выполняет предписание об остановке.

Современный взгляд на алгоритмизацию.

Теория алгоритмов строит и изучает конкретные модели алгоритмов. С развитием вычислительной техники и теории программирования возрастает необходимость построения новых экономичных алгоритмов, изменяются способы их построения, способы записи алгоритмов на языке, понятном исполнителю. Особый тип исполнителя алгоритмов – компьютер, поэтому необходимо создавать специальные средства, позволяющие, с одной стороны, разработчику в удобном виде записывать алгоритмы, а с другой – дающие компьютеру возможность понимать написанное. Такими средствами являются языки программирования или алгоритмические языки.

Анна Чугайнова

Кейс «Алгоритмики»: как за год вырастить школу программирования в 10 раз и не потерять контроль над ситуацией

Детская школа программирования «Алгоритмика» в рекордные сроки превратилась из скромного начинания четырех предпринимателей в международную сеть, раскинувшуюся на 7 стран. Число посетителей ее курсов за два года выросло с нескольких десятков до десятков тысяч, а количество точек присутствия перевалило за полсотни (они действуют более чем в 60 городах). Выручка компании за 2017 год составила 80 млн рублей, операционная прибыль (по расчетам Inc.) — 20 млн рублей. Основатели «Алгоритмики» Андрей Лобанов, Михаил Лебедев, Ренат Асадов и Андрей Чернышев рассказали Inc., как удерживают клиентов с помощью больших данных, зачем отправляют к франчайзи «тайных посетителей» и благодаря чему перевыполнили план по франшизам в три раза.

Школы программирования «Алгоритмика» захватили российский рынок быстро и практически бесшумно: всего за два года они увеличили штат с 5 до 80 сотрудников, а число учеников увеличилось с 50 при запуске первой «Алгоритмики» в Москве до нескольких десятков тысяч в школах в России и еще 6 странах сегодня. Чтобы справиться с челленджами (они неизбежно возникают при столь быстром росте), основатели стартапа постарались автоматизировать все что только можно — найм преподавателей, поиск партнеров по франчайзингу и контроль качества работы школ.

«Алгоритмику» создал в 2016 году бывший консультант McKinsey

Андрей Лобанов. Фото: Александр Карнюхин/Inc.

Андрей Лобанов. К тому моменту у него уже был успешный собственный бизнес – образовательный проект «Синхронизация», где слушателям предлагают лекции о науке и искусстве (компания прибыльна и работает до сих пор).

— Мне всегда хотелось сделать большую историю, а «Синхронизация» с лекциями не могла стать глобальной. Я стал думать о самых востребованных профессиях 21 века, быстро дошел до идеи создать школу программирования и начал всем о ней рассказывать — по реакции понял, что попал в точку, — вспоминает Андрей Лобанов.

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

В проект Лобанов вложил 3 млн рублей из собственных накоплений. Дальнейшие инвестиции стартап привлекал уже в процессе работы — три бизнес-ангела (по данным Контур.Фокус, ими стали инвестор Михаил Цыферов, консультант McKinsey Семен Яковлев и предприниматель Руст Илгар) вложили в компанию 15 млн рублей. Деньги пошли на разработку образовательного контента, маркетинг и создание IT-системы – привлекали дизайнеров, использовали помощь других разработчиков, покупали сервера. Первые курсы основатели вели сами — все, кроме Чернышева (у технического директора и так было полно забот с разработкой).

Мы были уверены: если сами не пощупаем, как разрабатывать курсы и учить детей – не узнаем, как именно действует потребитель, и не сможем развиваться, — говорит Лобанов.

Систему разработали всего за полтора месяца — все это время предприниматели буквально жили на работе. Параллельно они арендовали три площадки для проведения курсов в Москве — на Чеховской, Юго-Западной и в ДК «ЗИЛ». Чтобы привлечь учеников, постили объявления на своих страницах в Facebook – так пришло порядка 10 детей знакомых знакомых.

В результате к сентябрю на каждой площадке запустили по две группы (в каждой – по 10 человек). А уже спустя пару месяцев наняли первых двух преподавателей со стороны. По словам Лобанова, группы стали самоокупаемыми с самого начала — «родители платят за занятия, мы из этих денег платим преподавателям и площадке».

«Алгоритмика» появилась в нужное время и попала в тренд: программирование стало пользоваться огромным спросом среди школьников и их родителей, и желающих учиться было хоть отбавляй. Кроме того, школа с самого начала старалась предлагать познавательный контент, который пересекался бы с другими уроками (географией, физикой, биологией), и отслеживать с помощью IT-системы, насколько школьники вовлечены в процесс. Неудивительно, что уже спустя полгода после запуска «Алгоритмики» появились первые желающие купить франшизу – предприниматели из Калуги и Саратова обратились к партнерам еще до того, как они разработали франчайзинговое предложение.

С этого момента начался бурный рост компании — уже за первый учебный год (2016-17) число ее учеников выросло в 30 раз. Перед основателями «Алгоритмики» встала задача реорганизовать бизнес-процессы, а именно – наладить контроль за работой школ в регионах и автоматизировать процесс отбора педагогов и франчайзи. Предстояло также перестроить работу отделов и процесс коммуникации так, чтобы сохранить мотивацию команды и не потерять связь с тем, что происходит на всех уровнях компании.

В образовательном процессе минимум 50% зависит от педагога. Поэтому мы уделяем много внимания отбору преподавателей. Сначала интервьюируем кандидатов вживую или по скайпу (в регионах), затем – проводим тестовое занятие с группой детей или смотрим видеозаписи с тестовых уроков. Нам не важно наличие диплома педагога, главное – чтобы человек умел и хотел работать с детьми, был ориентирован на мотивацию ребенка. Сейчас мы принимаем на работу одного из 10 кандидатов, а в регионах и того меньше: проходит в среднем одна из 7,5 заявок.

Первых преподавателей нам советовали друзья и коллеги. Когда компания стала расти, мы стали выстраивать каналы лидогенерации для поиска педагогов. Сейчас размещаем вакансии на HeadHunter и в сообществах студентов и преподавателей. Но по-прежнему привлекаем и знакомых с опытом работы в образовании – пишем им в личку в соцсетях.

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

Михаил Лебедев. Фото: Александр Карнюхин/Inc.

результате к маю 2018 года мы увеличили число преподавателей в системе почти до 400 человек.

Когда преподавателей стало много, мы создали для них специальный курс по обучению работе с нашим продуктом. Это позволило тратить меньше усилий на адаптацию каждого конкретного педагога и обрести уверенность, что все они хорошо владеют материалом. Мы также добавили коучинг и стали собирать различные метрики работы преподавателей – чтобы контролировать качество преподавания.

Человеческий фактор мы потихоньку исключаем из процесса отбора преподавателей. Наша задача — автоматизировать процесс настолько, чтобы при необходимости за короткое время нанять тысячи преподавателей.

млн рублей —операционная прибыль за 2017 год

млн рублей — общая сумма начальных инвестиций

МЛН рублей — выручка за 2017 год

городов, в которых есть школы «Алгоритмика»

сотрудников работает в компании

Когда бизнес растет – велик риск потерять связь с тем, что происходит в компании. Чтобы этого избежать, мы каждую неделю проводим встречи всего коллектива. Руководители направлений рассказывают, что у них произошло и над чем они работают в ближайшее время.

Из рабочих инструментов мы с самого начала используем Excel и Asana. Последнее особенно эффективно для компаний, в которых работают десятки людей. Планирование позволило нам вырасти до 60+ человек, но сохранить хорошую коммуникацию и не потерять контроль над бизнес-процессами.

Когда работаешь напрямую с человеком – знаешь как ему ставить задачу, исходя из его компетенций, сильных и слабых сторон. А когда у тебя есть отделы и руководители направлений — повлиять на конкретный результат гораздо сложнее. Нам пришлось по-другому выстраивать процесс контролирования и фидбека — делегировать максимум задач главам отделов (чтобы они разбирались, кому что поручить, и отвечали за конечный результат).

Когда нас было 10 человек – мы мыслили короткими горизонтами. Когда команда выросла в 4 раза, пришлось расписывать план работы на полгода вперед. Мы выстроили коммуникацию с отделами на уровне среднесрочных целей: руководители ставят сотрудникам целые блоки задач. Планируем в Excel на месяц (иногда – на три месяца), главное – чтобы отдел ориентировался на результат. И в конце месяца «трекаем» – насколько команда приблизилась к цели, что получилось, а что нет. Со временем накапливается статистика: какие направления движутся, а какие нет — это позволяет нам чувствовать пульс компании в каждый момент.

Для привлечения партнеров мы запустили отдельную воронку. Мы искали франчайзи на конференциях и онлайн, таргетировали рекламу на бизнесменов из городов, где еще нет «Алгоритмики». Это позволило сократить временные затраты на поиск адекватных и заинтересованных партнеров. Стоимость привлечения одного франчайзи у нас оказалась примерно в 5 раз меньше, чем планировали.

Надо предлагать франчайзи максимально продуманный продукт — от этого зависит, насколько успешный бизнес он выстроит. Поэтому мы полностью проработали систему подключения новых партнеров к «Алгоритмике» — расписали им полный календарь действий (например, на этой неделе нанимает администратора, а на следующей – проводит собеседования с педагогами). Мы ведем бизнесмена за ручку по всем этапам — и с каждым новым партнером оттачивали эту систему. В результате мы перевыполнили собственный план по франшизам на прошлый год — вместо 10 открыли почти 40 (а в этом году планируем довести это число до 100).

Франчайзи обычно задают одни и те же вопросы. Чтобы упростить коммуникацию с ними, мы составили список действий по запуску школы, проводим вебинары по маркетингу, поиску педагогов и т. д. Каждую неделю созваниваемся с партнерами по франшизе и снимаем с них весь фидбек.

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

К своим франчайзи мы направляем

Ренат Асадов. Фото: Александр Карнюхин/Inc.

«тайных посетителей» — они приходят на занятия и общаются с учениками и преподавателями. Так мы контролируем качество работы людей, которые от нас не зависят. Кроме того, наша IT-система снимает все возможные метрики – так мы можем отслеживать образовательные результаты детей (и в случае чего – быстро вмешаться и скорректировать результат).

В регионах маркетинг делать не умеют от слова «совсем». Поэтому мы взяли эту задачу на себя: помогаем партнерам таргетировать рекламу и распределять бюджет на разные направления. Таким образом франчайзи не тратят время на поиск поставщиков этих услуг (и снижают риски нанять некомпетентных людей), а могут сфокусироваться на качестве образовательного процесса и развитии бизнеса.

Научить партнеров работе с диджитал-рекламой было сложно. Они делали много ошибок или поручали продвижение столь же некомпетентному региональному агентству. Смотришь — а он бомбит рекламой по всему рынку или вообще настроил ее на другой город! Мы сначала пробовали делать коучинг-сессии, но потом решили продавать партнерам собственные услуги по продвижению. Тем самым решили сразу две проблемы — сняли ряд вопросов у франчайзи и нашли себе новый канал заработка.

Программирование стало популярным предметом обучения для детей: только в Москве за последние несколько лет открылось более 10 специализированных школ.

Самые крупные школы программирования

Помимо отдельных частных организаций, курсы программирования часто запускают крупные IT-компании — например, подобные проекты есть у «1С», «Яндекса» и Мытищинской школы программистов («Московская школа программистов»). Собственную IT-школу развивает и Samsung.

Программированию обучают детей с 5-летнего возраста. Курсы длятся в среднем от 2 месяцев.

Первых клиентов мы привлекали в буквальном смысле вручную. Постили объявления на своих страницах в соцсетях, сделали лендинг про курсы обучения программированию, ездили по школам и проводили презентации на выставках. Но самой эффективной оказалась таргетированная реклама в Facebook и «ВКонтакте» – благодаря ей пришло порядка 70-80% клиентов (остальные были детьми знакомых и знакомых знакомых).

Повысить узнаваемость нам помогло участие в акции «Час кода». Это всероссийский проект по популяризации программирования – каждый год в его рамках проходит открытый онлайн-урок информатики в школах. Мы стали разработчиками контента для этого урока, и в декабре 2016-го к нам на сайт потренироваться зашло около 4 млн детей. В результате уже к весне 2017-го в наших школах обучалось 300 учеников.

По мере роста мы добавляли все новые и новые каналы продвижения. Вначале рекламировались только через Facebook и «ВКонтакте», потом

Андрей Чернышев. Фото: Александр Карнюхин/Inc.

стали задействовать и другие соцсети, добавили контекстную рекламу и баннеры, партнерские программы, оффлайн-продвижение (присутствуем на ивентах, где появляются родители с детьми). Сейчас активно развиваем контент-маркетинг — работаем с блогерами, ведем тематические e-mail-рассылки. Но лучше всего у нас работают таргетинг и реферальные программы (за рекомендацию нас друзьям клиент получает скидку). На все уходит 3-4 млн рублей в месяц.

Мы удерживаем клиентов с помощью больших данных. Наша IT-система измеряет ряд параметров: например, родителю важно увидеть, сколько задач его ребенок решил, и оценить его успеваемость. Кроме того, измеряем увлеченность ребенка (например, отслеживаем, заходил ли он в систему из дома) и делаем выводы – интересно ли ему учиться, насколько хорошо сработал педагог. На этой основе можем подстраиваться под детей и делать программу все более персонализированной. И тогда они остаются с нами надолго.

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

Мы с самого начала искали возможности для внедрения наших уроков в обычных школах. В конце концов весной 2017-го через общих знакомых удалось выйти на министра образования Азербайджана. На переговорах в Баку мы рассказали, что помогаем детям встраиваться в цифровую эпоху. Министру понравилось, и уже зимой 2017 года к нам подключилось 45 школ. По результатам пилота мы подписали трехлетний контракт на разработку и внедрение программы цифровых навыков для детей с 1 по 11 класс.

Убедить власти Азербайджана нам помогли горящие глаза и системный подход. Помимо IT, мы пообещали развивать еще и дополнительные навыки — под зонтиком программирования «пробрасывать мостики» в другие предметы. Например, один из сюжетов наших уроков — программы для робота на Марсе. Заодно мы объясняем, зачем там нужен кислород и как его производить — это пересекается с физикой, биологией и другими предметами.

IT-сфера в Азербайджане только начинала развиваться — а на такие рынки проще заходить. Рынок там большой, спрос есть — тем более, у нас с постсоветскими странам один язык и культура. Благодаря совокупности этих факторов мы получили мощное новое направление для бизнеса — к концу учебного (2018) года, вместе с ростом франшизы, это позволило нам увеличить общую выручку компании до 98 млн рублей.

Алгоритм

Алгоритм — это точно установленное предписание (инструкция) о выполнении в определённом порядке некоторой последовательности операций, однозначно ведущих к решению той или иной конкретной задачи. Предписание алгоритма представляет собой конечный набор правил, который задаёт потенциально осуществимый вычислительный процесс (процесс исполнения алгоритма), ведущий от варьирующих в определённых пределах исходных данных к получению результата, однозначно определяемого допустимыми исходными данными. Последнее подразумевает, что результат выполнения алгоритма напрямую зависит от исходных данных: то есть один и тот же алгоритм при разных исходных данных даст разные результаты; с другой стороны, если одному и тому же алгоритму передать несколько раз одни и те же данные, он должен столько же раз выдать один и тот же результат. Простейшими примерами алгоритмов являются арифметические правила сложения, вычитания, умножения, деления и тому подобные.

Формальные свойства алгоритмов [в явной или неявной форме] включают следующий ряд общих требований:

  1. Дискретность (разделённость на части) и упорядоченность. Алгоритм должен состоять из отдельных действий, которые выполняются последовательно друг за другом.
  2. Детерминированность (однозначная определённость). Многократное применение одного алгоритма к одному и тому же набору исходных данных всегда даёт один и тот же результат.
  3. Формальность. Алгоритм не должен допускать неоднозначности толкования действий для исполнителя.
  4. Результативность и конечность. Работа алгоритма должна завершаться за определённое число шагов, при этом задача должна быть решена.
  5. Массовость. Определённый алгоритм должен быть применим ко всем однотипным задачам.

Предписание алгоритма, как правило, фиксируется (записывается) в виде текста некотором формализованном языке (см. Язык формализованный), называемого программой. Понятие программы формулируется в чисто структурных терминах синтаксиса этого языка, без какого-либо обращения к смысловым категориям. Точно такой же характер носит и описание процедуры выполнения программы. Поэтому в роли исполнителя алгоритмов, записанных на формализованных [алгоритмических] языках, может выступать не только человек, но и наделённое соответствующими [вычислительными] возможностями автоматическое устройство, машина. Универсальным исполнителем алгоритмов является компьютер. С его помощью возможно выполнять все основные виды алгоритмов. Возможность машинного осуществления алгоритмических процедур, и, соответственно, машинного решения задач, стимулировала развитие вычислительной техники и создание математической теории алгоритмов. В современной науке теория алгоритмов является основой конструктивного направления в математике и логике, а также выступает одной из базисных дисциплин в области вычислительной техники и программирования, машинного решения разнообразных задач, моделирования различных процессов и других областях.

Слово «алгоритм» происходит от имени арабского учёного IX века Мухамеда бен Мусы аль-Хорезми, который впервые описал правила выполнения арифметических действий в десятичной системе счисления, придуманной в Индии. Впоследствии термином «алгоритм» стали обозначать эти правила вычислений. Однако с течением времени понятие алгоритма постепенно расширялось, наряду с его экспансией из чистой математики в другие сферы, и в XX веке под ним стали понимать точную последовательность действий, приводящую к решению поставленной задачи, при условии, что эта задача является заведомо решаемой.

Алгоритм — одно из основных понятий математической логики (см. Логика математическая) и математики. Хотя неформально математики всё время занимались поиском алгоритмов, данное понятие было уточнено лишь в 30-х годах XX века. Первыми такими уточнениями были абстрактные определения частично-рекурсивных и представимых функций в формальной теории чисел, появившиеся в связи с задачами теории доказательств. В 1936 году Э. Пост и А. Тьюринг независимо друг от друга предложили понятия абстрактных вычислительных машин и указали, что любой алгоритм в интуитивном смысле слова может быть реализован на данных машинах, несмотря на кажущуюся примитивность их элементарных действий.

В машине Тьюринга памятью является потенциально бесконечная лента, в каждой клетке которой записан символ из заранее заданного конечного алфавита. Более того, достаточно рассматривать ленту, каждая клетка которой содержит один бит информации, то есть либо пуста, либо содержит символ |. Процессор машины Тьюринга состоит из головки (каретки), которая в любой момент обозревает одну клетку, и программы, состоящей из конечного числа команд, обычно нумеруемых натуральными числами. Каждая команда представляет собой условное действие, зависящее от символа, записанного в клетке. Это действие имеет вид совокупности элементарных инструкций формы ab (L, R, S) i, в которой присутствует лишь одна из букв L, R, S. Буква L означает приказ сдвинуться на следующем такте на одну клетку влево, R — вправо, S — остаться на месте. Элементарная инструкция означает следующее: если машина видит a, записать в клетку b, передвинуться в соответствии с командой и перейти к исполнению команды i. Такая элементарность действий машины стала результатом проведённого Тьюрингом методологического анализа элементарных действий человека по исполнению алгоритмов.

Машина Поста представляет собой универсальный исполнитель, позволяющий вводить начальные данные и читать результат выполнения программы. В машине имеются регистры, содержащие натуральные числа, элементарные операции увеличения и уменьшения числа на 1 и условный переход, если число в регистре равно 0. Машина Поста состоит из: а) бесконечной ленты, поделённой на одинаковые ячейки-секции (ячейка может быть пустой [0 или пустота] или содержать метку [1 или любой другой знак]; б) головки (каретки), способной передвигаться по ленте на одну ячейку в ту или иную сторону, а также способной проверять наличие метки, стирать и записывать метку. Состояние машины Поста описывается состоянием ленты и положением каретки. Состояние ленты — это информация о том, какие секции пусты, а какие отмечены. Шаг — это движение каретки на одну ячейку влево или вправо. Состояние ленты может изменяться в процессе выполнения программы. Элементарные действия (команды) машина Поста проще команд машины Тьюринга, поэтому программы для машины Поста имеют большее число команд, чем аналогичные программы для машины Тьюринга. Команды машины Поста предвосхитили систему команд современных вычислительных машин.

Одновременно А. Чёрч и X. Б. Карри создали одно из самых абстрактных уточнений алгоритма: λ-определимость, выразимость с помощью терма комбинаторной логики (см. Логика комбинаторная). Выяснилось, что и ранее созданные теоретические понятия, и самые элементарные, и самые абстрактные, из вновь появившихся уточнений алгоритма оказались эквивалентны. Этот факт, подтверждённый в дальнейшем для всех вновь появлявшихся точных определений алгоритма, послужил основой утверждения, скромно называемого в математике тезисом Чёрча, хотя степень его подтверждённости ныне выше, чем у любого физического «закона». Содержательное понятие алгоритма эквивалентно по объёму любому из имеющихся в данный момент математических уточнений этого понятия, в частности вычислимости на машине Тьюринга.

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

При модификации машин Тьюринга разделением входной и выходной ленты (со входной можно лишь читать, на выходную — лишь писать, причём после шага записи и чтения лента необратимо сдвигается на одну ячейку) получается важное понятие конечного автомата, моделирующее вычислительные машины без внешней памяти. Возможности конечных автоматов значительно меньше, в частности на них нельзя распознать простые числа.

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

Одним из первых результатов теории алгоритмов стала теорема о том, что не любую вычислимую функцию можно продолжить до всюду определённой вычислимой функции. Практическим примером таких функций является любой интерпретатор программ, например, BASIC. Если не ограничивать возможности программиста, то нельзя создать интерпретатор, который невозможно было бы привести в нерабочее состояние исполнением синтаксически корректной программы.

Множество, характеристическое свойство которого является всюду определённым вычислимым предикатом, называется разрешимым. Множество, принадлежность элемента которому можно установить за конечное число шагов применением некоторого алгоритма, называется перечислимым. Например, множество тавтологий классической логики высказываний (см. Логика высказываний) разрешимо, а множество тавтологий классической логики предикатов (см. Логика предикатов) перечислимо. Следует отметить, что в случае перечислимого множества алгоритмически установить можно лишь истинность, а не ложность. В классической математике имеет место следующий критерий разрешимости: множество разрешимо, если и оно, и его дополнение перечислимы. В конструктивной математике этот критерий эквивалентен принципу Маркова. Другая характеризация перечислимого множества — множество объектов, выводимых в некотором исчислении.

Следует отметить, что схема вычислительного процесса в современном его понимании — написание программы на языке высокого уровня, трансляция её в машинный язык и исполнение компьютером — имеет теоретической основой теорему об универсальном алгоритме. При любом точном определении алгоритмов каждый алгоритм может быть задан своим определением, которое является конструктивным объектом. Этот конструктивный объект может быть алгоритмически в содержательном смысле (и при этом достаточно просто и естественно) закодирован тем видом конструктивных объектов, которые обрабатываются данными алгоритмами.

Например, определение алгоритма может быть записано как слово в некотором алфавите, а если взять определение алгоритма, в котором рассматриваются лишь натуральные числа, такое слово может быть естественно представлено как число в системе счисления, основанием которой является количество букв в алфавите. Тогда имеется универсальный алгоритм U, перерабатывающий любую пару (ϕ, P), где ϕ — конструктивный объект, называемый записью или программой (относительно U) алгоритма ϕ, в результат применения ϕ к P. Универсальный алгоритм не может быть всюду определён. Если рассматривать лишь конструктивные объекты, то алгоритм естественно отождествить с его программой относительно некоторого U. То, что такое отождествление является ограниченным, показывают проблемы современной теории и практики программирования. Одной из самых трудных возникающих в этом случае проблем является восстановление алгоритма по реализующей его конкретной программе. Если понятие алгоритма, перерабатывающего реальные конструктивные объекты, можно считать однозначно определённым, то его обобщение на объекты высших типов допускает многочисленные варианты, неэквивалентные друг другу.

Обобщение теории алгоритмов на абстрактные вычисления и объекты высших порядков является одним из основных направлений исследований современной теории алгоритмов. Другим наиболее важным её направлением развития служит теория сложности вычислений, рассматривающая проблемы оценки ресурсов, необходимых для работы алгоритмов, основы которой закладывали А. Н. Колмогоров и А. А. Марков и С. Кальмар.

На основе теории сложности А. Н. Колмогоров, Л. А. Левин, П. Мартин-Лёф и другие развили алгоритмическую теорию вероятностей. Основой данной теории явилось содержательное определение случайной последовательности по Р. Мизесу. Двоичная последовательность случайна, если из неё нельзя выбрать никакую последовательность с другой частотой нулей и единиц. Например, последовательность 0, 1, 0, 1… неслучайна, поскольку последовательность её чётных членов состоит из одних единиц. В классической математике такое определение пусто. А. Н. Колмогоров уточнил его, предложив рассматривать лишь алгоритмические перестановки подмножеств членов данной последовательности. Оказалось, что случайность связана со сложностью определения. Сложность фрагментов случайной последовательности пропорциональна длине их записи. Итак, содержательно случайные объекты являются приближениями к случайным последовательностям. Для любой совокупности программ, имеющих ограниченную сложность, можно построить ограниченный универсальный алгоритм, исполняющий все их без ошибок, но его сложность будет неизмеримо выше, чем сложность исполняемых программ. Далее, возможно построить алгоритмический процесс, расширяющий ограниченный универсальный алгоритм с тем, чтобы включить любую предъявленную программу, не входящую в данный класс, но при этом сложность универсального метода станет ещё выше. Уже один шаг данного процесса диагонализации далеко выводит за рамки класса функций, считающихся реально вычислимыми.

Следует отметить, что тезис Чёрча содержит одно важное онтологическое предположение: о невозможности обозреть вечность. Поэтому в общей теории относительности (в частности, во вселенной Гёделя, в которой время может ходить по кругу) имеются миры, в которых, пролетая сквозь вращающуюся чёрную дыру, можно вычислить алгоритмически невычислимую функцию. Класс функций, которые могут быть вычислены в таких Вселенных, называется гиперарифметическим. Он неопределим в арифметике и определим лишь в анализе.

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

Алгоритм — это пошаговое решение определенной проблемы. В большинстве своём в общем смысле алгоритм — это любой набор подробных инструкций, которые могут предоставить прогнозируемость конечного результата с известным началом. Алгоритмы хороши только в инструкции, но, и результат будет неправильным, если алгоритм не определен надлежащим образом.

Примеры алгоритмов

Типичный пример алгоритма будет инструкция по сборке модели самолета. Учитывая стартовый набор и число отмеченных частей, можно следовать инструкциям, приведенным в результате с прогнозируемым конечным результатом: собранный самолет. Опечатки в инструкции, или неспособность должным образом следовать шагам, приведёт в неисправность конечный продукт.

Компьютерная программа — это ещё один широко распространенный пример. Каждая компьютерная программа — это просто последовательность инструкций, которые могут различаться по сложности, и перечислены в определённом порядке, предназначенные для выполнения конкретной задачи. Математика также использует алгоритмы для решения уравнений вручную, без использования калькулятора. Последний пример — человеческий мозг: большинство концепций человеческого мозга определяют всё его поведение — от приобретения продуктов питания до влюблённости — как результат сложного алгоритма.

Классы алгоритмов

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

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

Жадные алгоритмы: жадные алгоритмы предпринимают попытку не только найти решение, но и найти идеальное решение для любой проблемы.

Алгоритм переборов: такой подход начинается в какой-то случайной точке и перебирает все варианты, пока не найдёт решение.

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

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

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

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

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

Последовательные и параллельные алгоритмы

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


Смотрите также