Учителю на заметку #6: Пара слов об алгоритмах

Некоторые понятия настолько плотно входят в твою профессиональную и простую жизнь, что перестаёшь в конце-концов задумываться о том, в какой степени они применимы. А некоторые оказываются настолько связаны с обычными жизненными действиями, что более-менее точные определения начинают подменяться тем, что мы видим каждый день.
А поговорить я хочу об алгоритмах.
Алгоритм - это описание последовательности действий, необходимых для решения определённой задачи.
Обычно алгоритм представляет собой преобразование явно заданной исходной информации (данных) в другую, выходную информацию; или изменение порядка или структуры входящей информации. Примерами упомянутых трёх действий в области программирования являются:
  • Нахождение наименьшего, или наибольшего элемента в массиве;
  • Сортировка массива;
  • Перестроение элементов массива в так называемую КУЧУ (HEAP), представляющую собой двоичное дерево с определёнными дополнительными свойствами.
Типичное затруднение касающееся понимания сути алгоритмов я привожу ниже:
Особо надо отметить, что сам алгоритм не зависит от способа ого описания (представления). Единственное, что при этом подразумевается - это понятность в целом и возможность безошибочного применения (возможно и не с первой попытки).
Ещё одной частой ошибкой является уверенность, что алгоритм обязательно должен изменять исходные данные. Это не так: например, алгоритмы поиска информации обычно как раз не меняют не меняют её, но при этом могут создавать и использовать вспомогательную информацию, основанную на исходной. Например - посредством набора ключевых слов или краткого содержания, аннотации или подобного.
Ещё одним современным заблуждением является привязка понятия алгоритма исключительно к сфере информационных технологий, а у некоторых людей даже хуже: исключительно к языкам программирования.
На самом деле многие алгоритмы (и не всегда простые) для скорости исполнения реализуются прямо в кремнии (hardware). В частности, два известных механизма ускорения выполнения потока команд процессора (или его отдельного ядра): Предсказание перехода (Branch prediction) и Внеочередное выполнение (Out-of-order execution) по своей сути - чистейшие алгоритмы.


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

Или, если посмотреть в почти противоположном направлении, описание правильного выполнения физических упражнений - это тоже алгоритм.


Комментарии