Ich suche nach einem Algorithmus, um das folgende Problem zu lösen, das ich (vorerst) den "Bad Apple" -Algorithmus nenne.
Das Problem
- Ich habe N Prozesse in M Sandboxen ausgeführt, wobei N >> M.
- Es ist unpraktisch, jedem Prozess einen eigenen Sandkasten zu geben.
- Mindestens einer dieser Prozesse verhält sich schlecht und bringt die gesamte Sandbox zum Erliegen, wodurch alle anderen Prozesse in derselben Sandbox beendet werden.
Wenn es sich um einen einzelnen Prozess mit schlechtem Verhalten handelte, konnte ich eine einfache Halbierung verwenden, um die Hälfte der Prozesse in einen Sandkasten und die Hälfte in einen anderen Sandkasten zu legen, bis ich den Schurken fand.
Die Frage
Wenn sich mehr als ein Prozess schlecht verhält - einschließlich der Möglichkeit, dass sie sich alle schlecht verhalten - "funktioniert" dieser naive Algorithmus? Funktioniert es garantiert innerhalb einiger vernünftiger Grenzen?
Vereinfachungen
Nehmen wir aus Gründen der Argumentation an, dass ein schlechter Prozess seine Sandbox sofort herunterfährt und ein guter Prozess niemals.
algorithms
Roger Lipscombe
quelle
quelle
Antworten:
Wenn Sie einen schlechten Apfel gefunden haben, können Sie den Algorithmus anwenden:
Wenn Sie den einen "guten" Apfel gefunden haben, gilt der gleiche Algorithmus, sondern die gute Gruppe.
Dieser Algorithmus hat eine O (log_M (N)) - Leistungsrate, hängt jedoch davon ab, dass es nur einen schlechten Apfel gibt.
Wenn Sie nicht wissen, wie viele gute / schlechte Äpfel es gibt, können Sie den folgenden Algorithmus verwenden:
Dies ist das Worst-Case-Szenario, das jedoch
O(N/M)
rechtzeitig ausgeführt wird (oderO(N)
abhängig davon, ob Sie einen einzelnen Durchgang als einzelnen Test oder als Sammlung parallel durchgeführter Tests betrachten). Alles in allem ist dies keineswegs ein schlechter Ansatz.Möglicherweise gibt es Algorithmen, die eine bessere Leistung erbringen, aber Sie müssen wissen, wie viele schlechte / gute Äpfel sich in der Charge befinden. Wenn ich diesen Faktor nicht kenne, obwohl ich ihn nicht beweisen kann, würde ich wetten, dass Sie es nicht besser machen können als den oben aufgeführten letzteren Algorithmus.
Ich hoffe, das hilft!
Bearbeiten : Aus praktischer Sicht verstehe ich, dass einige dieser Operationen nicht einfach durchzuführen sind. Die unglückliche Realität ist jedoch, dass Sie den schlechten Apfel nicht genau bestimmen können, anhand dessen Prozesse auf der Sandbox ausgeführt wurden, die zu diesem Zeitpunkt ausgeführt wurde, ohne zumindest Prozesse zu aktivieren oder zu deaktivieren. Wenn sich die Frage auf den Algorithmus bezieht, habe ich das wohl beantwortet. Wenn sich die Frage darauf bezieht, wie mit einer solchen Situation umzugehen ist, ist die Frage möglicherweise besser für den Superuser SE geeignet.
quelle