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

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

Программная реализация логических функций и автоматов.

Представление автомата схемой из элементов - это исторически первый и наиболее исследованный вид структурной реализации автомата. Другой ее вид - реализация автомата программой. Здесь мы ограничимся вопросами программной реализации комбинационных логических автоматов, т. е. систем логических функций.

Под программой будем понимать пронумерованную последовательность команд k1, … , ks, взятых из некоторого фиксированного набора (системы команд). Программа работает над конечным множеством пронумерованных (или поименованных ) двоичных ячеек. Номер (или имя ) ячейки называ­ется ее адресом ; именем ячейки часто будет служить имя логической пе­ременной, значения которой хранятся в этой ячейке.

Система команд содержит команды-операторы вида b:=f(a1, … , ap) (выполнить операцию над содержимым ячеек a1, … , ap и результат поло­жить в ячейку b ) и двухадресные условные переходы двух видов: 1) “если а, то i, иначе j ”( если a = 1, то перейти к выполнению команды kί , иначе перейти к kj ) ; 2 ) ” если ā ( a = 0 ) , то i , иначе j ”. Операция f ( a1 , . . . , ap ) - это логическая функция p переменных ; в частности, она может быть константой 0 или 1. Если j - номер следующей команды, то переход можно считать одноадресным : ” если a, то i, ( иначе перейти к следую­щей команде ) ”, а если i = j, то безусловным : ” перейти к i “. Любая из команд указанных типов может быть заключительной, что указывается сло­вом ” конец “.

Процессом вычисления программы k1, . . . , ks называется после­довательность шагов k ( 1 ), k ( 2 ), . . . , k ( t ), на каждом из которых вы­полняется одна команда программы. Эта последовательность определяется так : 1) k ( 1 ) = k1; 2) если k (1) = kr - оператор, то k ( i + 1 ) = kr+1 ; 3) если k ( 1 ) - условный переход, то номер команды k ( i + 1 ) указывается этим переходом; 4) если k ( i ) - заключительная команда, то процесс вычисления останавливается после ее выполнения. Число t называется вре­менем ее выполнения.

Программа П вычисляет (или реализует ) логическую функцию f ( х1 , . . . , хn ) = у, если для любого двоичного набора σ = ( σ1 , . . . , σn ) при на­чальном состоянии памяти х1 = σ1 , х2 = σ2, . . . , хn = σn (состояние ос­тальных ячеек несущественно ) программа через конечное число шагов ос­танавливается и при этом в ячейке у лежит величина f ( σ1 , . . . , σn).

Если под сложностью схемы, реализующий автомат, обычно понимается число элементов в схеме, то сложность программы можно понимать в различных смыслах: 1) число команд в тексте программы; 2) объем промежуточной памяти, т.е. число ячеек для хранения промежуточных результатов вычислений; 3) время вычисления, которое будет характеризоваться двумя величинами: средним временем tср (П) =1/2n åτр(σ) и максимальным временем tмакс(П) = maxs τр(σ), где сумма и максимум бе­рутся по всем 2n двоичным набором σ, а τр - время работы программы П на наборе σ.

Любой схеме, реализующей функцию f и содержащей N элементов, не­трудно поставить в соответствие программу, реализующую f и состоящую из N команд, следующим образом. Занумеруем элементы схемы числами 1,2, . . . , n так, чтобы на любом пути от входа к выходу номера элемен­тов возрастали; при этом номер 1 получит один из входных элементов, а номер N - выходной элемент. Пусть элемент еί схемы реализует функцию φί и к его входам присоединены выходы элементов еj1, . . . , еjp ( некоторые из них, возможно, являются входами схемы). Поставим элементу еί в соот­ветствие либо ячейку аί и команду аί = φί ( аj1 , . . . , аjp ), если ί ≠ N; либо ячейку у и команду << у : = φN( аj1, . . . , аjp ) конец >>, если ί = N. Полу­чим программу, не содержащую условных переходов ( такие программы будем называть операторными ), в которой порядок команд в точности со­ответствует нумерации элементов в схеме, а система команд – базису схемы.

Проблемы синтеза операторных программ в основном сводятся к про­блемам синтеза схем: в частности вопросы функциональной полноты сис­темы команд и минимизации собственного текста операторной программы совпадают соответственно с задачами функциональной полноты системы функций и о минимизации схем. Поскольку операторная программа не содержит условных переходов, время ее вычисления на любом наборе одно и то же. Отсюда tmax = tcp = N, то есть оба вида временной сложности совпадают со сложностью текста программы, и, следовательно, при доста­точно больших n почти для всех функций близки к 2n ⁄ n. Наоборот, про­блема минимизации памяти ( за счет многократного использования одной ячейки для нескольких промежуточных результатов ) для операторных про­грамм является нетривиальной комбинаторной задачей.

Другой ”крайний “ вид программ, вычисляющих логические функции, - программы, состоящие из команд вида у : = σ ( σ = 1 или σ = 0 ) и услов­ных переходов. Такие программы называются бинарными программами. Всякую булеву функцию F , содержащую N букв, можно реализовать би­нарной программой, вычисляющей F за время tmax = N и содержащей N команд условных переходов ( а также две команды у = 1 и у = 0, которые в оценках не участвуют ). Для описания метода реализации используем представление программы в виде графа в котором вершины соответствуют командам, а ребра – переходам. Пусть G1 - граф программы для функций f1 с начальной вершиной v10 и двумя заключительными вершинами v1z0 ( с командой у = 0 ) и v1z1 ( с командой у = 1 ) ; G2 - граф программы для f2 с началом v20 и концами v2z0 и v 2z1. Тогда: 1) программа, граф G которой получен присоединением G 2 к ”нулю“ G 1 ( то есть отождествлением вер­шин v 1z0 и v 201 ; команда у : = 1 при этом отбрасывается, вычисляют функ­цию f = f 1 / f 2; 2) программа, граф G которой получен присоединением G 2 к ”единице“ G 1 ( отождествляем v 1z1 и v20 ), вычисляет f = f 1 &f 2; 3) программа, граф которой получен из G 1 заменой команд в v 1z0 и v 1z1 на инверсные, вычисляет f 1. Заметим, что в графе G - две нулевые заклю­чительные вершины. Их необходимо отождествлять.








Дата добавления: 2015-10-05; просмотров: 994;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.