CSP初赛易错易考基础知识点(自用)

文章为众多博客内容的整合,参考的博客会在文末放出链接

三目运算符:

(表达式)?(成立操作):(不成立操作)。

二叉树:

前/先序遍历:根 \(\rightarrow\) 左子树/儿子 \(\rightarrow\) 右子树/儿子。

中序遍历:左子树/儿子 \(\rightarrow\)\(\rightarrow\) 右子树/儿子。

后序遍历:左子树/儿子 \(\rightarrow\) 右子树/儿子 \(\rightarrow\) 根。

遍历的特殊结论

前/先序遍历 + 中序遍历 = 确定二叉树。

后序遍历 + 中序遍历 = 确定二叉树。

特殊的二叉树及其性质

满二叉树/完美二叉树:所有叶结点的深度均相同的二叉树称为满二叉树/完美二叉树。
完全二叉树:只有最下面两层结点的度数可以小于 2,且最下面一层的结点都集中在该层的最左侧。


对于一棵满二叉树/完美二叉树,其深度为 \(k\),则其节点总数为\(2^{k-1}\) ,此结论可逆。

对于一棵满二叉树/完美二叉树/完全二叉树,若任意节点(除叶节点外)的编号为 \(i\),其左儿子的编号为\(2_i\),右儿子的编号为 \(2_{i+1}\)。此结论可逆,证明显然。

字符串:

主定理讲解博客

各种排序算法

复杂度:
讲解博客1
讲解博客2

图片/视频占用储存空间的计算

小数的进制转换:

十进制转换为n(二、八、十六)进制:

乘n取整,整数正序排列。
如:十进制的a转二进制,a不断乘以2,变成1为止,每次乘了后把整数取出来。(0.6875)10=(0.1011)2

n(二、八、十六)进制转换为十进制:

小数点后从左往右逐位乘以n的(-1,-2,-3..)次方,再相加。
如:二进制的a转十进制,小数点后从左往右每一位逐位乘以1/2、1/4、1/8、1/16...

前中后缀表达式:

前缀表达式:

  1. 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前。
  2. 举例:(3+4)*5-6的前缀表达式为 - * + 3 4 5 6.

求值原理:

从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对他们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。

求前缀表达式:- * + 3 4 5 6的值:
  1. 从右至左扫描,将6、5、4、3压入堆栈;
  2. 遇到 + 运算符,因此弹出3和4(3为栈顶元素,4为次顶元素),计算 3+4 的值,得7,再将7入栈;
  3. 接下来是 * 运算符,因此弹出7和5,计算 7*5=35 ,将35入栈。
  4. 最后是 - 运算符,计算 35-6 的值,即29,得最终结果29.

中缀表达式

  1. 中缀表达式就是常见得运算表达式,如(3+4)*5-6。
  2. 中缀表达式求值是我们人熟悉的,但是计算机不好操作,往往会将中缀表达式转成其他表达式来操作。

后缀表达式

后缀表达式称逆波兰表达式,与前缀表达式相似,只是运算符于操作数之后。
举例: (3+4)*5-6的后缀表达式为3 4 + 5 * 6 -

后缀表达式计算机求值

从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算。并将结果入栈;重复上述过程直到表达式最右端,最后算出的值即为结果。

举例: 求 (3+4)*5-6 的后缀表达式 (3 4 + 5 * 6 -)
    1. 从左至右扫描,将3和4入栈;
    2. 遇到运算符 + ,因此弹出4和3,计算 3+4 的值,再将7入栈;
    3. 将5入栈;
    4. 接下来是 * 运算符,因此弹出5和7,计算出 7*5=35,将35入栈;
    5. 将6入栈;
    6. 最后是 - 运算符,计算 35-6 的值,即29,由此得出最终结果。

中缀表达式转换为后缀表达式

  1. 初始化两个栈:运算符栈s1和储存中间结果栈s2;
  2. 从左至右扫描中缀表达式;
  3. 遇到操作数时,将其压入s2;
  4. 遇到运算符时,比较其与s1栈顶运算符的优先级:
    (1)如果s1为空,或栈顶运算符为左括号“(” ,则直接将此运算符入栈;
    (2)否则,若优先级比栈顶运算符高,也将运算符压入是s1;
    (3)否则,将s1栈顶的运算符弹出并压入到s2中,再次转到4.1步骤与s1中新的栈顶运算符相比较;
  5. 遇到括号时:
    (1)如果时左括号“(” ,则直接压入s1;
    (2)如果是右括号“)” ,则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃;
  6. 重复步骤2至5,直到表达式的最右边;
  7. 将s1中剩余元素依次弹出并压入s2;
  8. 依次弹出s2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式。

哈希冲突解决方法-线性探测

如哈希表大小M = 7, 哈希函数:H(K) = K mod M。插入这些值:701, 145, 217, 19, 13, 749

H(K) = 701 % 7 = 1
H(K) = 145 % 7 = 5
H(K) = 217 % 7 = 0
H(K) = 19 % 7 = 2
H(K) = 13 % 7 = 1(冲突) --> 2(已经有值) --> 3(插入位置3)
H(K) = 749 % 7 = 2(冲突) --> 3(已经有值) --> 4(插入位置4)

补码反码

1、原码
顾名思义,原码就是十进制数直接转换成二进制之后直接形成的二进制编码。

2、补码
正数的补码是本身,负数的补码是其反码加一。

3、反码
顾名思义:正数的反码是本身,负数的反码是其除符号位之外的所有位按位取反的结果。

逆天数学问题;

CSP-J 初赛基础数学知识复习
CSP初赛复习 组合数学

博客链接:

前缀、中缀、后缀表达式
CSP初赛知识点梳理
哈希冲突的解决策略

posted @ 2022-09-15 15:31  DAIANZE  阅读(245)  评论(0编辑  收藏  举报