Computer science 最小语句数:P还是NP?

Computer science 最小语句数:P还是NP?,computer-science,theory,proof,Computer Science,Theory,Proof,编写用一行源代码完成任务的程序是程序员的一个常见爱好。但这有点琐碎:我可以获取1000000行代码,删除所有换行符,瞧!一行 为了让事情变得有趣,我们可以计算语句。对于C风格的语言,计算语句的一种简单方法是计算分号:因此,如果elses可以嵌套一百万个 假设您有一个带有n语句的程序p。它经过一系列状态(变量值)s(其中s是一个向量)并产生输出x。我们可以提出两个问题: 语句少于n的程序能否生成输出x 语句少于n的程序能否通过s的某个子集 很快,一些事情变得显而易见。采取以下方案: int sum

编写用一行源代码完成任务的程序是程序员的一个常见爱好。但这有点琐碎:我可以获取1000000行代码,删除所有换行符,瞧!一行

为了让事情变得有趣,我们可以计算语句。对于C风格的语言,计算语句的一种简单方法是计算分号:因此,如果elses可以嵌套一百万个

假设您有一个带有n语句的程序p。它经过一系列状态(变量值)s(其中s是一个向量)并产生输出x。我们可以提出两个问题:

  • 语句少于n的程序能否生成输出x
  • 语句少于n的程序能否通过s的某个子集
  • 很快,一些事情变得显而易见。采取以下方案:

    int sum = a+b;
    float mean = sum/2.0;
    return mean;
    
    我们可以将其重构(或者我应该说“defactor”)为一行代码:

    return (a+b)/2.0;
    
    每个程序都能被删除到一行吗?以这个节目为例:

    string x = "";
    for (int i = 0; i<a; i++)   // Should these semicolons count?
    {
        x = x + ".";
    }
    return x;
    
    string x=”“;
    
    对于(int i=0;i),由于语句的概念是特定于语言的,因此有些语言中的每个程序都可以作为单个语句或表达式编写。该死,甚至有些语言中的每个程序都必须作为单个表达式编写

    这就是说,假设一种语言不是这样的(而且肯定有这样的语言),找到解决给定问题的最小语句数的问题将既不是p也不是NP,这是不可判定的

    这个问题可以通过使用少于n条语句(一个有限的数字)尝试每个可能的程序来彻底回答

    由于其中一些程序不会终止,并且不可能知道哪些程序会终止(停止问题),所以这不起作用

    此外,在大多数语言中,少于n条语句的程序数量不是有限的。例如,在大多数语言中,有无限多条语句的形式为
    return foo+bar+…+baz;

    A.对于产生x(可能通过s)和n个语句的程序p,是否有可能证明(以有效的方式)找不到能在m个语句中实现这一点的Q

    (我假设你忘了一个
    m
    ,否则这个问题就没有意义了。)

    不,这根本无法证明

    B.能否(以有效的方式)找到最小n

    不,根本找不到

    C.是否保证最小n为1


    正如我在开始时所说的,这取决于语言,出于上述问题的目的,我假设一种语言的答案是否定的。

    听起来太像家庭作业了……那将是相当奇怪的家庭作业:)。不,我只是好奇。如果你想计算语句的数量,逗号操作符呢?在C/C++中,存在初始化问题,每个类型必须至少使用一条不同的语句。但是,在此之后,可以使用逗号运算符执行任何操作。例如(对于初始示例),您可以编写
    return(sum=a+b,mean=sum/2.0,mean)如果逗号不等于额外语句(与分号不同),则它等于。无论是否使用
    {}
    ,每个循环都至少需要一个分号(而不是逗号)来终止。但您可以执行伪循环,而无需在每个循环中使用逗号附加语句。而不是<代码>(a=0);(写一个函数的最短代码长度)。语句的数目是相当不礼貌的。谢谢你们的详细解释!我现在意识到我没有考虑到一些关键的问题(比如停顿问题)。