Computer science 可判定性的要点和重要性

Computer science 可判定性的要点和重要性,computer-science,computation-theory,decidable,Computer Science,Computation Theory,Decidable,如果TM识别该语言并进入接受或拒绝状态,则该语言是可判定的。作为开发人员,我认为这很重要,因为这意味着我们可以确定程序是否包含缓冲区溢出或死锁。此外,以下问题是无法确定的: 程序是否访问过未初始化的变量 两个上下文无关语法描述相同的语言吗 如果通过引用或复制结果传递给子例程的参数会有区别吗 关于可判定性,您认为什么是可判定性的关键点,以及为什么可判定性很重要(特别是对开发人员而言) 注意:答案中的要点很好-我可以自己查找主题。我只想知道要点是什么。也许这是一本书的主题,但无论如何我都要尝试一

如果TM识别该语言并进入接受或拒绝状态,则该语言是可判定的。作为开发人员,我认为这很重要,因为这意味着我们可以确定程序是否包含缓冲区溢出或死锁。此外,以下问题是无法确定的:

  • 程序是否访问过未初始化的变量
  • 两个上下文无关语法描述相同的语言吗
  • 如果通过引用或复制结果传递给子例程的参数会有区别吗
关于可判定性,您认为什么是可判定性的关键点,以及为什么可判定性很重要(特别是对开发人员而言)

注意:答案中的要点很好-我可以自己查找主题。我只想知道要点是什么。

也许这是一本书的主题,但无论如何我都要尝试一下

关键是:有些问题是不可判定的,即无法通过算法解决,因此应该通过其他方法解决。在这些问题中,有许多与计算机语言有关的“元问题”,例如语言问题

确定问题不可判定后,有几种可能的行动方案:

  • 有些问题可能是半可判定的,即有一个半算法可以解决某些情况,但在其他情况下会永远循环。在执行半算法时,在其上放置一个计时器,并在时间用完时返回
    no answer
  • 通过简化问题,只解决问题的几个关键部分
  • 2+当问题变得太复杂时,请用户输入
  • 使用启发式方法,大部分时间都能得到正确答案
  • 使用不同的语言,可能是非图灵完全语言

  • 1到3对于自动推理工具(包括程序验证器)很流行。4是病毒扫描程序的功能。5是一种允许用户编写脚本以自动化更大系统的方法;与其给他们完整的JavaScript/Scheme/Lua/任何东西,不如给他们一个不允许无限递归/循环的受限子集。

    假设您必须编写满足以下条件的软件:“在运行时,任何函数都不能直接或间接地调用自身”

    该条件是不可判定的,但更严格的条件可能是可判定的,例如:“不应使用函数指针,也不应直接或间接包含对自身的调用”

    这是为了强调,有时可以用灵活性换取可判定性,以便系统的某些必要属性可以强制执行

    如果一种编程语言是可判定的,那么总是可以判定一个程序是否是该语言的有效程序


    但是,即使某个程序是该语言的有效程序,也无法确定该程序是否会导致缓冲区溢出或死锁。

    您的第一点和第三点取决于语言。在一种不允许未初始化变量的语言中,程序是否访问未初始化变量当然是完全可以确定的(答案总是否定的)。即使它允许在某些情况下使用未初始化的变量,它也可能是可判定的(取决于这些情况)。+1很好的答案。因此,知道一个问题是不可分的,会导致你尝试不同的方法。但你认为可判定性的重要性是什么?