读改变未来的九大算法笔记08_并非万能的算法

Posted 躺柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读改变未来的九大算法笔记08_并非万能的算法相关的知识,希望对你有一定的参考价值。

1. 有些问题根本不可能通过计算机解决,不管计算机有多强大或人类程序员有多聪明

2. 不可计算问题

2.1. 20世纪30年代末

2.1.1. 美国人阿隆佐·邱奇

2.1.1.1. Alonzo Church

2.1.1.2. 在计算理论上的突破性工作至今仍是计算机科学许多方面的基础

2.1.1.3. 单独发现了不可判定问题的存在

2.1.1.3.1. 比图灵早几个月发表了自己的成果
2.1.1.3.2. 邱奇的公式更为抽象,且并未详尽地提及由机器执行的计算

2.1.2. 英国人阿兰·图灵

3. 计算机软件的可靠性

3.1. 通常的情况

3.1.1. 即便高质量、编写良好的软件都会做些偏离其原有目的的事

3.2. 糟糕的情况

3.2.1. 软件崩溃,你丢失了正在处理的数据或文件

4. 可以证明不可能

4.1. 可以证明不可能存在一个能侦测所有计算机程序中所有潜在崩溃的自动化软件检查器

4.2. 反证法(Proof by Contradiction)

4.2.1. 假设怀疑某个声明S为假,但你想确信无疑地证明其为假。你先假设S为真

4.2.2. 你先假设S为真

4.2.3. 通过进行一些推理,你得出某个声明T也必须为真

4.2.4. 如果已知T为假,就出现了矛盾

4.2.5. 这能证明你的原始假设(S)也必为假

4.2.6. S导出T,但T为假,因此S为假

4.3. 实验前提

4.3.1. 任何程序可以将任何文件作为输入运行,但输出结果通常为乱码,除非输入文件本该配合由你选择运行的程序

4.3.2. 计算机程序作为文件被存储在计算机磁盘上,因此一个程序可以用另一个程序作为其输入文件运行

4.3.3. 计算机程序能将其自身文件作为输入运行

5. 发现崩溃的不可能性

5.1. 图

5.2. 假设名为CanCrash.exe的程序能分析其他程序并判定它们是否会崩溃

5.2.1. 作为输入的程序会在某种情况下崩溃,CanCrash.exe就会输出“yes”并结束

5.2.2. 如果输入程序永不会崩溃,CanCrash.exe就会输出“no”并结束

5.3. 让CanCrash.exe崩溃

5.3.1. 改变后的程序为CanCrashWeird.exe

5.3.1.1. 如果输入会崩溃,那么CanCrashWeird.exe这个程序也会故意崩溃

5.3.1.2. 如果输入永不会崩溃,则CanCrashWeird.exe会输出“no”

5.4. 转换成一个更模糊的程序称为CrashOnSelf.exe

5.4.1. 只关注程序在将自身作为输入时运行的表现

5.4.1.1. 会检测其输入程序,如果输入程序能在自身上运行,则CrashOnSelf.exe会故意崩溃

5.4.1.2. 反之,CrashOnSelf.exe会输出“no”

5.5. 转换成AntiCrashOnSelf.exe

5.5.1. 如果其输入在自身上运行时崩溃,AntiCrashOnSelf.exe就会输出“yes”

5.5.2. 如果输入在自身上运行时不崩溃,AntiCrashOnSelf.exe就会故意崩溃

5.6. 矛盾

5.6.1. AntiCrashOnSelf.exe将自己作为输入运行时会输出什么?

5.6.1.1. 如果输入崩溃,AntiCrashOnSelf.exe就会输出“yes”

5.6.1.2. 因为如果AntiCrashOnSelf.exe已经崩溃,它就不能成功地输出“yes”并结束

5.6.1.3. 如果输入不崩溃,则AntiCrashOnSelf.exe应崩溃

5.6.1.4. 排除了AntiCrashOnSelf.exe两种可能的行为,这也意味着AntiCrashOnSelf.exe一开始就不可能存在

5.6.2. 假设CanCrash.exe存在必为假

6. 停机问题和不可判定性

6.1. 停机问题(The Halting Problem)

6.1.1. 已有计算机程序最终是否会结束或“停止”的问题

6.2. 不可判定问题

6.2.1. 不能通过编写计算机程序解决的问题

6.2.2. 你不能编写一个名为AlwaysHalts.exe,输入永远停止时输出“yes”,反之输出“no”的计算机程序

6.3. 不可判定性对计算机使用的实际影响

6.3.1. 不可判定性只关注计算机程序能否生成答案,并不考虑我们需要等答案多久

6.3.2. 许多可判定任务还没有高效算法

6.3.2.1. 著名的要数旅行商问题(Traveling Salesman Problem),简称为TSP

6.3.2.1.1. 假设你必须飞往很多城市,你应该采用哪种顺序访问城市才能让飞行费用最少

