Возможно, эту задачу легче понять, если использовать наглядную иллюстрацию. Представьте себе помещение длиной 36 м и шириной 15 м. Вы хотите узнать максимальный размер квадратных плит, которыми можно покрыть весь пол этого помещения, не разрезая этих плит. Как тут поступить? Вот изобретенный более 2000 лет назад алгоритм решения этой задачи:
Предположим, что у нас есть два числа,
Вернемся теперь к задаче о мощении пола. Сначала найдем самую большую квадратную плиту, которая входит в помещение заданной формы. Затем найдем самую большую квадратную плиту, которая помещается на оставшийся участок, – и так далее, пока не дойдем до последней квадратной плиты, которая целиком заполнит все оставшееся место. Это и есть самая большая квадратная плита, которая позволит покрыть весь пол, не разрезая плит.
Если
Как вы видите, в этой процедуре много выражений типа «если…, то…». Это характерно для алгоритмов, и именно это обеспечивает столь превосходную пригодность алгоритмов для программирования и компьютеров. Древняя инструкция Евклида затрагивает самую суть четырех ключевых свойств, которыми в идеале должен обладать любой алгоритм:
1. Он должен состоять из точно сформулированных и однозначных инструкций.
2. Процедура всегда должна заканчиваться (а не уходить в бесконечный цикл!), какие бы числа в нее ни ввели.
3. Она должна выдавать ответ для любых значений, введенных в алгоритм.
4. В оптимальном варианте алгоритм должен быть быстрым.
Ни в каком из шагов алгоритма Евклида нет никакой неоднозначности. Поскольку остаток от деления уменьшается на каждом шаге, он неизбежно доходит до нуля за конечное число шагов, после чего алгоритм останавливается и выдает ответ. Чем больше числа, тем больше время работы алгоритма, но работает он все же относительно быстро. (Если вас интересует точное значение, число шагов в пять раз больше числа знаков в меньшем из двух чисел.)
Если самые старые алгоритмы появились более 2000 лет назад, почему же само это название происходит от имени персидского математика IX века? Мухаммад Аль-Хорезми был одним из первых руководителей великого «Дома мудрости» в Багдаде и отвечал за перевод многочисленных древнегреческих текстов по математике на арабский язык.
Слово «алгоритм» происходит от латинской транскрипции его имени. Хотя все инструкции к алгоритму Евклида приведены в его «Началах», язык Евклида чрезвычайно невразумителен. Мышление древних греков было очень геометрическим; вместо чисел они говорили о длинах отрезков, а их доказательства состояли из изображений – приблизительно как в нашем примере с мощением пола. Но изображений недостаточно для строгих математических утверждений. Для них требуется язык алгебры, в котором буква может обозначать любое число. Именно в этом и состояло изобретение Аль-Хорезми.
Чтобы суметь ясно изложить, как работает алгоритм, нужен язык, позволяющий говорить о любом числе, не указывая, какое именно это число. Мы уже видели, как работает этот принцип, в объяснении действия алгоритма Евклида. Мы присвоили числам, которые пытались анализировать, имена –