※初赛知识总结※

前言

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

排序算法的稳定性

排序算法的稳定性是指,如果有两个元素(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))

  • 假设存在常数(kgeq 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 时间复杂度主定理

原文地址:https://www.cnblogs.com/tqr06/p/11691966.html