2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

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

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



Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Задача на машину Тьюринга
Сообщение26.11.2006, 20:04 


08/10/05
49
Уже который день бьюсь над следующей задачей:
Построить машину Тьюринга, которая останавливается тогда и только тогда, когда на ленте присутствует две последовательности из единиц одинаковой длины. Лента бесконечная. Входной алфавит: {0,1}. Дополнительные символы использовать запрещается.

Люди, помогите! Задача не поддаётся :( Или может быть она не имеет решения?..

 Профиль  
                  
 
 
Сообщение26.11.2006, 22:51 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Мне кажется (я давно забыл, что такое м.Т.), что в Вашей постановке задача неразрешима. Мое подозрение связано с тем, что негде хранить более чем конечную информацию. Это приводит к регулярным языкам. Можно рассмотреть ленту, первоначально заполненую … 8, 0, 6, 0, 4, 0, 2, 0, 1, 0, 3, 0, 5, 0, 7 … (0 — одинокий 0, 1,2,3,… — соответствующее число 1), маркер на нуле между 2 и 1. Тогда нам нужно хранить произвольно большую информацию до повторения.

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

 Профиль  
                  
 
 
Сообщение26.11.2006, 22:59 
Модератор
Аватара пользователя


11/01/06
5702
Дык надо просто реализовать сортировку пузырьком:
т.е. располагать единичные слова в порядке $w_1, w_, \dots, w_n$ так, чтобы
$|w_1| < |w_2| < \dots < |w_n|$
причем между каждыми двумя соседними словами ровно 1 ноль.
С приходом каждого нового единичного слова w', оно "всплывает" в нужную позицию путем последовательного обмена:
$w_1 0 w_2 0 \dots 0 w_n 0 w'$
$w_1 0 w_2 0 \dots 0 w' 0 w_n$
$\dots$
$w_1 0 w_2 0 \dots 0 w_k 0 w' 0 w_{k+1} 0 \dots 0 w_n$
так что $|w_k| < |w'| < |w_{k+1}|.$
Операция обмена двух соседних единичных слов $1^x$ и $1^y$ в случае $x>y$ может быть реализована на машине Тьюринга, при этом так же можно проверять равенство длин и останавливаться, если $x=y$.

 Профиль  
                  
 
 
Сообщение27.11.2006, 01:53 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
"""Меня терзают смутные сомнения.""" Предполагая, что подпрограмма перестановки сделана, где гарантия, что пузырек остановится? (Может быть, мой вопрос сводится к тому, как сделать маркер начала. А это, в свою очередь, к вопросу, как сделать 00.)

 Профиль  
                  
 
 
Сообщение27.11.2006, 02:29 
Модератор
Аватара пользователя


11/01/06
5702
незваный гость писал(а):
:evil:
"""Меня терзают смутные сомнения.""" Предполагая, что подпрограмма перестановки сделана, где гарантия, что пузырек остановится? (Может быть, мой вопрос сводится к тому, как сделать маркер начала. А это, в свою очередь, к вопросу, как сделать 00.)

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

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

 Профиль  
                  
 
 
Сообщение27.11.2006, 08:26 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
maxal писал(а):
Сначала пишем прогу для случая, когда два 00 есть, а потом еще ее модификацию для случая, когда есть только один 0: у самого первого слова заменяем первую единицу на 0 (получая таким образом два нуля) и помним этот факт, когда дело доходит до сравнения/обмена первого слова со вторым по счету.

Как прекрасен этот мир! и как изящен. Sapienti sat est. Остальное — излишние детали.

Спасибо!

 Профиль  
                  
 
 
Сообщение27.11.2006, 23:47 
Аватара пользователя


27/11/06
141
Москва
А можно лентну изменять? По-моему если можно стирать единицы, то задачка совсем простая. Просто мы поочереди стрираем по одной единицы из двух последовательностей когда одна из них кончается, проверяем есть ли что-нибудь во второй

 Профиль  
                  
 
 
Сообщение27.11.2006, 23:49 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Сомик писал(а):
Просто мы поочереди стрираем по одной единицы из двух последовательностей когда одна из них кончается, проверяем есть ли что-нибудь во второй

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

 Профиль  
                  
 
 
Сообщение29.11.2006, 13:40 
Аватара пользователя


27/11/06
141
Москва
Забавно.
Если на ленте бесконечно много, тобишь счетное число последовательностей, то эта задачка уже не совсем на машины тюринга... ну в смысле там ведь всегда полагается, что в любой момент времени занято лишь конечное число ячеек.

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

Тобишь сводим задачу для последовательностей длины $n_1, \dots, n_k$ к последовательностям $n_1-1, \dots, n_k-1$ и т.д.

 Профиль  
                  
 
 
Сообщение29.11.2006, 13:45 
Модератор
Аватара пользователя


11/01/06
5702
Сомик писал(а):
Забавно.
Если на ленте бесконечно много, тобишь счетное число последовательностей, то эта задачка уже не совсем на машины тюринга... ну в смысле там ведь всегда полагается, что в любой момент времени занято лишь конечное число ячеек.

Кто вам такое сказал?

 Профиль  
                  
 
 
Сообщение29.11.2006, 20:57 
Заслуженный участник
Аватара пользователя


23/07/05
17976
Москва
maxal писал(а):
Сомик писал(а):
Забавно.
Если на ленте бесконечно много, тобишь счетное число последовательностей, то эта задачка уже не совсем на машины тюринга... ну в смысле там ведь всегда полагается, что в любой момент времени занято лишь конечное число ячеек.

Кто вам такое сказал?


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

Это не означает, что нельзя рассматривать бесконечные входные слова, но это несколько нестандартно.

 Профиль  
                  
 
 
Сообщение29.11.2006, 21:14 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Не совсем. В задаче указано, что она останавливается тогда, и только тогда, когда есть два одинаковых слова.

Кроме того, предположим, на ленте записано конечное, но неизвестное число единиц. Как алгорифм Сомика найдет конец (границы области)? Между 1цами могут быть произвольные пропуски.

 Профиль  
                  
 
 
Сообщение29.11.2006, 21:22 
Заслуженный участник
Аватара пользователя


23/07/05
17976
Москва
незваный гость писал(а):
Кроме того, предположим, на ленте записано конечное, но неизвестное число единиц. Как алгорифм Сомика найдет конец (границы области)? Между 1цами могут быть произвольные пропуски.


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

 Профиль  
                  
 
 
Сообщение29.11.2006, 21:24 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Someone писал(а):
Но лента с бесконечным количеством записей - это действительно что-то нестандартное.

Почему же с бесконечным? С конечным. Но неизвестным. И без явного маркера конца данных.

Кроме того, в задаче явно оговорено требование: машина не всегда должна останавливаться. Поэтому неопределенность границы — не проблема.

 Профиль  
                  
 
 
Сообщение29.11.2006, 23:20 
Модератор
Аватара пользователя


11/01/06
5702
Someone писал(а):
Но лента с бесконечным количеством записей - это действительно что-то нестандартное.

Пересмотрел в интернете несколько определений МТ - нигде не оговаривается, что входные данные являются конечной последовательностью.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2, 3  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group