这是一个众所周知的问题。
给定正整数数组,输出不在数组中的最小正整数。
该问题可以在空间和时间中解决:读取数组,在空间中跟踪是否发生,扫描最小的元素。
我注意到您可以为时间交换空间。如果仅具有内存,则可以进行轮操作,并获得时间。在特殊情况下,显然存在恒定空间二次时间算法。
我的问题是:
这是最佳的折衷方案,即吗?一般来说,如何证明这种界限?
假设RAM模型具有有限算法,并且可以随机访问O(1)中的数组。
这个问题的启示:在单带模型中回文的时空折衷(例如,请参见此处)。
这是一个众所周知的问题。
给定正整数数组,输出不在数组中的最小正整数。
该问题可以在空间和时间中解决:读取数组,在空间中跟踪是否发生,扫描最小的元素。
我注意到您可以为时间交换空间。如果仅具有内存,则可以进行轮操作,并获得时间。在特殊情况下,显然存在恒定空间二次时间算法。
我的问题是:
这是最佳的折衷方案,即吗?一般来说,如何证明这种界限?
假设RAM模型具有有限算法,并且可以随机访问O(1)中的数组。
这个问题的启示:在单带模型中回文的时空折衷(例如,请参见此处)。
Answers:
这可以通过字操作和字的存储器来完成(在位级RAM模型中分别为次和存储器)。实际上,解决方案将基于以下观察。
说有偶数和奇数在范围(所以和)。再有就是,使得有至多值与奇偶在输入。确实,否则至少存在输入中的偶数和至少奇数值,这意味着输入中至少存在值,这是矛盾的(其中只有个)。这意味着我们可以仅在奇数或偶数中继续搜索丢失的数字。同样的算法也可以应用于二进制符号的更高位。
因此我们的算法将如下所示:
假设我们现在已经仅存在与其余模输入值等于,但至少有号码范围具有余数模(一开始我们肯定会确定)。
说,有值与其余部分的输入模和的值与其余部分的输入模(我们可以发现在一个单次通过输入这些数字)。显然,。此外,由于输入中至少有数字,且余数为模,因此至少有一对满足步骤的要求。
我们已经发现丢失的数目时:存在范围只有一个号码可以具有剩余模(本身,如果它是在范围),所以有在输入中大多数具有零值的零值。所以,确实丢失。
显然,该算法以步骤暂停,每个步骤都需要时间(在输入数组上单次通过)。此外,仅需要字的存储空间。
如果我理解您的定义,那么可以在线性时间和恒定空间内完成此操作。显然这是最低界限,因为我们至少需要读取整个输入。
在给出的答案这个问题的满足。
用更少的时间或空间来运行它是不可能的,添加额外的时间或空间是没有用的,因此这里没有时空的权衡。(观察,因此无论如何您观察到的权衡都不是渐近的。)
关于您的一般性问题,我不知道会有任何好的定理可以帮助您证明时空权衡。这个问题似乎表明没有一个(已知的)简单答案。基本上:
假设某种语言在时间(使用一定的空间)和s空间(使用一定的时间)中是可确定的。我们是否可以找到f ,g,使得L可以由在f (t ,s )时间和g (t ,s )空间中运行的M决定?
未知,一个强有力的答案将解决很多悬而未决的问题(最明显的是关于SC的问题),这意味着不存在简单的解决方案。
编辑:好的,与重复(但我仍然假设发生了尺寸的输入的最大可能数目是Ñ + 1)。
观察到我们的算法需要能够区分至少可能的答案。假设每经过一次数据,我们最多可以获得k个数据。然后,我们将需要n / k次通过才能区分所有答案。假设k = n / s,那么我们在n中运行时间。所以我认为这证明了您想要的。
困难在于显示每次通过时我们只能得到位。如果您假设我们唯一的合法操作是=,那么我们很好。但是,如果您允许进行更复杂的操作,那么您将可以获得更多信息。