Computer science 可判定性的要点和重要性
如果TM识别该语言并进入接受或拒绝状态,则该语言是可判定的。作为开发人员,我认为这很重要,因为这意味着我们可以确定程序是否包含缓冲区溢出或死锁。此外,以下问题是无法确定的:Computer science 可判定性的要点和重要性,computer-science,computation-theory,decidable,Computer Science,Computation Theory,Decidable,如果TM识别该语言并进入接受或拒绝状态,则该语言是可判定的。作为开发人员,我认为这很重要,因为这意味着我们可以确定程序是否包含缓冲区溢出或死锁。此外,以下问题是无法确定的: 程序是否访问过未初始化的变量 两个上下文无关语法描述相同的语言吗 如果通过引用或复制结果传递给子例程的参数会有区别吗 关于可判定性,您认为什么是可判定性的关键点,以及为什么可判定性很重要(特别是对开发人员而言) 注意:答案中的要点很好-我可以自己查找主题。我只想知道要点是什么。也许这是一本书的主题,但无论如何我都要尝试一
- 程序是否访问过未初始化的变量李>
- 两个上下文无关语法描述相同的语言吗李>
- 如果通过引用或复制结果传递给子例程的参数会有区别吗
no answer
1到3对于自动推理工具(包括程序验证器)很流行。4是病毒扫描程序的功能。5是一种允许用户编写脚本以自动化更大系统的方法;与其给他们完整的JavaScript/Scheme/Lua/任何东西,不如给他们一个不允许无限递归/循环的受限子集。假设您必须编写满足以下条件的软件:“在运行时,任何函数都不能直接或间接地调用自身” 该条件是不可判定的,但更严格的条件可能是可判定的,例如:“不应使用函数指针,也不应直接或间接包含对自身的调用” 这是为了强调,有时可以用灵活性换取可判定性,以便系统的某些必要属性可以强制执行 如果一种编程语言是可判定的,那么总是可以判定一个程序是否是该语言的有效程序
但是,即使某个程序是该语言的有效程序,也无法确定该程序是否会导致缓冲区溢出或死锁。您的第一点和第三点取决于语言。在一种不允许未初始化变量的语言中,程序是否访问未初始化变量当然是完全可以确定的(答案总是否定的)。即使它允许在某些情况下使用未初始化的变量,它也可能是可判定的(取决于这些情况)。+1很好的答案。因此,知道一个问题是不可分的,会导致你尝试不同的方法。但你认为可判定性的重要性是什么?