КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
МАШИНА ТЬЮРИНГАЯ толком не смог найти конкретной информации, но вот пару сайтов, в которых есть информация: http://inf.1september.ru/articlef.php?ID=200600802 http://habrahabr.ru/post/189064/ РАМ-машина РАМ-машина — абстрактная вычислительная машина, обладающая полнотой по Тьюрингу, и принадлежащая классу регистровых машин. Она эквивалентна универсальной машине Тьюринга, при этом более наглядна и удобна в доказательстве корректности алгоритмов. В этом топике я расскажу, как она устроена и приложу ссылки на работающую имплементацию эмулятора РАМ-машины с некоторыми интересными примерами. Абстрактная модель РАМ-машины (RAM: Random Access Machine) предполагает наличие бесконечного набора регистров, каждый из которых способен хранить целое число любой длины. Индекс регистра может быть любым целым числом (в т.ч. отрицательным). Программа для РАМ-машины — конечный набор инструкций, модифицирующих регистры памяти; можно смотреть на это как на очень простой ассемблер. Изучение машины начнем с рассмотрения набора команд. HALT
READ
WRITE
LOAD x / [x] / [[x]]
STORE [x] / [[x]]
NEG
LSHIFT x / [x] / [[x]]
RSHIFT x / [x] / [[x]]
ADD x / [x] / [[x]]
Ну и напоследок, пригодится для организации циклов и условий: JUMP метка
JG метка
Вот и все! А как же другие арифметические операции? Да, классическая модель не предполагает избыточных инструкций, поэтому их придется реализовывать через сложение. В качестве небольшой головоломки предлагаю реализовать:
· умножение m на n (быстрее чем за O(max(m,n))); · квадрат m (быстрее чем за O(m)); · степень m (быстрее чем за O(m * log(m))); · корень произвольной степени (вспомнить метод Ньютона).
Одним из простейших свойств машины является легкость обнаружения deadlock-состояния (стабильного бесполезного состояния): если при переходе к той же метке значения регистров остались прежними — то мы «зависли». Прилагаю пример простейшей программы (надеюсь, самоочевидной), которая суммирует N чисел введенных с клавиатуры (другие примеры в архиве с исполняемым файлом эмулятора):
|