• 算法书学习笔记


    14天阅读挑战赛

    关于算法,其实也有系统性的去看过一些视频和书籍,但是每次看完都存在一个问题,就是还是不会写或者直接暴力法搞出来,这简直不够优雅!然而我恰好遇到了CSDN的这个算法学习活动,因此想借这个机会,再续前缘!

    本次的博客参考的书籍为:趣学算法(第2版)-异步社区-致力于优质IT知识的出版和分享 (epubit.com)

     本文将从书籍的1.1-1.3进行文章的学习。废话不多说,直接开干!

    1.1学习笔记:

    程序=数据结构+算法

    这是显而易见的。在我的认知中,程序就是一个可以工作的“机器”,这个“机器”要工作起来,离不开“汽油”数据结构和“工作流程”算法。数据结构和算法两者相辅相成。数据结构往往在很大程度上就制约了算法,算法也操控着数据结构。举个简单的例子,在C++语言中,有很多的库函数例如:find,erase。我们往往都是调用库函数,但是却没想过自己完全用时间复杂度更小的方式去实现。因此数据结构和算法决定了一个程序的可靠性和实用性!。

    1.2学习笔记:

    在本节中,老师给了一个小题目:求【-1,1,-1,1,,(-1)n次方】的一个求和。

    我看到这个题的第一个思路是利用等比数列,公比=-1,利用求和公式即可求出来。

    伪代码如下:

    1. int sum(n){
    2. int ans = 0;
    3. ans = ((-1 - (-1 * (-1)^n)))/(1 - (-1))
    4. rteurn ans
    5. }

    其实看着很复杂,就是一个等比求和公式而已。 

    当然了。老师也给了下面这些算法思想。

    暴力法把每个元素利用sum求和
    技巧判断元素个数为奇数或偶数判断结果

    在这一个小题中,其实就可以看出来我们对于算法的把握。暴力法利用一个for循环,时间复杂度为On,技巧,时间复杂度为O1.这里关于时间复杂度的定义由于我这上学期研一课程中已经学习了,所以不做过多解释。

    1.3学习笔记:

    这节内容可以说十分有趣了,因为很早之前我听过这个故事,那是在数学课上面。据说反正很多亿的谷子,当时我还觉得非常不可思议。不至于吧,于是我利用等比求和算了一下,发现计算机都算不出来(小时候的计算机很垃圾)

    当然了,文章这部分主要想告诉我们,对于一个看起来复杂度不高的算法,但有可能会爆炸性的数据增长,这里如果没理解,我们可以用数字说明,当然文章中也有这个说明:

    2^1=2  2^2=4  2^3=8..............2^10=1024........2^64=18446744073709551616

    看起来前面还好,但是到后面数据爆炸了,你的内存可能完全hold不住,或者说计算时间完全瘫痪。


    到此,我们完成了第一次的课程学习笔记内容。我个人认为这个文章写的还是很好的,全篇利用故事情节把你带入,然后举例一些经典算法给你看看实际效果,再加上是伪代码增加了可读性,适合那些准备刚入门学习写程序的小伙伴,好了,本次笔记就到这里,后续我们会写第一章后续的内容。

  • 相关阅读:
    【实战系列】OpenApi设计规范
    vue单页面应用使用 history模式路由时刷新页面404的一种可能性
    ES6-04-模块化的暴露:export关键字
    javaVUE教育网站设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    C++数据结构-海量数据处理
    【第六部分 | JavaScript高级】2:函数高级
    Word处理控件Aspose.Words功能演示:使用 Python 在 Word 文档中创建表格
    rpm管理
    rollup常用插件详解
    故障诊断模型 | Maltab实现RF随机森林的故障诊断
  • 原文地址:https://blog.csdn.net/m0_60524373/article/details/127383863