对数和指数
指数:例如2^3=8
(2^2)^2=2^(2*2)=2^4
2^2+2^3=2^(2+3)
对数:例如log(2)4=2
log(a)bc=log(a)b+log(a)c
log(a)(a)m=m
log(a)m/n=log(a)m-log(a)n
log(a)(m)n=nlog(a)m
log(a)1/n=-log(a)n
a^log(a)b=b
二进制与位运算
1001
1*2^3+0+0+1*2^0=8+1=9
原码
1000 0001(-1)
0000 0001(1)
1000 0010(-2)
反码
整数的反码依旧是自己
负数的反码除符号位取反
0000 0001(1)
1111 1110(-1)
补码
整数的补码依旧是自己
负数的补码是反码+1
0000 0001(1)
+1111 1111(-1)
1(越界) 0000 0000(0)
位运算
左移是*2
右移是/2(向下取整)
(1001)<<1
10010(18)
(0001)<<2
0100(4)
(1001)>>1
0100(2)
int 范围:-2^31~2^31-1
int=4byte
1byte=8bit
1bit=1个0
int=32位
long long 范围:-2^63~2^63-1
&(与) 都为一才为一
|(或) 只要有一就为一
^(异或) 不同才为一
组合排列
排列:A(5,5)=5*4*3*2*1
A(5,4)=5*4*3*2
组合:(6,3)=(6*4*3)/(3*2*1)
C(n,m)=C(n,n-m)
二叉树
根节点,叶节点
节点=根节点+叶节点
设有n个节点,就有n-1条边
任意点都可以到达
完美二叉树:每个节点全部占满
例如
// o
// / \
// o o
完全二叉树:出最后一层都为满二叉树,最后一层必须从左往右排
例如
// o
// / \
// o o
// / \ / \
// o o o
二叉树的先序遍历:根左右
二叉树的中序遍历:左根右
二叉树的后序遍历:左右根
图论
有向图:有方向的图
无向图:两点之间没有方向
连通块的个数:指有向图或无向图的个数
完全图:任意两点之间都是相连的
完全图的边数:设点的个数为n,有(n-1)+(n-2)+......+1
最短生成树:排序求出最小数,在筛选路径
拓扑排序 (可能有多解)
任何有向图不一定都能用拓扑排序,当为环的时候,陷入死循环
入度的个数:指向该点的边数
出度的个数:该点指出的个数
排序方法:A->B->C
入度为零的点排在前面,并将该点去掉,以此类推
格雷码
二进制到格雷码
1010(0)
^ (0)1010
1111(0)
则二进制数1010的格雷码是1111
格雷码到二进制
1 1 1 1
| / / /
1 0 1 0
则格雷码1111的二进制数是1010