随记3-时间复杂度(上)

前言:

单独拎出这个来讲,是因为它很重要,通过算法的“时间复杂度”可以筛选出更高效的算法,提高处理数据和代码运行的效率,以及后续的优化

OS:之前看数据结构的时候,老是碰到这个时间复杂度,给我看的是一脸懵,于是才专门去研究了一下


正文:

时间复杂度的概念:

衡量算法运行效率的核心指标

简单来说就是你运行的代码有多费时间


常用的分类(时间复杂度鄙视链):

1.O(1) 常数时间

原理:无论数据多大,操作步骤(时间)不变

举例:你面前有100本书,在你已知位置的情况下,你想找到一本“程序猿的自我修养”的书,不需要一本一本找,直接走到书所在的位置拿

特性:无循环、无递进、直接操作

比如我随记1中所写的顺序表的随机(任意)访问就是O(1)的体现

结论:神仙级别,能用就不要犹豫,操作时间快得一批

 

2.O(log n)对数时间

原理:每次操作会将问题规模“砍半”,数据越大,效率优势越明显

举例:猜数字1→100,只需要从中间猜,最多7次就能猜中

特性:变量是指数级变化

结论:高手级别,每次将问题规模砍一半,数据量越大,优化效果越明显,通常都是高效算法

 

3.O(n)线性时间

原理:操作步骤(时间)和数据量成正比,数据量翻倍的同时,操作步骤翻(时间)翻倍

举例:从1数到100要数100次,数到1000要1000次

结论:普通选手,该遍历的就老老实实遍历

特性:单层循环遍历所有数据

 

4.O(n log n)线性对数时间

原理:核心策略是“先分再合”,先将数据分成小块处理(分治策略),每块处理时间为O(log n),总共有n块,直到将数据分到最后只剩一个元素

通俗易懂来讲👇🏻

先将数据砍一半,变成两组之后,两组分别再砍一半,以此类推,直到每个数组里面只剩下一个元素,然后再按照特定的规则合并两个相邻的元素

举例:有一组数字[9,1,6,4,3,8,7],按照从小到大的方法排序[]

1.先从中间砍两半,[9,1,6,4]和[3,8,7]

2.继续砍[9,1],[6,4],[3,8],[7]

3.直到砍到每个数组只剩下一个元素[9],[1],[6],[4],[3],[8],[7]

4.按特定的规则合并两个相邻的元素

[1,9],[4,6],[3,8],[7]

                         ↓

[1,4,6,9],[3,8,7]

                          ↓

[1,3,4,6,7,8,9]

结论:精英选手,属于是排序算法领域比较拔尖的,运到排序问题,记住“归并”和“快排”就够了

 

未完待续……


 

今天先总结到这里,剩下的后面再出一篇文章讲完,因为学的没有那么深的缘故,所以后面学习碰到相关的内容会加进来进行补充,文章有不对的地方,随时欢迎大家指出😊

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值