我正在寻找一种算法来处理以下问题,我暂时将其称为“坏苹果”算法。
问题
- 我有N个进程在M个沙箱中运行,其中N >>M。
- 为每个进程提供自己的沙箱是不切实际的。
- 这些进程中至少有一个进程表现不佳,并导致整个沙箱崩溃,从而杀死了同一沙箱中的所有其他进程。
如果这是一个行为不佳的进程,那么我可以使用简单的二等分将一半的进程放在一个沙箱中,再将一半的进程放在另一个沙箱中,直到发现错误为止。
问题
如果一个以上进程的行为不佳-包括它们都表现不佳的可能性-这种朴素的算法是否有效?是否可以保证在某些合理范围内工作?
简化版
为了争辩,让我们假设一个不好的过程会立即降低其沙箱,而一个好的过程则永远不会。
如何保证行为不端的过程会使沙箱崩溃?我的意思是-我们可以假设有一个有限的时间,当我们确定给定的沙箱没有崩溃时,它只能运行“干净”的进程吗?
—
SF。
不幸的是,并不是:沙盒不会在5分钟内崩溃的事实并不意味着所有过程都表现良好,但确实使我们对该事实更有信心。
—
罗杰·利普斯科姆
...但是出于这个问题的目的,我想可以通过允许有限的时间来近似。
—
罗杰·利普斯科姆
您必须雾化您认为是“通过”和“失败”的过程。如果它运行5分钟而没有失败,从技术上讲它还是个坏苹果,但是就像停顿的问题一样,当它过去时,如果在沙子上不打硬线,您将永远无法100%确定。
—
尼尔
听起来您走在正确的轨道上。如果存在多个进程,并且有多个坏苹果,则可能必须使用较大的M值或不均匀的组,以便可以隔离已知的好苹果,然后将已知的好软件保留在一个沙箱中,并在两个进程之间进行划分您的其他沙箱,直到您确定了个人。您拥有的沙箱越多,它就会越快。正如@Neil指出的那样,这是N个算法的对数M的大O,因此增加M将减少您的尝试。
—
GlenPeterson