数据结构中的数学公式

常见的渐进时间复杂度

O(1) < O( log ⁡ 2 \log_2 log2n) < O(n) < O(n log ⁡ 2 \log_2 log2n) < O( n 2 n^2 n2) < O( n 3 n^3 n3) < O( 2 n 2^n 2n) < O(n!) < O( n n n^n nn)

顺序表插入操作平均情况

  • 因插入的位置有n + 1个,故插入一个元素的概率 p i p_i pi 1 n + 1 \frac{1}{n + 1} n+11
  • 移动的元素范围从第i个到第n个,总共要移动(n - i + 1)个元素,将其向后移动一个单位空间

∑ i = 1 n + 1 p i ( n − i + 1 ) \displaystyle\sum_{i=1}^{n+1}p_i(n-i+1) i=1n+1pi(ni+1) = ∑ i = 1 n + 1 1 n + 1 ( n − i + 1 ) \displaystyle\sum_{i=1}^{n+1}\frac{1}{n + 1}(n-i+1) i=1n+1n+11(ni+1) = 1 n + 1 ∑ i = 1 n + 1 ( n − i + 1 ) \frac{1}{n + 1}\displaystyle\sum_{i=1}^{n+1}(n-i+1) n+11i=1n+1(ni+1) = 1 n + 1 n ( n + 1 ) 2 \frac{1}{n + 1}\frac{n(n+1)}{2} n+112n(n+1) = n 2 \frac{n}{2} 2n

顺序表删除操作平均情况

  • 因总元素的个数位n,故删除一个元素的概率 p i p_i pi 1 n \frac{1}{n} n1
  • 移动的元素范围从第i + 1个到第n个(不包括要被删除的第i个元素),总共要移动(n - (i + 1)+ 1)个元素,将其向前移动一个单位空间

∑ i = 1 n p i ( n − i ) \displaystyle\sum_{i=1}^{n}p_i(n-i) i=1npi(ni) = ∑ i = 1 n 1 n ( n − i ) \displaystyle\sum_{i=1}^{n}\frac{1}{n}(n-i) i=1nn1(ni) = 1 n ∑ i = 1 n ( n − i ) \frac{1}{n}\displaystyle\sum_{i=1}^{n}(n-i) n1i=1n(ni) = 1 n n ( n − 1 ) 2 \frac{1}{n}\frac{n(n-1)}{2} n12n(n1) = n − 1 2 \frac{n - 1}{2} 2n1

顺序表按值操作平均情况

  • 最好时,一次就查询完毕;最坏时,n次才查询完毕
  • 查询次数为 1, 2, 3, ⋯ \cdots , n-1,n;形成等差数列

∑ i = 1 n p i × i \displaystyle\sum_{i=1}^{n}p_i \times i i=1npi×i = ∑ i = 1 n 1 n × i \displaystyle\sum_{i=1}^{n}\frac{1}{n} \times i i=1nn1×i = 1 n n ( n + 1 ) 2 \frac{1}{n}\frac{n(n+1)}{2} n12n(n+1) = n + 1 2 \frac{n+1}{2} 2n+1

卡特兰数

  • 通过入栈的不同元素总个数计算不同出栈序列的情况的个数

1 n + 1 C 2 n n \frac{1}{n+1} C_{2n}^n n+11C2nn
-如输入三个不同元素依次进栈,可以得到5个不同出栈序列的情况

对称矩阵压缩存储的首地址公式

按行优先 矩阵下标从1

  • n阶矩阵,其下标范围为(1, n)
  • 当 i ≥ \ge j 时 即在下三角区和主对角线上
  • 第一行有1个,第二行有两个,第 i-1 行有 i-1 个
  • 从1行到第i-1行个共有(i - 1 - 1 + 1)= (i - 1)行
  • 等差公式:首项加末项乘项数除以2
  • a i , j a_i,_j ai,j在第i行上第j个,首地址需要减一,故 (j - 1 + 1 - 1) = j - 1
  • L为单位空间大小,下同
  • k表示为存放在一维数组第k个,下同

address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L

k = ( i − 1 ) ( 1 + i − 1 ) 2 + ( j − 1 ) \frac{(i-1)(1+i-1)}{2} + (j - 1) 2(i1)(1+i1)+(j1) = i ( i − 1 ) 2 + ( j − 1 ) \frac{i(i-1)}{2} + (j - 1) 2i(i1)+(j1)

  • 应对称关系, 当 i < j 时,将i与j对调就行

k = j ( j − 1 ) 2 + ( i − 1 ) \frac{j(j-1)}{2} + (i - 1) 2j(j1)+(i1)

按行优先 矩阵下标从0

  • n阶矩阵,其下标范围为(0, n-1)
  • 当 i ≥ \ge j 时 即在下三角区和主对角线上
  • 第零行有1个,第一行有两个,第 i-1行有 i 个
  • 从第0行到第i-1行个共有(i - 1 - 0 + 1)= i 行
  • a i , j a_i,_j ai,j在第i行上第j个,首地址需要减一,故 (j - 0 + 1 - 1) = j

address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L

k = i ( 1 + i ) 2 + j \frac{i(1+i)}{2} + j 2i(1+i)+j = i ( i + 1 ) 2 + j \frac{i(i+1)}{2} + j 2i(i+1)+j

  • 应对称关系, 当 i < j 时,将i与j对调就行

k = j ( j + 1 ) 2 + i \frac{j(j+1)}{2} + i 2j(j+1)+i

下三角矩阵压缩存储的首地址公式

按行优先 矩阵下标从1

address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L

  • 当 i ≥ \ge j 时 即在下三角区和主对角线上

k = i ( i − 1 ) 2 + ( j − 1 ) \frac{i(i-1)}{2} + (j - 1) 2i(i1)+(j1)

  • 当 i < j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数

k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)

按行优先 矩阵下标从0

address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L

  • 当 i ≥ \ge j 时 即在下三角区和主对角线上

k = i ( i + 1 ) 2 + j \frac{i(i+1)}{2} + j 2i(i+1)+j

  • 当 i < j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数

k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)

上三角矩阵压缩存储的首地址公式

按行优先 矩阵下标从1

  • n阶矩阵,其下标范围为(1, n)
  • 第一行n个元素,第二行n-1个元素,第 i-1 行n-(i-1)+1个元素
  • 从第1行到第i-1行,共i-1行

address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L

  • 当 i ≤ \le j 时 即在下三角区和主对角线上

k = ( i − 1 ) ( 2 n − i + 2 ) 2 + ( j − i ) \frac{(i-1)(2n - i + 2)}{2} + (j - i) 2(i1)(2ni+2)+(ji)

  • 当 i > j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数

k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)

按行优先 矩阵下标从0

  • n阶矩阵,其下标范围为(0, n-1)
  • 第零行n个元素,第一行n-1个元素,第 i-1 行(n-1)-(i-1)+1个元素
  • 从第0行到第i-1行,共ii行
  • 当 i ≤ \le j 时 即在下三角区和主对角线上

k = i ( 2 n − i + 1 ) 2 + ( j − i ) \frac{i(2n-i+1)}{2} + (j - i) 2i(2ni+1)+(ji)

  • 当 i > j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数

k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)

节点数

  1. 树的节点数 等于 树所有度的节点之和 等于 所有节点的度数之和加一 等于 分支数加一
  2. 度为m的树第 i 层最多 m i − 1 m^{i - 1} mi1个节点
  3. 高度为h的m叉树至多有 m h − 1 m − 1 \frac{m^h - 1}{m - 1} m1mh1个节点

∑ i = 1 n m i − 1 \displaystyle\sum_{i=1}^{n} m^{i - 1} i=1nmi1 = m 0 m^0 m0 + m 1 m^1 m1 + m 2 m^2 m2 + ⋯ \cdots + m n − 1 m^{n-1} mn1 = m 0 ( 1 − m h ) 1 − m \frac{m^0(1 - m^h) }{1 - m} 1mm0(1mh) = m h − 1 m − 1 \frac{m^h - 1}{m - 1} m1mh1

  1. 具有n个节点的m叉树的最小高度为[ log ⁡ m ( n ( m − 1 ) ) + 1 \log_m{(n(m-1)) + 1} logm(n(m1))+1] ,[]为取整符号

m h − 1 m − 1 \frac{m^h - 1}{m - 1} m1mh1 = n 求h
m h m^h mh = n(m-1) + 1 => log ⁡ m m h \log_m^{m^h} logmmh = log ⁡ m ( n ( m − 1 ) + 1 ) \log_m{(n(m-1) +1)} logm(n(m1)+1)

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值