#algorithm #theory #automata #turing-machines
#алгоритм #теория #автоматы #машины Тьюринга
Вопрос:
Итак, язык выглядит следующим образом:
E = {#x1 # x2 … #xi где алфавит равен {0,1} * и ни одна строка не может быть дубликатом другой строки }
Я пытаюсь создать диаграмму состояний для этого, но еще до этого я придумывал алгоритм для ее решения, но проблема, с которой я сталкивался, заключалась в том, что всякий раз, когда я сравниваю первые две строки, мне приходится отмечать каждый символ символом ‘x’. Так как же мне восстановить первую строку? Например, сначала я сравниваю x1 и x2, к тому времени, когда я закончу, в x2 и все символы в x1 будут отмечены ‘x’, поэтому, когда я перейду к x3, x1 не с чем сравнивать.
Комментарии:
1. этот вопрос, вероятно, лучше подходит для cs.stackexchange.com
Ответ №1:
Вместо того, чтобы помечать рассматриваемые символы крестиком, пометьте их специальными символами, соответствующими помечаемым символам. Итак, вместо того, чтобы писать x для 0 и x для 1, напишите a для 0 и b для 1. Фактически, продолжайте и используйте символы c и d также для замены значений в «самой ранней вещи, которую мне нужно проверить», чтобы вы могли проверить все пары. Высокоуровневое описание машины Тьюринга, использующей эту стратегию, выглядит следующим образом:
- начните считывать первые входные данные, заменив 0 на c и 1 на d
- перейдите ко второму входному сигналу, и если второй входной сигнал пока совпадает, запишите a для 0 и b для 1, затем продолжайте. Если это не совпадение, мы знаем, что эти входные данные не совпадают, и мы можем начать сравнивать другие пары. Измените входные данные, которые вы проверяете, только на a и b, и сбросьте первый ввод только на 0 и 1.
- повторите этот процесс, пропуская все a и b, которые уже есть, чтобы проверить все пары, включающие первый член.
- как только вы проверите все пары, включающие первый член, вычеркните его (возможно, используя x), а затем повторите весь процесс с оставшимися входными данными
Это проверит все пары и сработает, как ожидалось. Ключ, как вы правильно предположили, в способности восстанавливать части входных данных, что означает, что вам нужны дополнительные символы в вашем ленточном алфавите. Никогда не стесняйтесь вводить ленточные символы — они бесплатны и никогда не повредят.