二叉树遍历的非递归实现
先序遍历
stack<TreeNode*> S;
void per(TreeNode* root){
TreeNode* now = root;
while(true){
while(now){
cout << now -> val << '\t';
……继续阅读 »
yanzexi
1年前 (2023-10-14) 192浏览 0评论
1个赞
非确定性动作的搜索
引入
当环境部分可观测时,智能体并不确定它处于什么状态;当环境是非确定性的时,智能体不知道在执行某个动作后将转移到什么状态。这意味着智能体所思考的不再是“我现在位于$s_1$状态,如果我执行$a$动作,我将会进入$s_2$状态”,而是“我现在位于$s_1$或$s_3$状态,如果我执行$a$动作,我将会进入$s_2$、$s_4……继续阅读 »
yanzexi
1年前 (2023-10-14) 229浏览 0评论
1个赞
树
引入
树中的元素之间并不像顺序表和链表一样,存在天然的直接后继或直接前驱关系。不过只要附加某种约束(比如遍历),也可以在树中的元素之间确定某种线性次序,因此树属于半线性结构(semi-linear structure)。以下是一些易混淆的概念:
分支结点:除叶结点外的其……继续阅读 »
yanzexi
1年前 (2023-10-13) 195浏览 0评论
1个赞
在一个非确定性的世界中,智能体将需要一个条件规划,并根据它所观测到的情况执行不同的动作。
之前的搜索问题关注于找到一条通过搜索空间的路径,但有时只需要关心最终状态,而不是到达状态的路径。局部搜索($local$ $search$)算法的操作是从一个起始状态搜索到其相邻状态,它……继续阅读 »
yanzexi
1年前 (2023-10-13) 221浏览 0评论
1个赞
$KMP$算法
$next$数组
$next$数组的实质是一个前缀表,其作用是用来回退,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。具体来说前缀表记录下标$i$之前(包括$i$)的字符串中,有多大长度的相同前缀后缀,即最长公共前后缀。
文章中字……继续阅读 »
yanzexi
1年前 (2023-10-12) 162浏览 0评论
1个赞
启发式函数对性能的影响
影响与分析
一种描述启发式函数质量的方法是有效分支因子$b^*$。如果针对一个特定问题,$A^*$搜索所生成的总节点数是$n$,而解的深度是$d$,那么$b^*$就是深度为$d$的均衡树要包含$n + 1$个节点所必需的分支因子。因此有:
$$
n+1=1+b^*+\left( b^* \right) ^2+\cdot ……继续阅读 »
yanzexi
1年前 (2023-10-12) 187浏览 0评论
1个赞
表达式计算
后缀表达式计算
int op(int a, int b, char Op){
if(Op == '+'){
return a + b;
}
if(Op == '-'){
return a - b;
}
if(Op == '*'){
return a + b;
}
if(Op =……继续阅读 »
yanzexi
1年前 (2023-10-11) 174浏览 0评论
1个赞
满意搜索
不可容许的启发式函数
$A^*$搜索有很多好的性质,但它扩展了大量节点。如果愿意接受次优但“足够好”的解——即满意解,则可以探索更少的节点(花费更少的时间和空间)。
如果允许$A^*$搜索使用不可容许的启发式函数,那么算法就有可能错过最优解,但是可能更准确,从而减……继续阅读 »
yanzexi
1年前 (2023-10-11) 182浏览 0评论
1个赞
有信息搜索($informed$ $search$)策略——使用关于目标位置的线索——通常比无信息搜索策略更有效地找到解。线索以启发式函数($heuristic$ $function$)的形式出现,记为 h(n):
贪心算法 ($greedy$ $best$-$first$ $search$)
说明与性能分析
&nbs……继续阅读 »
yanzexi
1年前 (2023-10-10) 180浏览 0评论
1个赞
$PS:$邓书里的向量实际上就是顺序表、而列表则相当于链表。接下来以殷书为主,王道和邓书作为补充。一些太简单的就懒得记录了。
顺序表
顺序表
顺序表逻辑结构为线性,存储结构为顺序存储;性能分析如下:
$$
\begin{cases}
\frac{n+1}{2}&……继续阅读 »
yanzexi
1年前 (2023-10-09) 183浏览 0评论
1个赞