• ※初赛知识总结※


    前言

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

    排序算法的稳定性

    排序算法的稳定性是指,如果有两个元素(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 时间复杂度主定理

  • 相关阅读:
    JavaScript函数
    JavaScript数组知识点
    面向对象之继承及属性查找顺序
    面向对象二
    面向对象
    正则表达式补充
    垃圾回收机制、标记删除及分代回收
    hashlib、hmac、subprocess、configparser模块
    模块、起别名、from导入
    递归、匿名函数、内置函数
  • 原文地址:https://www.cnblogs.com/tqr06/p/11691966.html
Copyright © 2020-2023  润新知