初赛(3)

进制转换

首先考虑十进制:

\(1629=1*1000+6*100+2*10+9*1\)

进一步的

\(1629=1*10^3+6*10^2+2*10^1+9*10^0\)

于是我们给出进制概念

一个k进制的正数,是其每一位乘以k的对应次方之和。相当于给每一位赋予不同的权重

各种进制只是对数的不同描述,运算规律在各种进制下不变。

技巧

其他进制 转 十进制:乘幂,再加法

十进制 转 其他技巧:短除法

二进制运算

& 按位与 都为真,则为1,否则为0

| 按位或 都为假,则为0,否则为1

^ 按位异或 相同为0,不同为1

~ 按位取反

<< 左移,最右边补0

>> 右移,标准没有最左边补什么

实践上,unsigned直接补0,signed复制原先最高位

【小插曲】
逻辑运算,&&优先级高于||
a&&b||c&&d=(a&&b)||(c&&d)

补码

补码是这样一套体系:

\([0,2^{31}-1]\)\(2^{31}\)个非负数,直接存储二进制

\([-2^{31},-1]\)\(2^{31}\)个负数,存储其相应的正数的\(加法逆元^①\)

①加法逆元:\(x\)\(inv(x)\)加在一起,变成\(0\)

\(-x\)的补码表示(~x)+1(这个符号是取反)

好处

易运算。计算\(a-b\)值需要计算\(a+(-b)\)

只有一个\(0\)

非常容易获取一个数的相反数

主定理

假设有递推关系式\(T(n)=aT(\)\(n \over b\)\()\)\(+f(n)\),其中\(n\)为问题规模,\(a\)为递推的子问题数量,\(n \over b\)为每个子问题的规模(假设每个子问题的规模基本一样),\(f(n)\)为递推以外进行的计算工作

\(a≥1,b≥1\)为常数,\(f(n)\)为函数,\(T(n)\)为非负整数,刻有以下结果(分类讨论):

(1)若\(f(n)=O(n^{{log_b}^{a-c}})\),\(c>0\),那么\(T(n)=\Theta(n^{{log_b}^a})\)

(2)若\(f(n)=\Theta(n^{{log_b}^{a}})\),那么\(T(n)=\Theta(n^{{log_b}^a}logn)\)

(3)若\(f(n)=\Omega(n^{{log_b}^{a-c}})\),\(c>0\),且对于某个常数\(c<1\)和所有充分大的\(n\)\(af(\)\(n \over b\)\()≤cf(n)\),那么\(T(n)=\Theta(f(n))\)

常用结论

\(T(n)=2T(\)\(n \over 2\)\()+\Theta(n)=\Theta(n\ log\ n)\)

\(T(N)=T(\)\(n \over 2\)\()+\Theta(n)=\Theta(n)\)

\(T(n)=T(\)\(n \over 2\)\()+\Theta(1)=\Theta(log\ n)\)

\(T(n)=2T(\)\(n \over 2\)\()+\Theta(n\sqrt{n})=\Theta(n\sqrt{n})\)

计数原理

排列数\(A_n^m\):在\(n\)个人里面选出\(m\)个人排队(有序)

组合数\(C_n^m\):在\(n\)个人里面选出\(m\)个人(无序)

组合数通项:\(C_n^m=\frac{A_n^m}{A_m^m}\)

另外还有:\(C_n^x=C_n^{n-x}\)

\(Pascal公式\)\(C_n^m=C_{n-1}^{m-1}+C_{n-1}^m\)

posted @ 2021-08-18 22:03  晨曦时雨  阅读(99)  评论(0)    收藏  举报
-->