编辑:我所回答的论点没有错,但是有点误导,因为它只表明上限对于某些 n (实际上是微不足道的,因为当 n=2 范围是1)。
这是一个更精确的论点。它表明,如果log2n
对于任何特定事物都松散 n,那么对于所有人 n 所需的oracle调用数为 O(1)。
(当然不是 O(1),因此上限永远不会松动!但是我实际上并没有在这里证明这一点,并且给出了该问题的其他答案,这似乎不值得追求。)
考虑计算最大输出的问题:
给定一个 n-元组 (M1,…,Mn) 的图灵机,计算最大输出(如果在 ϵ)。如果它们都不停止,则返回0。
根据 n,计算此函数所需的最坏情况的oracle调用次数与确定哪个 n给定机器停止。(如果知道哪些机器停止运行,则可以轻松地计算出最大输出。相反,如果我想知道哪些机器停止运行,则可以按照问题陈述中的构造来构造机器{M′i} (i=1,2,…,n)
哪里 M′i 运行所有 n 给定并行的机器,然后停止并输出 i 如果 i他们曾经停下来。最大输出将告诉我停止的次数。据此,我可以准确计算出哪一个暂停。)
现在,让 n0 是最小的整数 n (如果有的话),以便满足以下条件:
使用 C(n)=max{k∈Z:2k<n} oracle调用,可以计算出的最大输出 n给定的机器。(也就是说,对于n)
明显地 n0>1,因为 C(1)=−1。事实上,n0>2 还有,因为 C(2)=0,但无法确定的最大输出 2给定的机器(没有oracle调用)。现在考虑更大n:
索赔: 如果n0 那么,对于任何 n,可以计算出的最大输出 n 给定机器 C(n0)oracle调用。(请注意,如果n0 是有限的,那么 C(n0)=O(1))
证明。。我们通过归纳证明n。基本案例是n≤n0,根据定义 n0 和 C。
让 Q0 是给定的TM n0 图灵机,仅使用 C(n0) 调用oracle。
修复任何 n>n0。给予任何n 机器 M1,…,Mn,计算最大输出,如下所示。
专注于第一 M1,…,Mn0机器。考虑跑步Q0 在这些上 n0机器。注意Q0 使 C(n0) 到oracle的调用,并且只有 n′=2C(n0)oracle对这些调用的可能响应。请注意,根据定义n′=2C(n0)<n0。让oi 表示 i可能的回应。对于每个i=1,…,n′,建一台机器 M′i
模拟 Q0 在这些计算机上,如下所示:
TM值 M′i (输入时 ϵ):
- 模拟 Q0 在 n0 机器 (M1,…,Mn0),而不是调用oracle,而是假设oracle根据 oi。
- 此模拟可能不会停止(例如,如果 oi 不是oracle实际返回的内容)。
- 如果模拟停止,则让 hi 成为最大输出 Q0 说会被给予。
- 燕尾全部 n0 机器 (M1,…,Mn0)。如果其中之一曾经输出hi,停止并输出 hi。
现在,按照给定的顺序 n 机器,替换第一个 n0 机器 M1,…,Mn0 通过这些 n′<n0 机器 M′1,…,M′n′。返回通过按以下顺序递归计算得出的值n−(n0−n′)<n机器。(请注意,递归之前不会调用oracle,因此只有在达到基本情况后才调用oracle。)
这就是为什么此计算正确的原因。为了i 这样 oi 是oracle的``正确''响应 Q0 查询 M′i 会暂停并给出原始的正确最大输出 n0机器。因此,最大输出n′ 机器 (M′1,…,M′n′)
至少是 n0 机器 (M1,…,Mn0)。另一方面,在第4步中,否M′i
可以提供大于最大输出的输出 (M1,…,Mn0)。因此,最大输出n′ 机器 (M′1,…,M′n′)
等于最大输出 n0他们替换的机器。优质教育