在运行时创建 DFA.多少个州
Creating a DFA at run time. How many states?
我目前正在开发一个程序,该程序将采用一种语言的英文描述,然后使用该描述为这些规范创建DFA。我允许某些操作,例如{w | w开头有子字符串01}和其他选项,例如偶数奇数子字符串,比k子字符串更少或完全少等。用户还选择字母表。
我的问题是我怎么知道我需要多少个状态? 由于用户给了我我的字母表和规则,因此在运行时之前我什么都不知道。我以前创建过 DFA/转换表,但在这些情况下,我知道我的 DFA 是什么,并且可以在类中声明它或将其静态。我应该使用5图皮尔(Q,∑,δ,q0,F(吗?还是采取不同的方法?任何帮助我解决这个问题都是值得赞赏的。
我的问题是我怎么知道我需要多少个州?
你不会。
您可以将转移函数表示为 (q, σ( ∈ (Q, Σ( 到 q ∈ Q 对的std::unordered_map
using state = int;
using symbol = char;
using tranFn = std::unordered_map<std::pair<state, symbol>, state>;
// sets up transition function, the values can be read at runtime
tranFn fn;
fn[{0, 'a'}] = 1;
fn[{0, 'b'}] = 2;
fn[{1, 'a'}] = 1;
fn[{1, 'b'}] = 0;
fn[{2, 'a'}] = 2;
fn[{2, 'b'}] = 2;
// run the dfa
state s = 0;
symbol sym;
while(std::cin >> sym)
s = fn[{s, sym}];
std::cout << s;
顺便说一句,如果 1 是上述 DFA 中的接受状态,则它完全接受 a(a + ba(*
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 在内存不足之前,我可以声明多少个 const 变量?
- 可以读入进程内存的最大块大小是多少?
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- 在运行时创建 DFA.多少个州