专栏文章

C++csp-J初赛2

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minqcl6p
此快照首次捕获于
2025/12/02 06:37
3 个月前
此快照最后确认于
2025/12/02 06:37
3 个月前
查看原文

算法要求

1 有穷性:一个算法包括有限的操作步骤,能在执行有限的步骤后结束
2 可行性:算法中的每一个步骤都可以在有限时间内完成的基本操作,并得到确定的结果
3 确定性:算法中的每一个步骤都是确定的,不可模棱两可
4 时间复杂度:常数O(1)O(1) 对数阶O(logn)O(logn) 线性阶O(n)O(n) 线性对数阶O(nlogn)O(nlogn) 平方阶O(n2)O(n^2) 立方阶O(n3)O(n^3) 指数阶O(2n)O(2^n) 阶乘阶O(n!)O(n!)
附图:

集合容器(set)

容斥原理

二进制逻辑运算

前后中缀表达式

前缀表达式
从右到左扫描表达式,遇到数字时直接入栈,遇到运算符时弹出栈顶两个数。
根据运算符对两个数进行相应计算,并将计算结果入栈。
重复上述过程直至表达式的最左端,剩余最后一个数在栈中弹出即为最终计算结果。
例如,表达式 (3+4)×5-6 的前缀表达式为 - × + 3 4 5 6
后缀表达式
后缀表达式的计算步骤如下:
从左到右扫描表达式,遇到数字时直接入栈,遇到运算符时弹出栈顶两个数。
根据运算符对两个数进行相应计算,并将计算结果入栈。
重复上述过程直至表达式的最右端,剩余最后一个数在栈中弹出即为最终计算结果。
例如,表达式 (3+4)×5-6 的后缀表达式为 3 4 + 5 × 6 -
中缀转前缀
初始化两个栈:运算符栈和储存中间结果的栈。
从右至左扫描中缀表达式。
遇到操作数时,将其压入储存中间结果的栈。
遇到运算符时,比较其与运算符栈顶运算符的优先级: 如果运算符栈为空,或栈顶运算符为右括号,则直接将此运算符入栈。 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入运算符栈。 否则,将运算符栈顶的运算符弹出并压入到储存中间结果的栈中,再次比较。
遇到括号时: 如果是右括号,则直接压入运算符栈。 如果是左括号,则依次弹出运算符栈顶的运算符,并压入储存中间结果的栈,直到遇到右括号为止。
重复上述步骤,直到表达式的最左边。
将运算符栈中剩余的运算符依次弹出并压入储存中间结果的栈。
依次弹出储存中间结果的栈中的元素并输出,结果即为前缀表达式。
中缀转后缀
初始化两个栈:运算符栈和储存中间结果的栈。
从左至右扫描中缀表达式。
遇到操作数时,将其压入储存中间结果的栈。
遇到运算符时,比较其与运算符栈顶运算符的优先级: 如果运算符栈为空,或栈顶运算符为左括号,则直接将此运算符入栈。 否则,若优先级比栈顶运算符的高,也将运算符压入运算符栈。 否则,将运算符栈顶的运算符弹出并压入到储存中间结果的栈中,再次比较。
遇到括号时: 如果是左括号,则直接压入运算符栈。 如果是右括号,则依次弹出运算符栈顶的运算符,并压入储存中间结果的栈,直到遇到左括号为止。
重复上述步骤,直到表达式的最右边。
将运算符栈中剩余的运算符依次弹出并压入储存中间结果的栈。
依次弹出储存中间结果的栈中的元素并输出,结果即为后缀表达式。

评论

0 条评论,欢迎与作者交流。

正在加载评论...