2022.8.31大二《数据结构》学习(绪论篇)(中)

         大家好,这是本人的第二篇笔记,记于2022.8.31,目的是分享前几天的学习内容(我没有想到我作为新生时有这么多的学长帮我清理宿舍,我也没有想到为什么技术部要去打扫卫生),由于刚刚接触这门课程,如果有什么错误或者有什么表达不清楚的地方,请斧正,谢谢。

        书接上文。

        我们已经将模型介绍给大家了。在模型中我们可以看出,一个程序要想成功解出问题肯定是要两件东西:算法和数据结构。(这个在我的第一篇文章中已经提出了,那个时候我还没有学习数据结构,炫耀)根据书上的介绍:算法+数据结构=程序。

        先来说说算法,我相信不少的朋友的听说过“算法”这个词,觉得好高大上,好厉害,好**,是的,厉害的算法可以称之为艺术,我作为一个在逻辑上普普通通的一个人,我甚至无法想象出他是怎么想出这么一个方法的(可能是因为我没有参加acm培训,很多思考工具没有有意识的使用)。

        算法是问题的解决方案,它对于程序的性能有比重非常大的决定能力。

        举个栗子,对于“将一个有n个单位的数组向左移动i个位置”这个问题,你能想到几个解法?

        看到这里,你可以先停下来给自己几分钟想想你会怎么做。(说实在的,我只能想到一个方法)

        所以,经过这几分钟的思考你有什么解决方法呢?

        老师的教材上给出了三种方法:

                1.先将数组中的前i个元素存放在一个临时数组中,再将余下的n-i个元素左移i个位置,最后将前i个元素从临时数组中复制回原数组中后面的i个位置

                2.先设计一个函数将数组向左循环移动1个单位,然后调用该函数i次

                3.先将A逆置得到(A^-1)B,再将B逆置得到(A^-1)(B^-1),最后将(A^-1)(B^-1)逆置得到BA

                (解法3讲解

                                举个栗子,我们要将1,2,3,4,5,6,7这个数组向左移动2个位置,也就是说我们要得到3,4,5,6,7,1,2。

                                所以设1,2为A。

                                3,4,5,6,7为B。

                                所以(A^-1)为2,1。

                                (A^-1)(B^-1)为2,1,7,6,5,4,3。

                                最后BA为3,4,5,6,7,1,2。

                        )(正常人的怎么可能会想到这种地步!!!)

        然后,这几个算法的性能怎么样我们可以直接去判定,因为毕竟越难理解的就越是高效,但是我们计算机毕竟是一门科学,所以我们要用数据说话。

        算法的性能的判定因素有两个:空间占用量和时间消耗量(这两个名称不是专业名称,是我自己为了更方便理解所取的,他们原本的名字是空间复杂度和时间复杂度,刚刚学习的小伙伴不要被我误导了)

        

解法占用空间时间消耗量
解法1i个额外储存单位i+n
解法21个额外储存单位n*i
解法3无额外储存单位n

        时间消耗量:

                解法1:i(先将数组中的前i个元素存放在一个临时数组中)+n-i(再将余下的n-i个元素左移i个位置)+i(将前i个元素从临时数组中复制回原数组中后面的i个位置)。

                解法2:n(数组向左循环移动1个单位)*i(调用该函数i次)。

                解法3:i/2(将A逆置得到(A^-1)B)+(n-i)/2(将B逆置得到(A^-1)(B^-1))+n/2(最后将(A^-1)(B^-1)逆置得到BA)。

        所以当n=100时,不同的算法的时间消耗量与空间占用量是大大不同的。

         好的,由于时间限制接下来的学习内容我会放在下一篇的笔记里面。

记于2022.8.31,与诸君共勉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术观察官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值