重温图灵原理,感受反证法的力量

算法已经无处不在,似乎对于每一个可以用精确的数学术语表达的问题,都有相应的算法。然而,事实并非如此,实际上有些看似简单的问题永远无法通过算法解决

计算机科学家中的先驱艾伦・图灵,曾在近一个世纪前的一篇论文中证明了这种「不可计算」问题的存在,他提出了启动现代计算机科学的计算数学模型。

图灵用一种违反直觉的策略证明了这一突破性的结果:他定义了一个问题,一个拒绝一切试图解决它的方法的问题。「比如我问你在做什么,不管你回答什么我都会说,’我要做的事情和你说的不一样’。」麻省理工学院研究理论计算机科学的研究生 Rahul Ilango 说。重写后的内容:图灵以一种违反直觉的策略证明了这一突破性的结果:他定义了一个问题,这个问题拒绝一切试图解决它的方法。「比如我问你在做什么,不管你回答什么我都会说,’我要做的事情和你说的不一样’。」麻省理工学院研究理论计算机科学的研究生Rahul Ilango表示

图灵的策略是基于一种具有悠久历史的数学方法,被称为「对角线证明」。下面是对他证明背后逻辑的简化说明

字符串

对角线证明源于解决一个关于字符串问题的巧妙技巧,字符串中每个比特位的值可以是 0 或 1。该问题的描述是:给定一个字符串列表,列表中所有字符串都一样长,如何能生成一个不在列表中的新字符串呢?

重写后的内容:一种最直接的策略是按顺序考虑每个可能的字符串。假设有五个字符串,每个字符串都有五位。首先遍历检查列表中是否存在00000。如果不存在,问题就解决了;如果存在,则转到00001并重复这个过程。这种方法很简单,但对于长字符串所产生的长列表来说速度很慢

对角线证明是一种可行的替代方法,可以逐步构建不存在的字符串。从列表中第一个字符串的第一位开始,将其反转,这将成为新字符串的第一位。然后反转第二个字符串的第二位,并将其作为新字符串的第二位,重复此操作,直到到达列表的末尾。通过反转位的操作,可以确保新字符串与原始列表中的每个字符串至少有一个不同的位置。(它们还在字符串列表中形成一条对角线,因此被称为对角线证明。)

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

重温图灵原理,感受反证法的力量

对角线证明只需要依次检查列表中每个字符串中的一位,所以通常比其他方法快得多,但它真正的威力在于它能很好地驾驭无限长的字符串问题。

麻省理工学院的理论计算机科学家 Ryan Williams 表示:“虽然字符串和列表可以是无限的,但对角化方法仍然是有效的。”

乔治·康托尔是第一个利用这种力量的人,他是集合论数学领域的创始人。1873年,他利用对角线证明了一些无穷大的值比其他的更大。60年后,图灵将这一版本的对角线证明应用于计算理论

算法的限制性

为了证明存在一类数学问题是无法通过任何算法解决的,图灵提出了一个理论。这类问题具有明确定义的输入和输出,但没有确定的过程可以将输入转化为输出。图灵主要关注决策问题,并为了更好地具象化这个模糊的任务。在决策问题中,输入可以是由0和1组成的任意字符串,而输出则可以是0或1

确定一个数字是否是素数(只能被 1 和它本身整除)是决策问题的一个例子 —— 给定一个代表数字的输入字符串,如果该数字是素数,则正确的输出为 1,如果不是素数,则为 0。另一个例子是检查计算机程序的语法错误。输入字符串代表不同程序的代码 —— 所有程序都可以用这种方式表示,因为这就是它们在计算机上存储和执行的方式 —— 规则是如果代码包含语法错误,则输出 1,如果不包含,则输出 0。

只有当算法为每一个可能的输入都产生正确的输出时,它才能说是可以解决该问题 —— 哪怕失败一次,它就不是解决该问题的通用算法。通常,人们会先指定一个想解决的问题,然后试图找到一个解决它的算法。图灵在寻找无法解决的问题时,颠覆了这一逻辑 —— 他想象了一个包含所有可能算法的无限列表,并使用对角化来构造一个难题,这个难题与列表上的每一个算法都对立。

