Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algorytm.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
865.28 Кб
Скачать

I. Теория алгоритмов

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

1.1. Предварительные сведения

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

Сначала теория алгоритмов возникла в связи с внутренними потребностями теоретической математики. Математическая логика, основы математики, алгебра, геометрия и анализ остаются сегодня одной из основных областей применения теории алгоритмов. Другая область ее применений возникала в 40-х годах ХХ столетия в связи с созданием ЭВМ. В это время огромное влияние на развитие вычислительной техники оказали теоретические разработки математиков: англичанина А. Тьюринга и работавшего независимо от него американца Э. Поста. "Машина Тьюринга (Поста)" - прообраз программируемого компьютера. Эти ученые показали принципиальную возможность решения автоматами любой проблемы при условии, что ее можно представить в виде алгоритма, ориентированного на выполняемые машиной операции.

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

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

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

1. Общее понятие алгоритма как самостоятельное (отдельное) понятие.

2. Время и емкость как характеристики сложности вычислений и порождения.

3. Понятия рекурсивных или частично-рекурсивных функций.

4. Понятия вычислительной операции.

5. Понятия программы: программы как объекты вычисления и порождения.

6. Теория сложности конструктивных объектов.

7. Экономические вычислительные модели.

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

Простейшими алгоритмами, с которыми человек встречается на первых шагах обучения, являются правила выполнения арифметических операций; методы умножения “столбиком” и деление “углом”; алгоритм Евклида нахождения наибольшего общего делителя для двух целых чисел и т.д. В одном старинном немецком математическом словаре (Лейпциг, 1747) примерно так и определялось понятие алгоритма: “Этот термин включает в себя понятие о четырех типах арифметических операций: сложении, вычитании, умножении, делении”.

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

Исторически термин «алгоритм» произошел от произношения фамилии узбекского математика IX века Мухаммеда ибн Муса ал-Хорезми (Algorithmi), который впервые выдвинул идею о том, что решение любой поставленной математической и философской задачи может быть оформлено в виде последовательности механически выполняемых правил, т.е. может быть алгоритмизировано. Поначалу он сформулировал правила четырех основных арифметических действий. Именно эти правила назывались алгоритмами, но затем термин получил дальнейшее развитие в первую очередь в математике – алгоритмом стал называться любой способ вычислений, единый для некоторого класса исходных данных, например, нахождение производной функции.

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

Приведем некоторые интуитивные толкования понятия алгоритма.

В математике алгоритм - "любая система вычислений, которая выполняется за строго определенными правилами, и которая после определенного числа шагов, наверно, приводит к решению поставленной задачи" (А.М. Колмогоров).

Или алгоритм - "точное предписание, что определяет вычислительный процесс, который приводит от входных данных, которые варьируются, к искомому результату" (А.А. Марков).

В информатике алгоритм - некоторый конечный набор команд (директив, приказов, операций), выполнение которых через конечное количество шагов приводит к решению поставленной задачи.

До 1950 года слово “алгоритм” чаще всего ассоциировалось с алгоритмом Евклида – нахождения наибольшего общего делителя (НОД) двух целых чисел.

Алгоритм Е (Алгоритм Евклида). Даны два целых положительных числа m и n. Требуется найти их НОД. Для простоты, пусть m>=n (хотя можно этого и не предполагать, т.к. при делении меньшого числа на большее частное равно нулю, а остаток будет равным n).

Е1. (Нахождение остатка). Разделим m на n, и пусть остаток от деления будет r (0<=r<n).

Е2. (Сравнение с нулем). Если r = 0, то вычисление алгоритма прекращается; n – искомое значение

Е3. (Замещение). Присвоить m = n, n = r и перейти к шагу Е1.

Разумеется, у Евклида этот алгоритм сформулирован не совсем так, но мы записали его основную идею в словесном виде, т.е. на естественном языке. Давайте в качестве примера разберем алгоритм Евклида. Предположим, что m = 51, n = 68; начнем с шага Е1. Деление m на n дает частное равное нулю, а остаток – r = 51. Переходим к шагу Е2. Поскольку r не равно 0, то переходим к Е3. На шаге Е3 присваиваем m = 68, n = 51. Очевидно, что если первоначально m < n, то частное на шаге Е1 всегда оказывается равным нулю и всегда в ходе выполнения алгоритма всегда происходит взаимный обмен значений переменных m и n. Поэтому для эффективности можно добавить шаг Е0.[Гарантировать, что m >= n], т.е. при m < n , выполнить взаимный обмен m и n. В результате алгоритм изменится незначительно, но зато время его выполнения сократится.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]