《趣学算法(第2版)》读书笔记 Part 2 :算法入门

14天阅读挑战赛


系列笔记链接

《趣学算法(第2版)》读书笔记 Part 1 :如何高效学习算法

《趣学算法(第2版)》读书笔记 Part 2 :算法入门

《趣学算法(第2版)》读书笔记 Part 3 :贪心算法基础(理论)

《趣学算法(第2版)》读书笔记 Part 4 :贪心算法基础(操作)


算法入门

对应图书1.1-1.2章节内容。


文章目录

    • 系列笔记链接
    • 算法入门
      • 算法的概念、定义
      • 算法的特性
      • “好”算法的判断标准
      • 算法的时空复杂度
      • 章节1.1-1.2涉及的课外知识点
        • 伪代码
        • 高等数学
        • 数据结构
        • 算法
    • 总结
      • 思维导图
      • 学习方法
    • 大佬营友们的笔记
      • Day 3
      • Day 4


算法的概念、定义

算法是对特定问题或解步骤的一种描述
通常使用伪代码来描述算法。
算法的描述不依赖于任何一种语言,可用自然语言、程序设计语言(C,C++,Java,Python等)、伪代码、流程图、框图描述。

算法的特性

算法具有以下特性:
(1)有穷性:算法是由若干条指令组成的有穷序列,总是在执行若干次后结束,不可能永不停止。
(2)确定性:每条语句都有确定的含义,无歧义。
(3)可行性:算法在当前环境条件下可以通过有限次运算来实现。
(4)输入/输出:有零个或多个输入,以及一个或多个输出。

“好”算法的判断标准

“好”算法的标准如下:

  1. 正确性:指算法能够满足具体问题的需求,程序运行正常,无语法错误,能够通过典型的软件测试,达到预期。
  2. 易读性:算法遵循标识符命名规则,简洁易懂,注释语句恰当适量,方便自己和他人阅读,便于后调试和修改。
  3. 健壮性:算法对非法数据及操作有较好的反应和处理。例如,在学生信息管理统中登记学生年龄时,若将21岁误输入为210岁,则系统应该有错误提示。
  4. 高效性:即高效率。指算法运行效率高,即法运行所消耗的时间短。
  5. 低存储性;指算法所需的存储空间大小。对于手机、平板电脑这类嵌入式设备,算法如果占用空间过大,则无法运行。算法占用的空间大小被称为空间复杂度。

算法的时空复杂度

即算法的时间复杂度和空间复杂度。

算法的时间复杂度:算法运行所需的时间。

将算法基本运算的执行次数作为时间复杂度的衡量标准。
现代计算机一秒能计算数十亿次,所以不能用秒来具体计算算法消耗的时间。由于相同配置的计算机进行一次基本运算的时间是一定的,可以用算法基本运算的执行次数来衡量算法的效率。
有的如排序、查找、插入等算法,可以分为最好、最坏和平均情况分别求法渐近复杂度。但考查一个算法时通常考查最坏的情况,这对衡量算法的好坏更貝有实际意义。

算法的空间复杂度:算法占用的空间大小。
空间复杂度的本意是指算法在运行过程中占用了多少存储空间。

算法占用的存储空间包括

  1. 输入/输出数据。输入/输出数据占用的空间是必需的。
  2. 算法本身。算法本身占用的空间可以通过精简篡法来缩减,但缩减量小到可忽略不计。
  3. 额外需要的辅助空间。算法在运行时所使用的辅助变量占用的空间才是衡量算法空间复杂度的关键因素。

章节1.1-1.2涉及的课外知识点

参考资料

  • 算法
    百度百科的算法释义 https://sourl.cn/yUc5qA
    基于Python的算法释义 http://t.csdn.cn/vfiQP

  • 伪代码
    伪代码语法 http://t.csdn.cn/Tiqec
    伪代码详细规则与实例 http://t.csdn.cn/SDShz
    伪代码学习与应用 http://t.csdn.cn/3NmRt


  • 详解栈Stack和队列Queue http://t.csdn.cn/bhz1o
    基于Python讲解栈及应用 http://t.csdn.cn/U7XyN
    基于Python讲解栈及LeetCode实例 http://t.csdn.cn/hFccV

  • 递归
    递归算法 http://t.csdn.cn/T3T5t
    递归算法详解 http://t.csdn.cn/UkxK8
    Python:递归算法(基础) http://t.csdn.cn/RKCb8
    Python:递归算法(深入) http://t.csdn.cn/dTb9B

伪代码

读书笔记:
“伪代码"介于自然浯盲和程序设计语言之间,它更符合人们的表达方式,便于理解。它不是严格的程序设计语言。如果要上机调试,则要转换为标准的计算机程序设计语言才能运行。

伪代码(Pseudocode)
伪代码是一种非正式的,类似于英语结构的,用于描述模块结构图的语言。它提供了更多的设计信息,每一个模块的描述都必须与设计结构图一起出现。

伪代码介于自然语言与编程语言之间。它可以将整个算法运行过程的结构用接近自然语言的形式描述出来,即使用你熟悉的文字描述一段程序所表达的意思。使用伪代码的目的是使被描述的算法可以容易的以任何一种编程语言(C,C++,Java,Python等)实现。因此,伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言。

