媒介
进入代码天下已经有一阵了,C语言学的差不多了计划看看数据结构
以前都没想过我能学到这嘞哈哈哈哈
所以,《重生到现代之从零开始的数据结构生活》开始啦
数据结构
我们天天说数据结构怎么怎么了,那什么是数据结构你知道吗
数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数据元素的聚集
这么说可能有点抽象了,但是如果举一个例子:int arr[3]={0};不就是数据元素的聚集吗,没错,他就是数据结构的一种,不过我们会有很多更为复杂的情况,只要这种简单的肯定是不够的,这就是我们学习数据结构的缘故起因
算法
算法(Algorithm):就是定义精良的计算过程,他取⼀个或⼀组的值为输⼊,并产⽣出⼀个或⼀组值作为 输出。简单来说算法就是⼀系列的计算步骤,⽤来将输⼊数据转化成输出结果。
简单来说就是我们写的每一个成熟的代码,都是某种算法
但是我对他的相识也不深,所以只能解说到这了
复杂度
之前在牛客上面刷题的时候,我写的代码就经常和讨论区的不一样
我的代码就会很复杂,逻辑也会很冗杂
但是当时的我并不care,想着把题目完成就行了,管他这么多,反正又不是我算
等到我打开一些对复杂度有要求的的题的时候我就懵了
不是哥们,我咋写代码你也管啊
至于那他怎么管,用什么管,管的标准是什么
让我们看看复杂度吧
算法在编写成可执⾏程序后,运⾏时需要耗费时间资源和空间(内存)资源 。因此衡量⼀个算法的好坏,⼀般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。
时间复杂度重要衡量⼀个算法的运⾏快慢,⽽空间复杂度重要衡量⼀个算法运⾏所需要的额外空间
实在从开始我说的大家也能看出来,有很多的地方都有在使用复杂度这一概念
在时间复杂度和空间复杂度中,由于现代科技的发达,让我们对空间的要求没有这么高,所以,复杂度根本指的就是时间复杂度
时间复杂度
在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间
实际上空间复杂度是在描述程序的时间服从,因为没有固定的时间,运行的时间可能会随着环境,cpu,内存等因素改变,所以重要算的就是运行的服从
时间复杂度的计算
计算复杂度的时候,我们不能精确的算出来程序实验的次数,因为很贫苦,所以我们只需要算出大概的实验次数然后比较他们实验次数的量级就行了
实验次数就是程序运行了多少次,程序没运行一次都算
复杂度的表⽰通常使⽤⼤O的渐进表现法
大O的渐进表现法
⼤O符号(Big O notation):是⽤于描述函数渐进⾏为的数学符号
大O的规则
- 时间复杂度函数式T(N)中,只保存最⾼阶项,去掉那些低阶项,因为当N不断变⼤时, 低阶项对结果影响越来越⼩,当N⽆穷⼤时,就可以忽略不计了
- 如果最⾼阶项存在且不是1,则去除这个项⽬的常数系数,因为当N不断变⼤,这个系数 对结果影响越来越⼩,当N⽆穷⼤时,就可以忽略不计了
- T(N)中如果没有N相关的项⽬,只有常数项,⽤常数1取代所有加法常数
举个例子
- void Func2(int N)
- {
- int count = 0; //1(后面的数字就是运行的次数)
- for (int k = 0; k < 2 * N ; ++ k)
- {
- ++count; //2n
- }
- int M = 10; //1
- while (M--)
- {
- ++count;//10
- }
- printf("%d\n", count);//1
复制代码 T (N) = 2N + 13
但是根据大O渐进表现法来看
时间复杂度就是:O(N)
这就是时间复杂度计算的过程
本日的知识解说完啦,如果觉得有效可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有题目欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |