Смекни!
smekni.com

Информатика и компьютерные науки (стр. 2 из 14)

РФ строится здесь на множестве целых неотрицательных чисел следующим образом: задаются 3 базовые РФ, для которых сопутствующие алгоритмы - одношаговые. Затем используются 3 приема, называемые операторами подстановки, рекурсии и минимизации, с помощью которых на основе базовых функций строятся более сложные РФ. По существу эти операторы - алгоритмы, комбинируя которые получают более сложные алгоритмы.

Простейшие базовые функции:

Функция произвольного количества аргументов тождественно =0. Знак функции jn - где n - количество аргументов.
Сопутствующий алгоритм: если знак функции jn то значение функции 0.
Например: j1(3)=0, j3(4, 56, 78)=0;

Тождественная функция. Знак функции yn,i . 0<i<=n. n - количество аргументов, i - номер аргумента. Сопутствующий алгоритм: если знак функции yn,i то значение функции - значение i-го аргумента, считая слева направо.
Например: y3,2(3,22,54)=22;

Функция получения последователя. Функция одного независимого аргумента. Знак функции - l. Сопутствующий алгоритм: если знак функции l то значение функции - число, следующее за значением аргумента.
Например: l(5)=6 или 5'=6.

3 приема построения сложных РФ.

Оператор подстановки. F(f1, …, fn).
Вычисляются значения функций f1, …, fn и используются как аргументы при вычислении F.
t(y)= l(l(y))= l(y')=y''.

Оператор рекурсии R. f::= R[f1, f2, x(y)].

f - функция n аргументов, f1 - n-1 аргумента, f2 - n+1 аргумента, причем n-1 аргументов функций совпадают, а 2 следующих аргументов называются дополнительными. Один из них - х - называется главным доп. аргументом(ГДЭ). Он войдет в определяющую функцию. Другой y - вспомогательный доп. аргумент(ВДЭ), использующийся при построении новой функции.

Говорят, что оператор рекурсии строит новую функцию по 2 условиям:

f(0)=f1, f(i')=f2(i, f(i)).

Значением искомой функции при нулевом значении ГДЭ считать значение функции f1, а значением новой функции для каждого последующего значения ГДЭ считать значение функции f2 для предыдущего значения ГДЭ и для значения ВДЭ, совпадающего со значением искомой функции на предыдущем шаге.

Например:

PR(x) ::= R[j0,y2,1(x,y),x(y)]

PR(0) = j0 = 0

PR(1) = y2,1(0,PR(0))= 0

PR(2) = y2,1(1,PR(1)) = 1

Оператор минимизации или построение по первому нулю.

f ::=m[f1, (x)] f(x1, …, xn)=m(f1(x1, …, xn, y), (y))

с помощью функции f1 n+1 аргументов и дополнительного исчезающего аргумента.

Придавать последнему аргументу значения начиная с нуля, вычисляя при этом значение функции f1. Как только значение функции f1=0 значение дополнительного аргумента принимаем за значение искомой функции для тех главных аргументов, для которых вычислялось значение функции f1.

Например:

r(x)::=m(y2,1(x, y), (y)]

r(0)=0

r(i) = y2,1(i, y) - не определено для i<>0.

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

Например:

y=x+1 - совпадает с базовой.

w=x+y - подстановка в (z+1) вместо z функции y3,3 (x, y, z). Получим f*(x, y, z)

Затем воспользуемся следующим:

S(x, y) ::= f1[y1,1(x), f*(x, y, z); y(z)]

S(x, 0) =y1,1 (x) = x

s(x, 1) = f*(x, 0, S(x, 0)) = s(x, 0) + 1

Класс вычислимых функций исчерпывается классом РФ. Каков бы ни был алгоритм, перерабатывающий последовательность целых неотрицательных чисел в целые неотрицательные числа найдется сопутствующий некоторой РФ алгоритм, эквивалентный данному и наоборот. Если нельзя построить РФ, то нельзя разработать алгоритм решения задачи.

. Формальное описание алгоритма через замену текстов

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

Одной из простейших концепций элементарных шагов переработки последовательностей знаков является замена определенных подслов (образцов) в обрабатываемом слове другими словами. Эта концепция ведет к алгоритмам в форме систем текстовых замен на последовательнос­тях знаков.

Пусть V - запас знаков. Пара (v, w) e V* х V* называется заменой над V. Замена часто записывается в виде

v ® w

Конечное множество R замен будем в дальнейшем называть системой текстовых замен (СТЗ) над V. Элементы этой системы будем называть также правилами текстовых замен (ПТЗ). СТЗ служат для представления алгоритмов. Отдельные шаги этих алгоритмов состоят, таким образом, в применении правил замен.

Замена

s ® t

называется применением правила v ® w, если имеются слова a, v, w, z Î V* такие, что справедливо

s = а ° v ° z, t = а ° w ° z.

Слово s Î V* называется терминальным (или терминалом} в R, если не существует слова t Î V* такого, что справедливо следующее: замена

s®t

является применением какого-либо правила из R. Таким образом, к терминальному слову s нельзя больше применить никакого правила замены.

Через повторное применение ПТЗ, исходя из начально заданного слова t0, возникают вычисления. Если t0, t1, ..., tn принадлежат V* и

ti-->ti+1

есть применение правила г из R для всех i,0<=i<=n, то последо­вательность (tj) 1<=i<=n называют (конечным) вычислением (последовательностью вычислении) над R для t0. Часто вычисление записывается следующим образом:

t0 ® t1 ®…® tn

Слово t0 называется также входом для вычисления. Если tn есть терминал, то вычисление называется завершающимся (конечным) с результатом tn. Слово tn называется также выходом для R при входе t0. Бесконечное вычисление (последовательность вычислений) (ti)iÎN из слов ti ÎV*, для которых ti-->ti+1 есть применение правил замен из R для всех i Î N, называется незавершающимся (бесконечным) вычислением.

Пример (вычисления по СТЗ).

(1) Для системы текстовых замен Q над множеством символов {L, О}, которая состоит из следующих правил:

LL ® е, О ® е, через последовательность

LOLL ® LO ® L

задается завершающееся вычисление для входного слова <LOLL> с результатом <L>.

(2) Для СТЗ над {L, О}, состоящей из правил О ® OO, О® L,

для входа <O> последовательность вычислений О ® OO ® OL ® LL

является завершающимся вычислением с выходом <LL>, а последовательность

о ->. оо -> ооо ->. оооо ->...

является незавершающимся вычислением.

Система текстовых замен R в силу следующего предписания определяет алгоритм текстовых замен (АТЗ), который использует слова над V в качестве входа и выхода. Для входного слова t Î V* алгоритм работает следующим образом:

"Если одно из правил множества R применимо к слову t (т. e. существует слово s Î V*, для которого имеет место: l -» s есть применение правила из R), то примени правило к t и затем примени снова этот же алгоритм к слову s; в противном случае прекрати выполнение алгоритма".

Слово t служит входом для алгоритма; если (после конечного числа шагов) возникает терминальное слово, т. e. слово, к которому неприменимо никакое правило, то это слово является выходом (результатом вычислений). Если такая ситуация никогда не возникает, то алгоритм не завершается. Алгоритмы, определенные таким образом с помощью СТЗ, всегда являются последовательными. При этом выбор применяемого правила является недетермннистическим.

Часто для АТЗ в качестве входов используют только слова совершенно определенной формы (нормальная форма). Определенные знаки не входят в эти слова (а также и в выходные слова) - эти знаки, используются исключительно как вспомогательные знаки в словах, возникающих в процессе вычислений.

Примеры (алгоритмы текстовых замен).

(1) Сложение двух натуральных чисел, представленных в виде количества штрихов

Натуральное число представляется в виде количества штрихов с ограничительными скобками, т. e. число nÎN представляется словом <| |...|>, причем внутрь скобок входит n штрихов. В этом случае алгоритм состоит из одного единственного правила замены (е обозначает пустое слово):

> + < ® е

Для входа <|...|> + <|...|> алгоритм дает сумму штрихов.

(2) Умножение двух натуральных чисел (в таком же представлении)

Применяются вспомогательные знаки d, e, m. Алгоритм состоит из следующих правил замен:

|>*< ® >*<d

d| ®. |md

dm ® md

d> ® >

<>*< ® <e

e| ® e

em ® |e

e> ® >

Для входного слова <|...|> * <|...|> с п1 штрихами в первом операнде и п2 штрихами во втором операнде алгоритм дает выходное слово <|...1> с п1 * п2 штрихами.

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

Для входа <||> * <|||> возникает показанный на рисунке граф возможных вычислении. Все вычисления заканчиваются получением слова <|||||| >. Этот алгоритм подстановки недетерминистический, но детерминированный, т. е. дает, несмотря на различные вычисления, всегда один и тот же результат.

Алгоритмы в виде текстовых замен в общем случае являются недетерминистическимн и недетерминированными. Для входного слова t суще­ствуют, как правило, многие разные вычисления с различными результа­тами. При этом для одной и той же задачи могут существовать как завер­шающиеся, так и незавершающиеся вычисления.