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

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

Слово алгоритм знакомо многим. Ну кто не слышал фразы в стиле "И какой алгоритм действий?" или "Там какой-то сложный и непонятный алгоритм". Однако если вас спросят, а что значит это слово, то далеко не каждый сможет с ходу ответить. Поэтому в этом обзоре рассмотрим этот термин подробнее и с нюансами.

 

Алгоритм это

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

Алгоритм (algorithmi, от имени персидского математика Абу Абдуллаха аль-Хорезми) - это совокупность чётких правил решения какого-то класса задач или конкретный набор инструкций, описывающий решение задачи. Самым банальным алгоритмом является любая инструкция из интернета для решения проблемы или настройки чего-либо.

Ещё пример. Допустим, алгоритм приготовления чая:

1. Проверяем уровень воды в чайнике.

2. Если недостаточно, то доливаем.

3. Включаем чайник.

4. Ждём, когда вода согреется.

5. Затем наливаем воду в кружку, размешиваем сахар и добавляем чайный пакетик.

6. Ждём, когда чай настоится.

7. Достаём чайный пакетик и пьём вкусный чай.

Как видите, ничего сложного. Однако нужно учесть, что это достаточно простой алгоритм. Но об этом ещё чуть позже.

 

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

Теперь рассмотрим свойства алгоритмов.

1. Конечность. Алгоритм не может быть бесконечным. Т.е. в какой-то момент должен быть достигнут результат (после какого-то шага, итерации). Но стоит отметить, что результат не обязательно один и тот же. Вполне нормальное явление, что алгоритм может подразумевать некоторый набор возможных результатов. Банальный пример. Открыли интернет-магазин, ищите какой-то товар, если увидели, то взяли, если не увидели, то не взяли.

2. Результативность. В любом случае алгоритм подразумевает какой-то конкретный результат, т.е. не может быть неопределённости. При этом вполне нормальное явление, что результатом может быть сообщение об ошибке. Скажем, добавляете товар в корзину, а его нет в достаточном количестве. В таком случае интернет-магазин не даст сделать заказ.

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

4. Детерминированность. Каждый шаг должен быть чётким и определённым. Т.е. не может быть такого варианта в стиле "ну может так, а может не так".

5. Универсальность в рамках класса задач. Алгоритм подразумевает, что его можно применить для решения однотипных задач. Утрируя, если вы складываете числа в калькуляторе, то вряд ли вы ожидаете, что калькулятор вдруг не сложит какие-то два числа (в рамках разумного, так-то у калькуляторов может быть ограничение максимальных положительного и отрицательного чисел).

Ещё порой добавляют такой свойство, как понятность, но попробуйте дать какой-нибудь сложный алгоритм из высшей математики гуманитарию. Последний в этом ни слова не поймёт. От этого алгоритм перестанет решать задачи? Нет, конечно.

 

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

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

1. Линейные. В данном случае алгоритм подразумевает, что действия идут друг за другом. Тот же алгоритм с чаем, в нём действия выполняются последовательно от первого шага до последнего.

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

3. Циклические. Такие алгоритмы подразумевают, что какая-то часть действий повторяется до выполнения каких-то условий. Например, проверять каждые 5 минут наличие интернета и если интернет появился, то выход из цикла и переход к дальнейшим шагам, или если интернета нет более часа, то выход из цикла и выдача ошибки в качестве результата. В данном случае цикл - это проверка интернета каждые 5 минут.

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

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

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

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

 

Кому и зачем нужны алгоритмы?

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

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

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

Иными словами, алгоритмы нужны всем и каждому.

Понравилась заметка? Тогда время подписываться в социальных сетях и делать репосты!

☕ Понравился обзор? Поделитесь с друзьями!

Добавить комментарий / отзыв

Комментарий - это вежливое и наполненное смыслом сообщение (правила).



* Нажимая на кнопку "Отправить", Вы соглашаетесь с политикой конфиденциальности.
Присоединяйтесь
 

 

Программы (Freeware, OpenSource...)