目录
1>>闲话
2>>数据结构前言
3>>复杂度的概念
4>>时间复杂度
5>>大O渐进表示法
6>>总结
1>>闲话
家人们好久不见,小编军训终于是结束了,大一事情太多了,这几天没时间健身,没时间学习,也没时间发博客,在这先跟大家说声对不起!,忙着各种开会、讲座、竞选、运动会、社团、部门等等,不过从今天开始,小编应该会周更2-3篇,直到学完数据结构,c语言的后续章节可能会在国庆节补出来,敬请期待!谢谢!
2>>数据结构前言
很多小白肯定跟我学之前一样,不理解:什么是数据结构?为什么要学数据结构?数据结构和算法有啥子区别?这几个问题不难回答:
第一:数据结构是计算机存储数据,管理数据的方式,比如数组存数据,我们可以通过循环一次性处理数组里的数据,这就是数据结构!
第二:学习数据结构能让我们具有一些解决复杂问题的能力,通常复杂的问题数据量都很大,那么管理数据成了难题,故学习了数据结构就可以又快又方便的管理数据。
第三:算法就是定义良好的计算过程,通俗点讲就是一系列的计算步骤,通过优质的算法快速的解决过程,再用优质的数据结构快速管理数据,那么在难的题都如同庖丁解牛,迎刃而解!
3>>复杂度的概念
一般衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,(插闲话:小编爱看玄幻小说,很多主角技能厉害的也跟时间空间相关,所以小编在想,如果我们算法可以一直往高处学,没有上界,那么我们能不能通过代码突破时空从而升维,哈哈哈这只是一个想法,要实现那肯定务必要学精算法!小编会努力的!)也就是时间复杂度和空间复杂度!
时间复杂度是衡量一个算法运行的快慢
空间复杂度是衡量一个算法运行所需要的额外空间
不过现在一般不怎么看空间复杂度,因为我们现在不管是电脑还是手机,内存和外存(硬盘)都很大了。但是我们还是要学,接下来我们一起来看看:
4>>时间复杂度
时间复杂度是一个函数式子T(N),它描述了该算法的运行时间,肯定有人跟我有一样的疑问,为什么不直接计算程序运行时间呢?首先,编译器的新旧程度会影响运算的快慢,其次,处理器的好坏也会影响运算的快慢(跟你打游戏卡不卡一个道理),再者,我们只有写完程序才能知道运行时间。因此:不能直接计算,引入T(N)概念:
T(N)是计算了程序的运行次数。我们在这里要进行抽象的概念,假设每条语句的执行时间是一样的,不管你是a=1还是a=10000000^1000等等,都基本一样(实际有一内内区别),那么我们能知道你运行次数越多,那么运行时间越大。那么同样一题,答案运行次数少的算法一定是比运行次数多的算法来的好的。
这个代码它的时间复杂度T(N)=N;
5>>大O渐进表示法
有三条规则分别是:
1.时间复杂度T(N)中要抓大头,什么意思呢?也就是保留高阶项,去掉低阶项,如果T(N)=N^2+N+234那么O(N)=N^2
2.高阶项常数系数忽略不计,如果T(N)=12312N^2+N+234那么还是O(N)=N^2,为什么呢?很多同学在这有疑问,因为当N无穷大时,它的常数系数多少乘它都显得苍白无力。
3.若T(N)中只有常数项,那么用常数1取代,如果T(N)=123121212312,那么O(N)=1,这里不管常数多大,结果都是1。
来看一道例题:
这里每调用一次函数,运行次数就加1,那么根据图片我们能看出它是N!执行次数就是N次,所以O(N)就等于1;
通常我们说的时间复杂度都是使用O(N)而不是T(N)
6>>总结
今天小编就学了这么多,总结一下就是了解了数据结构以及复杂度、算法的概念,学习了时间复杂度T(N)的计算方法,以及O(N)表示法,希望看这篇文章的同学都能够有所收获,小编在这里谢谢大家的耐心观看,一起进步,一起加油!