编程通识
编程通识
目录
编程通识
参考:https://www.bilibili.com/video/BV123411p7rf
通用计算机
各种计算机语言通用的东西:
- 通用性:专用计算机、通用计算机(图灵完备)
- 通用计算机模型(实现方法):图灵机、Lambda演算法系统、元胞计算机、递归、面向对象 等等
- 相同点和区别
- 相同点:解决问题的能力等价,都是图灵完备的 并且这几个模型都是可以互相虚拟的
- 不同点:对问题的拆解、建模,把问题投射到数据模型上,有区别
- 图灵完备
- 图灵机、Lambda演算法系统、元胞计算机都是图灵完备的
邱奇-图灵猜想
:“任何可以用算法实现的计算,都可以用图灵机实现”,没有更完备的了- 也叫
图灵完备
:代表和图灵机有相同处理能力。图灵机、Lambda演算法系统、元胞计算机都是图灵完备
- 超越图灵机?
- 比图灵机更完备的:可能量子计算机、大脑、宇宙能吧,反正搞不来。例如宇宙还有 "真·随机"、自我指涉
- 图灵完备的局限性
- 不是所有东西都能解决。比如不能解决
停机问题
:"设计一个程序来判断,另一个图灵机程序是否可以在有限时间内完成" 哥德尔不完备定理
:理想系统不存在。自我指涉
的逻辑悖论
- 不是所有东西都能解决。比如不能解决
- 相同点和区别
- 计算机的内存结构:冯诺依曼结构、哈佛结构
图灵机
计算机语言的特性(拆分方法)
程序 = 数据 + 指令
现在基本都是用的图灵机,计算机语言也基本都满足这个特性
优点
(为什么现在都用的图灵机而不用图灵完备的其他模型呢)
- 是最直观、最容易工程实现的方案
- 图灵机可以让问题的拆解和解构更容易 图灵机的基础模块就是 “数据+指令“(将实际问题拆成数据和指令就很容易建模了、方便程序设计) 数据类型:类似于物理中的量纲
Lambda演算法(λ演算法)
图灵的老师 —— 邱奇提出来的
Lambda演算法
又分无类型lambda演算和有类型的。例如LISP只有两种数据结构,原子(atom)和表(list)
计算机语言的特性(拆分方法)
核心概念:函数
图灵机中的 数据或指令 在这里都可以用函数来表示 Lambda演算法中的符号不重要,重要的是符号和符号之间的关系 一个lambda表达式通过另一个lambda表达式可以变成一个新的lambda表达式,能把一种关系变成另一种关系
表示方法如图
相关语言
(这种函数式编程语言基于Lambda演算法,不过现在用的都是在图灵机上进行了lmabda演算的虚拟)
Haskell
LISP (就是那个偷火箭LISP代码的笑话)
LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。 LISP作为应用人工智能而设计的语言,是第一个
声明式系内函数式
程序设计语言(最早的函数式编程语言), 有别于命令式系内过程式
的C、Fortran和面向对象的Java、C#等结构化程序设计语言LISP名称源自列表处理(LISt Processing)的英语缩写,由来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)在1958年基于λ演算所创造,采用抽象数据列表与递归作符号演算来衍生人工智能
(DEFUN HELLO () "HELLO WORLD" )
使用lambda演算法虚拟出图灵机
虚拟 图灵机中的 “数据”
虚拟 自然数
后继函数(可以理解成 x+=1 的意思)
加法函数
与函数式编程
函数式编程来源于Lambda演算法
柯里化、闭包、匿名函数等,都来源与lambda演算法
lambda演算法中的函数都是匿名函数
(js中的匿名函数又能写成箭头函数)
区别与优点(对比图灵机)
- 定义上的区别
- 图灵机:操作可以自由定义,往往特事特办,当面对特殊情况、无法预料的情况时处理不了
- Lambda演算法:操作不是被定义出来的,而是定义数据后找规律,把操作给找出来 函数式编程会有更少的bug。这也是强类型所导致的,lambda的数据类型非常强
- 图灵机要求你清楚所有情况再定义,lambda是定义规律
- 相关程序设计语言
- 图灵机:
声明式系内函数式
程序设计语言(函数式编程语言) - Lambda演算法:
命令式系内过程式
程序设计语言
- 图灵机:
- 应用
- 图灵机:擅长解决工程问题 更像是工程师
- Lambda演算法:LISP:最开始就与AI开发有关、与自然语言处理 (非AI 纯靠逻辑的那种) 有关 更像是数学家物理学家
元胞自动机
最早由冯诺依曼提出,但没重视,跑去弄冯诺依曼结构了
计算机语言的特性(拆分方法)
核心:元胞
不能拆成指令和数据,和图灵机或Lambda演算法的范式有着本质不同
相关“语言”
没有针对它的计算机编程语言,没有编程方案,
但是有元胞计算机相关的东西:《生命的游戏》
《生命的游戏》
四条规则:
一个元胞周围的元胞数为 0:死亡 一个元胞周围的细胞数为 2/3:适应 一个元胞周围的细胞 >4:拥挤、消失 一个空格周围有3个元胞:重生
产生情况:
不变 周期 移动(飞船,移动速度最快为2回合一格,有点光速的感觉) 复制(高斯帕机枪)
还可以用生命游戏模拟生命游戏
图灵完备性
《生命的游戏》中,
飞船相撞:相当于非运算
区别和优点
吃豆游戏中的遗传算法
约翰霍兰德,用计算机做的一个实验
当时霍兰德研究的是进化策略,他的这篇开山之作叫《自然与人工系统中的适应》,研究的内容,可以简单的描述为吃豆游戏 [吃豆游戏中的遗传算法](https://sq.sf.163.com/blog/article/197481681108668416)
这种的最优方法没有规律,图灵机和Lambda演算法不好弄,Lambda演算法没法发现规律,用元胞计算机这种群体的自动演算会好一点
冯诺依曼瓶颈
图灵机有冯诺依曼瓶颈
:内存读写性能拖累cpu,cpu毕竟只能线性读写
元胞计算机没有,没有cpu。模型运算是群体涌现出来的
有点像脑神经元,但应该也没超越图灵完备
文小刚,凝聚态理论里的大佬,理论物理最高奖狄拉克奖的获奖者
深度学习、神经网络、元胞自动机、类脑芯片
可以在计算机中虚拟神经网络,但硬件结构还是有限制,于是类脑芯片
的概念被提出来了
类脑芯片,由许多的存算一体单元
组成。或者用门电路和电容实现、 或者用忆组器
(特殊电阻,可以对之前留过它的电流形成记忆,类似于使用较多的神经元会变粗) 实现
区别
- 传统芯片
- 基本范式:门电路
- 使用方式:编程,数据+指令
- 忆阻芯片
- 基本范式:电流和电阻之间的关系
- 使用方式:学习、自适应。没法有目的地修改