我可以在图灵机中使用堆栈吗?
Can I use stack in Turing Machine?
我正在尝试设计接受语言 L = {w | 的图灵机anb2n} 其中 ∑ = {a, b}.
例如机器接受输入:"aabbbb" 但不接受 "aabb"
我的代码在下面是关于该语言的;
#include <iostream>
#include <string>
using namespace std;
char stack[30];
int top = -1;
void push(char ch){
stack[++top] = ch;
}
char pop(){
return stack[top--];
}
int main(){
string str;
char flag = 0;
cout<<"Enter input string: ";
cin>>str;
for(int i=0; i<str.length(); i++){
if(str[i] == 'a')
push(str[i]);
else if(str[i] == 'b'){
if(top<0 || i>=str.length()-1 || str[++i] != 'b'){
flag = 1;
break;
}
pop();
}
else{
flag = 1;
break;
}
}
if(flag == 1 || top != -1)
cout<<"Input unacceptable by turing machine.\n";
else
cout<<"Input acceptable by turing machine.\n";
system("PAUSE");
return 0;
}
问题是:这是图灵机吗?或者我可以在图灵机中使用堆栈吗?
谢谢
您可以使用堆栈。
首先,假设您使用了图灵机,并向其添加了另一条轨道。显然,可以为堆栈使用附加轨道。
不过,多轨图灵机是equivalent到图灵机,并且有一种机械方式可以将前者转换为后者。所以stack-track可以折叠成一个普通的图灵机。
我正在尝试设计接受语言 L = {w | 的图灵机anb2n} 其中 ∑ = {a, b}.
例如机器接受输入:"aabbbb" 但不接受 "aabb"
我的代码在下面是关于该语言的;
#include <iostream>
#include <string>
using namespace std;
char stack[30];
int top = -1;
void push(char ch){
stack[++top] = ch;
}
char pop(){
return stack[top--];
}
int main(){
string str;
char flag = 0;
cout<<"Enter input string: ";
cin>>str;
for(int i=0; i<str.length(); i++){
if(str[i] == 'a')
push(str[i]);
else if(str[i] == 'b'){
if(top<0 || i>=str.length()-1 || str[++i] != 'b'){
flag = 1;
break;
}
pop();
}
else{
flag = 1;
break;
}
}
if(flag == 1 || top != -1)
cout<<"Input unacceptable by turing machine.\n";
else
cout<<"Input acceptable by turing machine.\n";
system("PAUSE");
return 0;
}
问题是:这是图灵机吗?或者我可以在图灵机中使用堆栈吗?
谢谢
您可以使用堆栈。
首先,假设您使用了图灵机,并向其添加了另一条轨道。显然,可以为堆栈使用附加轨道。
不过,多轨图灵机是equivalent到图灵机,并且有一种机械方式可以将前者转换为后者。所以stack-track可以折叠成一个普通的图灵机。