数据结构vl怎么求_数据结构学习笔记(一)什么是数据结构

ace60e1d6d42a041ed40876c700d1b30.png

1.1什么是数据结构

1.1.1

如果把数据结构比作是摆放书的话,问题大概就是

1.新书怎么插入

2.怎么找到指定的书

3.空间如何分配

4.类别应该分多细

总结:解决问题方法的效率,与数据的组织方式有关。

1.1.2

问题:打印1000000个数字在电脑屏幕上(1到1000000)。

方法1:循环实现。

方法2:递归实现。

结果方法2罢工了,方法1正常,因为方法2空间不够,所以不行。

总结:解决问题方法的效率,跟空间的利用效率有关

1.1.3

工具知识:

clock()工具

clock():捕捉从程序开始运行到clock()被调用时所耗费的时间。这个 时间单位是clock tick,即“时钟打点”。
常数CLK_TCK(或CLOCKS_PER_SEC):机器时钟每秒所走的时钟打点数。

具体操作

47e3d18ba8ed3ff47f710fb6960e066f.png

1.先调用time库

2.clock_t是clock()函数返回的变量类型,就跟啥double一样。我们定义两个节点。

3.start那行开始,我们具体得去操作,计时。

(有时候跑一次太快,那么我们就跑很多次求平均呗)

2d87732638c9321d939751092d04dcf6.png

本节的例子是关于代码运行的快慢,根据姥姥所言(验证过了)方法一比较慢,会被专业程序员鄙视,而方法二比较快。

总结:解决问题方法的效率,有时候跟算法的巧妙程度有关。

1.1.4

什么是数据结构?数据结构就是数据对象在计算机中的组织方式。这些数据对象不是孤立的,而是与很多操作相关联,完成这些操作所使用的方法就叫做算法。

而数据对象要关乎到其逻辑结构(比如什么线性结构,树啊之类的)+物理存储结构。

fbb1aff3fbcec28fb2c6b05527d61292.png

1.2算法

1.2.1什么是算法

算法的相关特点:

1.一个有限指令集

2.可以有输入,也可以没有。

3.一定会有输出(要不然要这个算法干嘛呢)。

4.在有限步骤后会停止。

5.每一条指令都必须

(1)目标明确,没有歧义。

(2)计算机要能处理

(3)不依赖于具体某个语言

1.2.2 什么是好的算法

鉴定标准有两个:空间复杂度S(n)和时间复杂度T(n)

b93f5c2604a58e56e5a788586826f279.png

就比如1.1里面输出一个非常大的数,循环的话不存在程序调用,所以不存在空间不够用的问题,而递归则调用了好多好多,空间爆掉了。

又比如求多项式值的那个问题,因为机器处理加减法速度特别快,而处理乘除法要慢很多

就比如这个算法1:

894403f8c041f782f7ea821525cd177f.png

里面涉及到了pow(x,i),这是乘方,也就是要×很多遍,我们就可以看到,i等于1,×一次,i=n,×n次,这样我们就可以看见最后一共进行了

次乘法,所以时间复杂度就是

而我们对比一下,算法2的时间复杂度是这样的

a937ff667744c1550fd26b0552069f07.png

我们可以看到,这里面没有复杂的乘方,所以乘法比较少,每一次只要乘一下就好了,我们就可以看见,时间复杂度是这样的

C1,C2,C每台机器都不同,平方都很浪费时间,所以算法2时间比较好。

而我们这面对效率问题时,往往用用到下面这两个指标,

ce042d2c0b30d07f3794678ed3e5084c.png

一般都是考虑最坏复杂度(因为平均难算)。

1.2.3复杂度的渐进表示法

4120eab62d3c2bb1f306a9357f89fb46.png

一个函数总是有多个上界,多个下界,但是因为我们要尽量真实,所以我们一般都是选择较大的下界和较小的上界。

下面我们用两张图来感性认识一下:log的底数是2,我们可以发现,阶乘很麻烦,所以设计算法要尽量避免阶乘。

8cf935190f57908fc52c39a5fff62649.png

918b55a0edae70dfc352af27c3bc8af9.png

因为

涨的比较慢,所以比较受欢迎,所以姥姥有言:一个程序员在面对平方的时候,可以看看能不能化成

下面是一些复杂度分析的小窍门:

f13bb414c1b86747fd014946ee8558b7.png

2d0a88e663f02e139481e9f59dbe8e7b.png

1.3应用实例:最大子列和问题

fe493771d7378b17f394af93ff6bf440.png

比如我们比较下面这两个算法:算法1三次循环

e04c19e8944875a7ed7e2f2d4657df93.png

算法2两次循环,这样就可以提高效率。但是作为一个专业的程序员,我们应该接着把平方朝着

转。

e5407f93ce8d0d0d93cfe37502fb374e.png

算法3:分而治之,就是把大问题分成小块,解决,汇总。根据姥姥所言,我们可以看见,大致思想就是下面这一串数,就先把他分成两段,然后每段再分,但是段与段之间连接的时候,又不是单纯的拼凑一下就好了,而应该再多几步算法。

我们要控制最后的最后T(XXX)转化为最简单的O(1),XXX转化成1,比如我们这一题里面我们看见

,这样我们解得k,然后有了k以后,我们再代换到后面,后面变成了带N的形式,最后,我们就可以看见效率提高了。

c9f257061bdb38e24eb179f455f9ec1c.png

算法4::在线处理,算法效率极高,O(N)。大概意思就是你要是是负数,那就抛弃之前的一切,如果是正数,那还行。

“ 在线”的意思是指每输入一个数据就进行 的意思是指每输入一个数据就进行 即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。

3e0a238670faa057bd5424c86535d5de.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值