Live2D

※初赛知识总结※

前言

离初赛只有两天了,写这篇博客可能也没多大作用
边刷初赛题边记录一下坑点
就当把自己跳过的坑给后人埋上吧
祈祷我不要初赛退役(笑)

排序算法的稳定性

排序算法的稳定性是指,如果有两个元素\(i=j\),排序后他们的位置关系不变
(即相同值的不同元素在排序前后相对位置不变)
而不是指时间复杂度不会退化

常见的排序方法比较

  1. 冒泡排序:由于两两之间比较,前者比后者大才交换位置,所以相同大小的元素位置不会交换。是稳定的
  2. 选择排序:每次操作中会无顾忌地选择小元素交换位置,会破坏稳定性。不稳定
  3. 插入排序:从最小的序列开始,每次插到自己合适的位置,对其他元素没有影响。稳定
  4. 快速排序:很显然的不稳定排序
  5. 归并排序:合并过程中可以保证元素的位置。稳定
  6. 基数排序:按位操作的排序方式,属性各自拥有优先级。稳定
  7. 希尔排序:没详细了解过,反正是不稳定的
  8. 堆排:用堆的性质更改元素序列,过程中的旋转可能会破坏稳定性。不稳定

文件大小计算

(2017tg)分辨率为 1600x900、16 位色的位图,存储图像信息所需的空间为?

分辨率:像素的个数
位色:每个像素的位数

所以这张图片占的空间为:1600×900×16=23040000 bit
每8位一字节,字节数:2880000 Byte
所以2880000÷1024=2812.5 KB

时间复杂度计算

  • 假设存在常数\(e>0\),使得\(f(n)=O(n^{log_{b}a-e})\),则\(T(n)=\Theta(n^{log_ba})\)

\(f(n)\)的上界是\(n\)的幂次,而且\(log_ba\)大于这个幂次,那时间复杂度就是\(n\)\(log_ba\)次幂

例子:二叉树遍历。\(T(n)=2T(\frac{n}{2})+\Theta(1)\),其中\(a=2,b=2,f(n)=1\),此时\(e=1\)\(T(n)=\Theta(n)\)

  • 假设存在常数\(k\geq 0\),使得\(f(n)=\Theta(n^{log_ba}log^kn)\),则\(T(n)=\Theta(n^{log_ba}log^{k+1}n)\)

意思是\(f(n)\)\(n\)\(log_ba\)次幂,再乘上一个\(log\),则复杂度为\(f(n)\)的复杂度再乘上一个\(log\)

例子:归并排序。\(T(n)=2T(\frac{n}{2})+\Theta(n)\),其中\(a=2,b=2,f(n)=n\),此时\(k=0\)\(T(n)=\Theta(nlog_2n)\)

例子:二分搜索。\(T(n)=T(\frac{n}{2})+\Theta(1)\),其中\(a=1,b=2,f(n)=1\),此时\(k=0\)\(T(n)=\Theta(log_2n)\)

  • 假设存在常数\(e>0\),有\(f(n)=\Omega(n^{log_ba+e})\),同时存在充分大的常数\(c<1\)以及充分大的\(n\)满足\(af(\frac{n}{b})\leq cf(n)\),那么\(T(n)=\Theta(f(n))\)

参考资料

[1] OI-WIKI 希尔排序简介
[2] ghj1222 时间复杂度主定理

posted @ 2019-10-17 14:45  tqr06  阅读(228)  评论(0编辑  收藏  举报