计算思维与程序设计
计算思维(第3种人类思维特征)
逻辑思维:推理和演绎为特征,数学为代表,A推出B,B推出C,A就可以推出C
实证思维:实验和验证为特征,物理为代表,即引力波的概念通过实验去验证
计算思维:设计和构造为特点,计算机为代表,如汉诺塔递归
计算思维特征:抽象和自动化
抽象问题的计算过程,利用计算机自动化求解
计算思维是基于计算机的思维方式
示例一如下:
计算求和:
逻辑思维求解时采用公式(科学家高斯的玩法):

计算思维求解方法(现代人的玩法):代码示例如下:
s=0
for i in range(1,101):
    s+=i
print(s) 
运行界面如下:

示例二求解圆周率问题如下:
圆周率的计算:
公式法(逻辑思维):

代码编写(计算思维):
当我们要计算圆周率的时候,我们有两种方法进行计算,第一种方法为使用公式计算,第二种为使用蒙特卡罗方法。
圆周率的蒙特卡罗方法:
圆周率本身就是一个圆形,而蒙特卡罗方法即为将以正方形的边长的一半为半径进行画圆,而这个圆正好在正方形的界内,即为正方形的内切圆,那么圆周率与圆的面积去除以正方形的面积的商有关系。
而如何计算这个结果,我们可以先求
,,即为这个图形的
。在这个
图形里面,我们可以对
正方形进行撒点,撒满之后,在
正方形内的点构成了
正方形的面积,在
圆内的点构成了
圆的面积。通过
正方形点的数量与
圆方形中所撒的点的比值就能够计算出
的值,然后乘4即为圆周率的值。
对于求解圆周率的近似公式法我们可以进行编写代码
具体代码如下:
pi=0  #定义的初始值为0
 N=100  #设置循环的数量或者累加的数量为100
 for k in range(N):
     pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6)) #当一行代码足够长导致放不下的时候,我们可以使用\进行换行。
 print("圆周率的数值是:{}".format(pi))
     
 即使用\进行换行如下所示一般:
pi=0#定义一个初始值为0
 N=100  #设置循环的数量为或者累加的数量为100
 for k in range(N):
     pi+=1/pow(16,k)*(4/(8*k+1)-\
                      2/(8*k+4)-1/(8*k+5)-\
                      1/(8*k+6))
 print("圆周率的数值是:{}".format(pi))
运行界面如下所示:

对于求解圆周率的蒙特卡罗方法我们可以进行编写代码
具体代码如下:
from random import random    #进行调用random库获取随机数
 from time import perf_counter    #进行调用time库获取perf_counter()进行计算所运行的时间
 DARTS=1000*1000    #在当前正方形的区域内抛洒点的总数量
 hits=0.0   #目前在圆的内部的点的数量
 start=perf_counter()
 for i in range(1,DARTS+1):
     x,y=random(),random()  #所抛洒的随机点用随机坐标表示
     dist=pow(x**2+y**2,0.5)   #所求取的值为随机点到圆心的距离。
     if dist<=1.0:   #如果点到直线的距离小于1,则在圆内。即判断点到圆心的距离,如果大于1的话则在圆外,即正方形区域内,如果等于1,即在圆上,如果小于1,即在圆内。
         hits=hits+1  #如果在圆内,即覆盖在圆内的点进行加1.
 pi=4*(hits/DARTS)  #所求比值为的圆,进行乘以4,即可求取整个圆的圆周率,圆的圆周率与内切圆与正方形的比值有关。
 print("圆周率值是{}".format(pi))
 print("消耗的时间为{}".format(perf_counter()-start))
 运行界面如下: 

 在进行用计算思维设计求解圆周率的代码的时候,我们通过判断当所撒的点到圆心的距离不是小于等于1的时候,此刻的点则不在圆内,反之的话则在圆内,进行加1,最后圆内所累加的点与正方形进行对比,即可求出它们的比值,而圆周率与圆的面积去除以正方形的面积的商有关系。比值求解出来后,即
圆的面积为
,而
正方形的面积为
,两者比值的结果为 
,将结果进行乘4即可求出
的值。 
示例三汉诺塔问题如下:
有三根柱子,其中一个柱子上摆放有从上到下将圆盘从小到大摆放,其中一根柱子为过度柱子,另一个柱子为目标柱子,将柱子上的圆盘放到目标柱子上,而且大圆盘不能放到小圆盘上,在移动过程中,一次只能移动一个柱子。如何移动我们通过递归过程进行解决:
我们通过逻辑思维解决的时候,需要
-1个步骤。
通过计算思维,我们的示例代码如下:
count=0
 def hanoi(n,src,dst,mid):  #n个圆盘,src为放置圆盘的圆柱,dst为目标圆盘,mid为过渡圆盘。
     global count
     if n==1:
        print("{}:{}->{}".format(1,src,dst))
        count+=1
     else:
        hanoi(n-1,src,mid,dst)    #将放置圆盘的柱子通过过渡圆盘放到目标圆盘
        print("{}:{}->{}".format(n,src,dst))
        count+=1
        hanoi(n-1,mid,dst,src)     #将过渡圆盘通过目标圆盘放到初始圆盘的柱子
 hanoi(3,'A','C','B')   #A为初始圆盘,c为目标圆盘,B为过渡圆盘。
 print(count)
 运行界面如图:

通过程序运行结果我们得知,先将一个圆盘移动到目标圆盘,再将另一个圆盘移动到过渡圆盘,再将,在从目标圆盘放到过渡圆盘,再将初始圆盘的第三个放到目标圆盘,再将过度圆盘放到初始圆盘,将放到过度圆盘的第二个放到目标圆盘,最后从初始圆盘将最小的放到目标圆盘。最后成功计算出目标顺序。
逻辑思维更多的是靠数学推理形成公式来获得结果
而计算思维更多的是模拟运算的过程,无论是模拟求和,还是模拟汉诺塔的递归,还是模拟圆周率的撒点,模拟这样的过程,使用计算机来完成大量的运算。
天气预报:
天气预报 (靠经验猜,用物理的经验的东西构造出来的值,实证思维+逻辑思维)------>实际结果< -------MM5模型(演算天气)数学演算(超算,计算思维)
天气预报即为在各地的传感器返回各地的温度,根据一定的算法进行不断地演算,即发布出最近一段时间地天气数据。
查询当地的历史天气的数据,并且根据这样的经验来预测第二天的温度。
量化分析:
对于股票来说,人们利用经验去猜,是利用实证思维+逻辑思维。
而计算思维是利用计算机将大量数据进行机器学习,然后自动交易。
抽象问题的计算过程,利用计算机自动化求解
计算思维基于计算机强大的算力及海量数据
抽象计算过程,关注设计和构造,而非因果
以计算机程序设计为实现的主要手段
编程是将计算思维变成现实的手段
抽象(设计和构造)
自动化(编程)










