发这个没有别的意思
有很多转行/自学/经验少的旁友很好奇真正的面试题是什么样子的,也想检验下自己什么水平
正好最近朋友给我看了这个真实的例子,就发来给大家看看
本题不涉及任何特定的算法,数学与专门的理论知识
考察的是基本的逻辑思维,抽象思维,基本的算法分析与动手能力


如图有限状态机
A,B,C三个状态
从左边start进入A开始运行,到达最右边的end状态结束
每个状态节点有若干条边来标识状态转换的路径
每个边上的符号代表一个概率p,表示到达这个节点后有p的概率走这条路线
概率值精确到2位小数
每个状态所有出去的路径概率之和为1
比如a1+a2+a3+a4=1
每到达一个状态后输出该状态的字母
如果到达end则停止输出
那么根据这个规则,可以随机输出一系列字符串,例如:
AABC
ABCCCAABC
等等

问题:
1. 写一个程序实现上述字符串输出
2. 给定一个字符串长度N,写一个函数计算1中的算法最终输出字符串长度为N的概率。
3. 给出2中算法的复杂度,是否有优化方法。
4. 快下班的时候,boss:小李啊,客户突然有个需求,要通过读取配置文件得到状态机信息,改下你的程序以支持用户输入的任意状态机,改完了再走吧,打车公司报销

要求:
手写代码
编码限时15分钟 (只要有核心功能即可,标准库随便用)
复杂度什么的写完代码再慢慢聊