代码随想录刷题总结与反思 —算法性能分析

本文章中仅供自己学习或者向偷懒做笔记的同学提供一个总结!

时间复杂度 -- 方便程序员估计程序的运行时间

        通俗来说,假设算法的问题规模为n,计算单元的规模为f(n),随着问题规模n的增大,程序的运行时间的增长率与f(n)的增长率相同,称为时间的渐近复杂度,简称时间复杂度,记为O(f(n))。

        对于O()来说,它反映的是算法最坏情况的运行时间的上界。同时它是数据量级突破一个点且数据量级非常大的情况下所表现出的时间复杂度。如果真要深究的话,还需要结合不同的数据规模进行分析。一般情况下,默认数据规模非常大,基于这个事实,有以下的算法时间复杂度的排行:

O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)立方阶 < O(2^n)指数阶

        对于时间复杂度的化简,一般就直接用简化法:

        1. 去掉运行时间中的加法常数项;

        2. 去掉常数系数;

        3. 只保留最高项,去掉数量级小一级的n

空间复杂度 -- 对一个算法在运行过程中占用内存空间大小的量度,记作S(n) = O(f(n))。

        空间复杂度是考虑程序运行时占用内存的大小,而不是可执行文件的大小。

        空间复杂度是预先大体评估程序内存使用的大小。不要以为空间复杂度就已经精准的掌握了程序的内存使用大小,很多因素会影响程序真正内存使用大小,例如编译器的内存对齐,编程语言容器的底层实现等等这些都会影响到程序内存的开销。

你可能感兴趣的:(c++)