计算思维与程序设计

2 阅读4分钟

计算思维

程序设计的本质是数学,而且是一门应用数学,计算思维是一种使用计算机的逻辑来解决问题的思维,是一种能够将计算“抽象化”再“具体化”的能力

计算思维的4个基石:分解、模式识别、模式概括与抽象、算法

分解

编写程序或者解决问题的时候,将问题想的太庞大,如果不进行有效分解,就很难去处理。其实将一个复杂的问题分割成许多小问题,再把这些小问题各个击破

模式识别

在一组数据找出特征或者规则,用于对数据进行识别与分类,以作为决策判断的依据。假如我们想要画一只猫,猫咪有那些特征呢?比如眼睛、尾巴、毛发、叫声、胡须等,加入这些共有的特征,很多就可以画出五花八门的猫(这里让我想起了,鸭子模型)

模式概括与抽象

模式概括与抽象在于过滤以及忽略掉不必要的特征,可以集中在重要的特征上,有助于将问题抽象化,进而建立模型,目的是能够从原始特征数据集合中学习到问题的结构与本质。

通常这个过程开始会收集许多数据,通过模式概括与抽象把无助于解决问题的特征和模式去掉,留下相关的以及重要的属性,直到我们确定一个通用的问题以及建立解决这个问题的规则

“抽象”没有固定的模式,它随着需要或实际情况而有所不同,

列如,把一辆汽车抽象化,

  • 车行业务员:车轮、引擎、方向盘、刹车、地盘
  • 修车师傅:引擎系统、底盘系统、传动系统、刹车系统、悬吊系统

算法

算法常出现在规划和程序设计的第一步,因为算法本身就是一种计划,每一条指令与每一个步骤都是经过规划的,在这个规划汇总包含解决问题的每一个步骤和每一条指令

算法必须符合的5个条件

  1. 输入(Input):0个或者多个输入数据,这些输入必须有清楚的描述或定义
  2. 输出(Output):至少会有一个输入结果,不能没有输出结果
  3. 明确性(Definiteness):每一条指令或者每一个步骤必须是简洁明确的
  4. 有限性(Finiteness):在有限步骤后一定会结束,不会产生无限循环
  5. 有效性(Effectiveness):步骤清晰且可行,只要有时间允许,用户就可以用纸笔计算而求出答案

常用的算法可以使用中文、英文、数字、可读性高级语言、流程图等方式来描述,算法的主要目的在于让人们了解所执行工作的流程与步骤,只要清楚的体现算法的5个条件即可

时间复杂度O(F(n))

如何去评估一个算法的好坏呢?可以把某个算法执行步骤的计数来作为衡量运行时间的标准

如何定义时间复杂度: 在一个完成理想状态下的计算机汇总,我们用T(n)来表示程序执行所要花费的时间,其中n代表数据输入量。程序最坏运行时间或者最大运行时间是时间复杂度的衡量标准,一般以Big-Oh表示。

在分析算法的时间复杂度时,往往用函数来表示它的成长率,其实时间复杂度是一种“渐近表示法”。

时间复杂度只是执行次数的一个大概的量度,并非真实的执行次数。Big-Oh是一种用来表示最坏运行时间的表示方式,也是最常用于描述时间复杂度的渐近表示法。

Big-Oh

  1. O(1):常数时间,表示算法的运行时间是一个常数
  2. O(n): 线性时间,表示执行的时间会随着数据集合大小而线性增长
  3. O(log2log_2n):次线性时间,成长速度比线性时间慢、比常数时间快
  4. O(n2n^2):平方时间,算法的运行时间会呈二次方增长
  5. O(n3n^3):立方时间,算法的运行时间会呈三次方增长
  6. O(2n2^n): 指数时间,算法的运行时间会呈2的n次方增长
  7. O(nlog2nnlog_2n):线性乘对数时间,介于线性和二次方增长的中间模式

当 n>=16 时,O(1) < O(log2log_2n) < O(n) < O(nlog2nnlog_2n) < O(n2n^2) < O(n3n^3) < O(2n2^n)