请设想一个由20个问题组成的新问题,回答者不是从一个具体的概念出发,而是依次对每个问题都想出一个不满足的例子。当游戏结束时,回答者已经描述了一个完全由问题对立面所组成的命题

灵感PPT 灵感PPT

AI灵感PPT – 免费一键PPT生成工具

灵感PPT 32 查看详情 灵感PPT

图灵的对角线证明过程,就是要在无限长的算法列表中,对每一个算法都进行思考:「这个算法能解决我们想要证明是不可计算的问题吗?」,就好像是一种游戏比赛。Williams 表示:「这种方式将原来的问题转化为一种『无限的问题』。」

为了赢得游戏,图灵需要设计一个问题,对于每个算法给出的答案都是否定的。这意味着需要找出使第一个算法输出错误答案的特定输入,另一个使第二个算法失败的输入,以此类推。他发现,这些特殊输入使用了类似于库尔特・哥德尔 (Kurt Gödel) 在不久前在证明像「这个命题是不可证明的」这样的自我引用断言会给数学基础带来麻烦时,所使用的技巧。

此处的关键在于,每个算法(或程序)都可以表示为 0 和 1 的字符串。这意味着,就像在错误检查程序的例子中一样,算法可以将另一个算法的编码作为输入。原则上,算法甚至可以将自己的编码作为输入。

这样一来,我们可以定义一个不可计算的问题,就像在图灵证明中所提到的问题一样:“给定一个表示算法代码的输入字符串,当算法自身的代码作为输入时,如果该算法输出0,则让其输出1,否则输出0。”每个试图解决这个问题的算法都会在至少一个输入上产生错误的输出,即与自己的代码对应的输入。这意味着这个反常的问题无法用任何算法来解决

证明不了什么的是反证法

计算机科学家对于对角线证明的使用并没有到此结束。1965 年,Juris Hartmanis 和 Richard Stearns 改编了图灵的论点,以证明并非所有可计算问题是平等的 —— 有些问题本质上比其他问题更难。这一结果启动了计算复杂性理论领域,研究计算问题的难度。

复杂性理论的发展揭示了图灵对角线证明的局限性。在1975年,贝克、吉尔和索洛维证明了复杂性理论中许多未解决的问题无法仅通过对角化来解决。其中最重要的是著名的P/NP问题,该问题简单来说是关于能否在多项式时间内验证解的正确性以及是否能在多项式时间内求解的问题

对角线证明的局限性是使其如此强大的高抽象水平的直接结果。图灵的证明并没有涉及任何在实践中可能出现的不可计算的问题 —— 相反,问题往往是抽象的。其他对角线证明同样远离现实世界,因此它们无法解决现实世界中的问题。

Williams 说:「对角线证明并不是直接触碰问题本身,就好像用手套箱做实验一样。」

对角线证明的颓败之势,表明解决 P/NP 问题将是一个漫长的旅程。尽管存在局限性,对角线证明仍然是复杂性理论家武器库中的关键工具之一。2011 年,威廉姆斯将其与一系列其他技术结合起来,证明了某个受限制的计算模型无法解决一些异常困难的问题 —— 这一结果让困扰了研究人员 25 年的问题得到解决。虽然这与解决 P/NP 问题相去甚远,但仍然代表着重大进展。

如果你想证明某些事情是不可能的,不要低估否定的力量

原文链接:

需要重写的内容是:https://www.quantamagazine.org/alan-turing-and-the-power-of-negative-thinking-20230905/

以上就是重温图灵原理,感受反证法的力量的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/489042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 14:52:55
下一篇 2025年11月8日 14:55:41

