Сегодня речь пойдет о самом основном понятии в вычислительной технике – об алгоритмах. Если говорить просто, без сложных определений, то:
- алгоритм (algorithm) – это набор шагов, определяющих каким образом будет выполнена та или иная задача.
К примеру, существуют алгоритмы для приготовления пищи (рецепты), для поиска пути через чужой город (карты или указатели), для управления стиральной машиной (обычно их можно увидеть на крышке машины или в инструкции), для исполнения музыки (ноты) и даже для демонстрации фокусов.
Для того чтобы какая-нибудь вычислительная машина, такая как компьютер, смогла выполнять поставленную задачу, должен быть разработан алгоритм ее выполнения в формате «понятном» для этой машины.
- Представлением таких алгоритмов являются компьютерные программы (programs).
Для удобства людей, программы обычно распечатывают на принтере или отображают на экранах мониторов. Для удобства вычислительных машин, программы кодируют методами совместимыми с технологиями этой машины.
- Процесс разработки программ, их кодирование в машинно-совместимый формат и установка, называется программированием (programming.).
Программным обеспечением (software) называют программу или совокупность программ, которые реализуют какой-то алгоритм или группу алгоритмов.
Аппаратное обеспечение (hardware) – набор физических элементов, которые позволяют вычислительным машинам обрабатывать информацию и выполнять программы.
Изучение алгоритмов началось с математики. Несомненно, что поиск алгоритмов был важнейшей задачей для математиков задолго до разработки современных компьютеров. Цель состояла в том, чтобы найти набор инструкций, которые бы описывали как решить все проблемы определенного типа. Один из самых хорошо известных примеров таких ранних исследований – алгоритм деления столбиком. Другой пример – Алгоритм Евклида для поиска наибольшего общего делителя двух положительных чисел, описанный греческим математиком Евклидом около 300 лет до н. э.
Когда разработан алгоритм выполнения какой-либо задачи или проблемы, то выполнение этого алгоритма больше не требует понимания принципов на которых он был основан. В связи с этим решение задачи или проблемы теперь можно свести к простому выполнению определенных шагов или следованию разработанным ранее инструкциям (например, мы можем использовать алгоритм Евклида, не вдаваясь в подробности его реализации). В каком-то смысле, наш разум требует решать проблемы в виде алгоритмов.
Благодаря способности фиксировать и выражать свой разум (или, по меньшей мере, разумное поведение) посредством алгоритмов, мы способны создавать вычислительные машины, выполняющие полезные задачи. Вследствие этого, уровень «интеллектуальности» вычислительных машин ограничен уровнем «интеллектуальности» алгоритмов, на которых они основаны. Мы можем сконструировать вычислительную машину для решения какой-то задачи только если существует алгоритм ее решения. В свою очередь, если не существует алгоритма решения какой-либо задачи или проблемы, то и ее решение лежит за рамками возможностей вычислительных машин.
Тему ограниченности алгоритмических возможностей в математике установил Курт Гёдель (Kurt Gödel) в 1930 году, опубликовав «теорему о неполноте». По существу в этой теореме утверждается, что в любой математической теории такой как традиционная арифметика, существуют утверждения, чья истинность или ложь не может быть установлена алгоритмически.
Осознание этого пошатнуло фундамент математики, а изучение возможностей алгоритмов положило начало формированию такой науки как «теория вычислительных машин и систем» (computer science).
Изучение алгоритмов – это основа Computer Science.