伪代码多用于程序设计初期,像流程图一样帮助写出程序流程。简单的程序一般都不用写流程、思路,若是复杂的代码最好还是把流程写下来,写好的伪代码不仅可用作编程后期测试、维护的基础,也便于用来与他人交流。

伪代码有不同的类型和语法,例如《趣学算法(第2版)》书中就是使用的类C++伪代码(注:这里不确定,因为程序设计语言我目前只学过Python和C#,但是看书中伪代码的语法结构蛮像C++ )。

说到伪代码就不得不提的程序设计语言:Python

Python语言,我接触的第一门程序设计语言,对小白相对友好。

讲个笑话:
将伪代码更改为Python代码的方法

《趣学算法(第2版)》读书笔记 Part 2 :算法入门_第1张图片

以计算机科学界大佬的标准来看,Python语言极具语义化的特性就像是伪码,甚至比伪代码还简洁。
hahahahahaha…

高等数学

章节1.2讲解实例时配了一些微积分求导公式和线性图,需要读者具备一定微积分线性代数的高等数学基础。

数据结构

栈 stack
栈,又名堆栈。原意为存储货物或供旅客住宿的地方,可引申为仓库、中转站,引入到计算机领域就是指数据暂时存储的地方,所以才有进栈、出栈的说法。
栈是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈是一种只能在一端进行插入和删除操作的特殊线性表,即它允许在同一端进行插入和删除操作,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom)。栈底固定,而栈顶浮动。栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

栈多用于做递归,以及在函数调用的时候存储断点。栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。

算法

递归算法
递归的定义:递归是一种直接或者间接调用自身函数或者方法的算法。即程序对自身的调用,其实就是自己调用自己。
递归的特征:存在一个或者多个基例,基例并不需要调用自己,它是一个确定的表达式。所有的递归链结尾均是基例。
递归的运行原理:递归调用过程是入栈操作过程,递归返回过程是出栈操作过程。


总结

思维导图

《趣学算法(第2版)》读书笔记 Part 2 :算法入门_第2张图片

学习方法

解锁思维导图新用途

写博文前,先整理思路写一份简略的思维导图,作为文章提纲用。
突然发现思维导图在读书笔记中更像文章下笔前起草的一份提纲,在写笔记前先写一份思维导图极度有助于保持清晰的思路,节省了我花在内容结构安排上的思索时间。

好吧,突然意识到这其实就是一种算法优化,hahaha…


大佬营友们的笔记

Day 3

  1. CSDN破晓之翼 http://t.csdn.cn/bXlOA
  2. 亮点菌 http://t.csdn.cn/VozLw
  3. 重邮研究森 https://mp.csdn.net/mp_blog/creation/success/127402590
  4. 愿&空 http://t.csdn.cn/3P9d6
  5. YOLO http://t.csdn.cn/EP75k
  6. 积亦纪 http://t.csdn.cn/o0qSv
  7. Lq@@ https://blog.csdn.net/flq18210105507/article/details/127402996?spm=1001.2014.3001.5502
  8. 天寒雨落 http://t.csdn.cn/hQQhc
  9. CSDN疯狂抓头 http://t.csdn.cn/w3J0b
  10. @才华有限公司 http://t.csdn.cn/AU5cC
  11. 颹蕭蕭 https://blog.csdn.net/itnerd/article/details/127414129
  12. @小默同学 http://t.csdn.cn/CbcjF
  13. SwaggerGeek https://blog.csdn.net/weixin_45703743/article/details/127249912
  14. 小冷coding http://t.csdn.cn/iRKS5
  15. Mr Robot http://t.csdn.cn/OFojg
  16. 莫若以明 https://blog.csdn.net/weixin_53050357/article/details/127373785?spm=1001.2014.3001.5501
  17. 开摆C http://t.csdn.cn/wH3sK
  18. CSDN S.冰封万里 http://t.csdn.cn/sD4k1
  19. 鲁班七号学测开 http://t.csdn.cn/vviKe
  20. 冯运山 http://t.csdn.cn/BM5uM
  21. 深度学习从入门到放弃 https://blog.csdn.net/qq_44771102/article/details/127363991?spm=1001.2014.3001.5502
  22. -北天- http://t.csdn.cn/R6jxL ,http://t.csdn.cn/yrJq3
  23. yyzsyx http://t.csdn.cn/w6EOn
  24. Kevin_Opt http://t.csdn.cn/uUAO8

Day 4

  1. 天寒雨落 http://t.csdn.cn/hGabg
  2. 小冷coding http://t.csdn.cn/ch8rG
  3. 艰 默 https://blog.csdn.net/jianmo1993/article/details/127423237
  4. CSDN破晓之翼 https://mp.csdn.net/mp_blog/creation/success/127398967
  5. Mr Robot http://t.csdn.cn/VBPzx
  6. 给6不给6 https://blog.csdn.net/qq_64061494/article/details/127414966?spm=1001.2014.3001.5501
  7. 二球悬铃木丶 http://t.csdn.cn/ZcH1F

你可能感兴趣的:(#,趣学算法2版,算法,python)