Estoy buscando un algoritmo para manejar el siguiente problema, que estoy llamando (por ahora) al algoritmo de "manzana podrida".
El problema
- Tengo N procesos ejecutándose en M sandboxes, donde N >> M.
- No es práctico dar a cada proceso su propia caja de arena.
- Al menos uno de esos procesos se comporta mal y está haciendo caer todo el entorno limitado, matando así a todos los demás procesos en el mismo entorno limitado.
Si se tratara de un solo proceso de mal comportamiento, entonces podría usar una bisección simple para colocar la mitad de los procesos en una caja de arena, y la otra mitad en otra caja de arena, hasta que encuentre el malhechor.
La pregunta
Si más de un proceso se comporta mal, incluida la posibilidad de que todos se comporten mal, ¿este ingenuo algoritmo "funciona"? ¿Se garantiza que funcione dentro de algunos límites razonables?
Simplificaciones
En aras de la discusión, supongamos que un mal proceso derriba su caja de arena instantáneamente, y un buen proceso nunca lo hace.
algorithms
Roger Lipscombe
fuente
fuente
Respuestas:
Si estaba encontrando una manzana podrida, entonces podría aplicar el algoritmo:
Del mismo modo, si estaba encontrando la única manzana "buena", entonces se aplica el mismo algoritmo, pero en lugar de encontrar el buen grupo.
Este algoritmo tiene una tasa de rendimiento O (log_M (N)) pero depende del hecho de que solo hay una manzana defectuosa.
Si no sabe cuántas manzanas buenas / malas hay, entonces podría usar el siguiente algoritmo:
Este es el peor de los casos, pero se ejecuta a
O(N/M)
tiempo (oO(N)
dependiendo de si considera un solo pase como una sola prueba o como una colección de pruebas realizadas en paralelo). A fin de cuentas, este no es un mal enfoque de ninguna manera.Puede haber algoritmos que funcionen mejor que esto, pero requiere que sepa cuántas manzanas malas / buenas hay en el lote. Sin conocer este factor, aunque no puedo probarlo, estaría dispuesto a apostar que no puede hacerlo mejor que el último algoritmo mencionado anteriormente.
¡Espero que ayude!
Editar : Desde una perspectiva práctica, entiendo que algunas de estas operaciones no se realizan fácilmente. Eso es cierto, sin embargo, la desafortunada realidad es que no se puede determinar la manzana defectuosa estrictamente desde qué procesos se estaban ejecutando en el sandbox que se estaba ejecutando en ese momento sin ser al menos activar o desactivar procesos. Si la pregunta se refiere al algoritmo, creo que he respondido eso. Si la pregunta se refiere a cómo lidiar con una situación como esta, entonces tal vez la pregunta sería más adecuada para el superusuario SE.
fuente