Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TA / Конспект лекций по теор алгоритм / Конспект лекций / ЭФФЕКТИВНОСТЬ АЛГОРИТМОВ..doc
Скачиваний:
65
Добавлен:
14.04.2015
Размер:
356.35 Кб
Скачать

1.3 Язык Упрощенный Алгол.

Основные меры сложности выражаются в терминах определения1 для РАМ и машин Тьюринга, но вообще говоря, нет необходимости описывать алгоритмы в терминах столь простых машин. Для более наглядного описания алгоритмов мы введем некоторый язык высокого уровня, называемый Упрощенным Алголом. Программу на Упрощенном Алголе можно перевести непосредственно в программу для РАМ с помощью соответствующего транслятора. Однако нас не интересуют детали перевода Упрощенного Алгола в конкретную программу для РАМ. Для наших целей нужно рассматривать лишь время и память, необходимые для выполнения команд, составленных оператором на Упрощенном Алголе.

Упрощенный Алгол отличается от всех принятых языков программирования тем, что он разрешает использовать любой тип математических предписаний, если только их значения понятны, а перевод в команды РАМ очевиден. Этот язык не имеет также фиксированного набора типов данных. Переменные могут представлять целые числа, слова и массивы. Дополнительные типы данных - множества, списки, очереди и т.д. - можно вводить по мере необходимости. Формальное описание типов данных по возможности избегается. Тип данных какой-то переменной и ее область действия должны быть ясны по ее названию, либо по контексту.

В Упрощенном Алголе применяются традиционные конструкции математики и языков программирования, такие, как выражения, условия, операторы и процедуры.

Программа на Упрощенном Алголе - это оператор одного из следующих типов:

1) переменнаявыражение

2) if условие then оператор else оператор

3а) while условие do оператор

3б) repeat оператор until условие

4) for переменнаяисходное значение step размер шага

until заключительное значение do оператор

5) метка: оператор

6) goto метка

7) begin

блок

end

8а) procedure имя (список параметров): оператор

8б) return выражение

8в) имя процедуры (аргументы)

9а) read переменная

9б) write переменная

10) comment комментарий

11) любой другой произвольный оператор

Дадим краткую характеристику перечисленных операторов.

1. Временная сложность оператора присваивания определяется временем, которое затрачивается на вычисление значения выражение и присваивании этого значения переменной.

2. Вес if-оператора равен сумме весов, требуемых для вычисления значения и проверки его, и веса оператора, стоящего сразу за then, или оператора, стоящего за else, в зависимости от того, какой из них выполняется на самом деле.

3. Временная сложность операторов while и repeat определяется одинаково: вес этих операторов равен сумме весов всех проверок условия и всех выполненных операторов.

4. Вес for-оператора определяется аналогично while-оператору.

5. Меткам не приписывается никакого веса.

6. Основное применение goto-оператора - выход из while-операторов. Вес goto равен 1.

7. Последовательность операторов между begin и end образует оператор, который называется блоком. Вес блока равен сумме весов операторов, составляющих блок.

8. В Упрощенном Алголе процедуры можно определять и впоследствии вызывать. Определяются процедуры соответствующим оператором (оператор определения процедур)-см. 8а ,-аргументами которого являются формальные параметры.

Например, следующий оператор определяет процедуру-функцию MIN (определение меньшего числа в паре чисел):

procedure MIN(x, y)

if x>y then return y else return x;

Процедуры используются одним из двух способов. Один способ - в качестве функции. После того как процедура-функция описана, к ней можно обратиться в некотором выражении, вызывая ее имя с нужными аргументами. В этом случае последним оператором, выполняемом в данной процедуре, должен быть return-оператор(8б). Этот оператор приводит к вычислению выражения, следующего за выделенным словом return, и окончанию выполнения процедуры. Значением функции будет значение этого выражения. Например, QMIN(3+2, 7) приводит к тому, что Q получает значение 5. Выражения 2+3 и 7 называются фактическими параметрами этого обращения к данной процедуре.

Второй способ применения процедур состоит в вызове ее с помощью оператора вызова процедуры (8в). Этот оператор есть, по существу, имя процедуры, за которым идет список фактических параметров. Оператор вызова процедуры может изменить (и обычно изменяет) данные (значения переменных, массивов и т.д.) вызываемой программы. В определении вызываемой таким способом процедуры return-оператор не нужен. Завершение выполнения последнего оператора процедуры завершает и выполнение оператора ее вызова. Например, следующий оператор определяет процедуру INV(x, y) (взаимо замену):

procedure INV(x, y)

begin

tx;

xy;

yt;

end

Для обращения к этой процедуре можно было бы написать оператор вызова процедуры такого вида:INV(A[i], А[j]).

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

9. Вес read-оператора равен 1, а вес write-оператора на 1 больше вычисленного значения выражения, стоящего за словом write.

10. Вес comment-оператора равен 0.

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