相关推荐

  • 从初学到专业:掌握这五种前端CSS框架

    CSS是网站设计中重要的一部分,它控制着网站的外观和布局。前端开发人员为了让页面更加美观和易于使用,通常使用CSS框架。这篇文章将带领您了解这五种前端CSS框架,从入门到精通。 Bootstrap Bootstrap是最受欢迎的CSS框架之一。它由Twitter公司开发,具有可定制的响应式网格系统、…

    2025年12月24日
    200
  • 初学者如何快速入门CSS3技术

    初学者如何快速入门CSS3技术 CSS3是一种用于网页设计的样式表语言,它为开发者提供了丰富的样式特性和效果。对于初学者来说,学习CSS3技术可能会感觉困难和复杂,但只要掌握了基本的概念和语法,就能快速入门并开始使用CSS3来设计出令人印象深刻的网页。 本文将以简单明了的方式介绍CSS3的一些基本概…

    2025年12月24日
    000
  • 学习并掌握常见的canvas框架:绘图和动画制作的入门指南

    入门canvas框架:学习使用常见的canvas框架进行绘图和动画制作,需要具体代码示例 随着前端技术的快速发展,网页设计中的动态效果日益重要。而canvas作为一种用于在浏览器上绘制图形的HTML元素,已经成为了实现各种动画效果和游戏开发的重要工具。为了更加高效地使用canvas,许多优秀的can…

    2025年12月21日
    000
  • 从零开始学习canvas:掌握基础知识的方法指南

    零基础入门canvas:从头开始学习canvas方法的基本知识,需要具体代码示例 当我们谈到在网页上绘制图形和动画时,HTML5中的canvas元素无疑是一个非常有用的工具。虽然对于初学者来说,canvas可能会有些令人生畏,但只要有一个良好的基础知识并且跟着我们一步一步地学习,你会发现其实并不难。…

    2025年12月21日
    000
  • JavaScript快速入门:获取HTTP状态码

    快速入门:使用JavaScript获取HTTP状态码,需要具体代码示例 引言:在开发Web应用程序时,我们经常需要与服务器进行交互并获取HTTP状态码。HTTP状态码是服务器响应请求时返回的一个三位数字,它们提供了对请求状态的基本诊断和信息。在本文中,我们将学习如何使用JavaScript获取HTT…

    2025年12月21日
    000
  • HTML入门基础

    本篇文章主要介绍HTML入门基础,感兴趣的朋友参考下,希望对大家有所帮助。 标记、标签、元素 标签和元素通常是描述同样的意思,但是严格来说,一个html元素包含了开始标签和结束标签。 一个标准的HTML页面 <!–可以插入脚本,样式文件(css)以及各种meta信息页面标题 <!–可…

    2025年12月21日 好文分享
    000
  • 麦子学院bootstrap入门视频资料分享

    bootstrap是由twitter发布一款目前最受欢迎的前端框架。bootstrap基于 html、css、javascript的,它简洁灵活,将常见的css布局、常用组件和javascript插件进行了完整并完善的封装,能让没有经验的前端工程师和后端开发工程师都迅速掌握和使用,大大提高开发效率,…

    2025年12月21日
    000
  • 麦子学院bootstrap入门视频的资料(课件源码)推荐

    bootstrap是由twitter发布一款目前最受欢迎的前端框架。bootstrap基于 html、css、javascript的,它简洁灵活,将常见的css布局、常用组件和javascript插件进行了完整并完善的封装,能让没有经验的前端工程师和后端开发工程师都迅速掌握和使用,大大提高开发效率,…

    2025年12月21日
    000
  • 哪种 C++ 框架最适合入门学习?

    对于初学者来说,最佳的 c++++ 框架包括:qt 框架:跨平台 gui 开发、数据库操作和网络编程boost 库:数据结构、算法和标准库扩展wxwidgets:跨平台 gui 应用开发eigen 库:科学计算和矩阵操作opencv 库:图像处理和计算机视觉 为初学者轻松入门:探索最适合的 C++ …

    2025年12月18日
    000
  • C++ 框架入门问答宝典:手把手解决新手难题

    c++++ 框架是预先构建的代码库,提供应用程序的基础结构,帮助开发者高效地创建可维护的应用程序。市面上流行的 c++ 框架包括 boost、qt、eigen 和 opencv。在选择框架时,需要考虑应用程序类型、性能需求、可维护性以及生态系统支持。入门方法包括下载和安装框架、创建项目、导入头文件,…

    2025年12月18日
    000
  • C++ 入门加速器:专为初学者设计的快速学习指南

    c++++ 初学者指南提供了环境准备、实战案例、变量类型、控制流、函数和面向对象编程的入门介绍,帮助用户从零开始快速学习 c++。 C++ 入门加速器:专为初学者设计的快速学习指南 环境准备: 安装 C++ 编译器(例如:Visual Studio、GCC)准备一个文本编辑器(例如:记事本、Subl…

    2025年12月18日
    000
  • 学习C语言的基础知识:初学者的入门指南

    C语言作为一门广泛应用于软件开发和嵌入式系统设计的编程语言,对于初学者来说具有很大的吸引力。学习C语言不仅可以为进一步学习其他高级编程语言打下坚实的基础,还可以帮助初学者更好地理解计算机的工作原理。本文将为初学者介绍C语言的基础知识,帮助他们顺利入门。 编程环境的搭建:在开始学习C语言之前,我们首先…

    2025年12月17日
    000
  • 入门学习C语言的五款编程软件

    C语言作为一门广泛应用的编程语言,对于想从事计算机编程的人来说是必学的基础语言之一。然而,对于初学者来说,学习一门新的编程语言可能会有些困难,尤其是缺乏相关的学习工具和教材。在本文中,我将介绍五款帮助初学者入门C语言的编程软件,帮助你快速上手。 第一款编程软件是 Code::Blocks。Code:…

    2025年12月17日
    000
  • 寻找最适合初学C语言的软件,快速掌握!

    找到最适合学习C语言的软件,轻松入门! C语言是一门广泛应用于系统软件、嵌入式设备以及游戏开发领域的编程语言。学习C语言可以帮助我们更好地理解计算机底层工作原理,并提升编程能力。然而,对于初学者而言,学习一门新的编程语言可能会感到有些困难。 针对初学者的需求,市面上有许多针对C语言学习的软件工具可供…

    2025年12月17日
    000
  • C++游戏开发入门:从零开始实现自己的游戏项目

    C++是一种强大的编程语言,被广泛应用于游戏开发领域。如果你对游戏开发感兴趣,并且有一定的编程基础,那么本文将帮助你入门C++游戏开发,并从零开始实现自己的游戏项目。 第一步:准备工作在开始之前,确保你已经安装了一个C++编译器,比如Microsoft Visual Studio或者Code::Bl…

    2025年12月17日
    000
  • c语言学好,都要学什么?

    c语言是一门通用计算机编程语言,应用广泛。有人问c语言要怎么学,需要学好什么?首先小编要说一点,计算机小白对c语言上手可能不是很容易,下面请和小编一起了解一下c语言吧,看看你需要学好哪些部分。 首先你需要一周的时间掌握最基本的内容: 1、常用的基本数据类型(int,float,double,char…

    2025年12月17日
    000
  • c语言需要学到什么程度?

    对计算机有一定了解的朋友应该知道,c语言是一门通用计算机编程语言,应用广泛,是一门永远都不会过时的语言。现在有很多人在学习c语言。大学里的理科生几乎都是要学习c语言程序设计这门课。可是很多人都不知道自己该怎么学,又要学到什么程度?下面请听小编和大家好好讲讲。 对于C语言要学到什么程度,小编想和大家说…

    2025年12月17日
    000
  • 怎么精通C语言?

    对于c语言,很多人都知道,可能也有很多人大学甚至中学也学习过,可能只是熟悉或者仅仅了解,能说自己精通的应该能在前面的基础上能砍掉大部分人,所以有人就想知道,那该怎样才能精通c语言呢? 一. 先具备一定的计算机基础,为后续提升做好准备 是科班出身的直接学习C语言,算是驾轻就熟,相对来说障碍少一些。不是…

    2025年12月17日
    000
  • 现在学c语言用什么软件

    c语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。c语言能以简易的方式编译、处理低级存储器。c语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。有很多朋友自学了一段时间后想要找一些比较好用的c语言编程软件,下面我将给大家一些推荐。 现在有很多C语言编…

    2025年12月17日
    000
  • Python中安装matplotlib:一个简单的快速入门指南

    标题:快速入门:Python中安装matplotlib的简易指南 在Python中,matplotlib是一个广泛使用的数据可视化库,它提供了丰富的绘图功能,能够以简单易懂的方式展示数据。本文将介绍如何在Python中安装matplotlib,并提供具体的代码示例,以帮助初学者快速入门。 一、安装P…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信