6.3.2.2. 问题可判定这一事实并不意味着我们可以在实践中解决它

6.3.3. 大部分时间里都能很好地解决不可判定问题

6.3.3.1. 通常能为不可判定问题找到非常有用的部分解决方案

6.3.3.2. 软件可靠性提升部分得益于崩溃发现程序的进步

7. 人脑

7.1. 如果你相信人脑在原则上能被计算机模拟,那么人脑就会和计算机受相同的限制

7.1.1. 会存在人脑无法解决的问题——不管这个人脑有多聪明或经过多么良好的训练

7.2. 从科学观点来看,人脑和计算机之间似乎没有什么基本壁垒,因为化学和电子信号在人脑中传输的低级细节很好理解

7.3. 多种哲学论据暗示,人脑创造“理智”的物理过程在性质上与计算机能模拟的任何物理系统有所不同

读数据压缩入门笔记01_数据压缩导读

建立在数据压缩上的世界

1. 建立在数据压缩上的世界

1.1. 数据压缩技术最让人惊异之处在于,它与过去40年里个人计算的很多重大改变有关,但很少有人知道这一点

1.2. 我们当下生活在其中的这个计算世界,完全建立在数据压缩算法之上

1.3. 图像的压缩

1.3.1. 1978年

1.3.2. 图像语料库

1.3.2.1. 1972年11月《花花公子》杂志中莱娜•瑟德贝里(Lena Söderberg)

1.4. 音乐的压缩

1.4.1. 1996年

1.4.2. WAV

1.4.2.1. MP3

1.4.2.1.1. Napster音乐共享平台
1.4.2.1.2. iPod
1.4.2.1.2.1. iTunes
1.4.2.1.2.2. iPhone

1.5. 视频的压缩

1.5.1. 2001年

1.5.2. YouTube

1.5.2.1. MOV

1.6. 基因图谱

1.6.1. 2008年

1.6.2. 单个基因组序列就包含了大量的数据,仅仅是描述人类基因组成的数据就超过了14GB

1.6.3. BWT是最有效的存储DNA信息的压缩格式,甚至无须解压就能对数据进行操作

1.7. 压缩与经济

1.7.1. 压缩后的文件会变得更小

1.7.1.1. 同样的数据传输所需的时间会变短,相应的费用也会减少

1.7.1.2. 分发者的分发成本会降低,消费者的支出也会减少

2. 克劳德•香农

2.1. 硕士论文题为《继电器与开关电路的符号分析》

2.1.1. 为基于开关的现代电路计算奠定了基础

2.2. 1948年发表了《通信的数学理论》

2.2.1. 论述了发送者怎样对要发送的信息进行编码才能达到最佳效果

2.2.2. 开创了信息论(information theory)这一全新的学术领域

2.3. 发明了一种度量消息所携带信息内容的方法

2.3.1. 信息熵(information entropy)

3. 什么是数据压缩

3.1. 用最紧凑的方式来表示数据

3.2. “在保证信息能恢复的前提下,我们能将消息变得多么紧凑”

3.3. 根据现代信息论的观点,在压缩数据以减少总二进制位数的时候存在一个临界点,如果超过了这个值,我们就不能将压缩后的数据唯一正确地恢复为原来的数据流。

3.3.1. 我们的压缩目标就是尽可能地减少总二进制位数以接近这个临界值,并且不超过这个值

4. 消息编码方式

4.1. 对每一个特定的消息来说,都有一个最佳的编码方式,这里的“最佳”指的是传递消息时用到的字母或者符号(也可以说是二进制位,即信息的单位)最少

4.2. “字母表”与“摩尔斯码”是其中常见的两种

5. 数据压缩思路

5.1. 减少数据中不同符号的数量

5.1.1. 即让“字母表”尽可能小

5.2. 用更少的位数对更常见的符号进行编码

5.2.1. 即最常见的“字母”所用的位数最少

6. 数据压缩考虑因素

6.1. 不同数据的处理方法不同

6.1.1. 压缩一本书中的文字和压缩浮点型的数

6.2. 有些数据必须经过转换才能变得更容易压缩

6.3. 数据可能是偏态的

6.3.1. 夏天的整体气温偏高

6.3.1.1. 高气温出现的频率比接近零度的气温出现的频率高很多

7. 数据压缩算法

7.1. 变长编码(variable-length codes,VLC)

7.2. 统计压缩(statistical compression)

7.3. 字典编码(dictionary encodings)

7.4. 上下文模型(context modeling)

7.5. 多上下文模型(multicontext modeling)

以上是关于读改变未来的九大算法笔记08_并非万能的算法的主要内容,如果未能解决你的问题,请参考以下文章

九大排序算法(C语言)

九大排序算法(C语言)

九大排序算法(C语言)

九大排序算法(C语言)

读编程与类型系统笔记05_函数类型

读数据压缩入门笔记01_数据压缩导读