Estou procurando um algoritmo para lidar com o seguinte problema, que estou (por enquanto) chamando de algoritmo "maçã ruim".
O problema
- Eu tenho N processos em execução em M sandboxes, onde N >> M.
- Não é prático atribuir a cada processo sua própria caixa de proteção.
- Pelo menos um desses processos é mal comportado e reduz a caixa de areia inteira, matando todos os outros processos na mesma caixa de areia.
Se fosse um único processo mal comportado, eu poderia usar uma simples bissecção para colocar metade dos processos em uma caixa de areia e metade em outra caixa de areia, até encontrar o mal-entendido.
A questão
Se mais de um processo é mal comportado - incluindo a possibilidade de que todos sejam mal comportados - esse algoritmo ingênuo "funciona"? É garantido que funcione dentro de alguns limites razoáveis?
Simplificações
Por uma questão de argumento, vamos supor que um processo ruim reduz sua caixa de areia instantaneamente, e um bom processo nunca ocorre.
algorithms
Roger Lipscombe
fonte
fonte
Respostas:
Se você estava encontrando uma maçã defeituosa, poderia aplicar o algoritmo:
Da mesma forma, se você estava encontrando a maçã "boa", aplica-se o mesmo algoritmo, mas, em vez disso, encontra o grupo bom.
Esse algoritmo tem uma taxa de desempenho O (log_M (N)), mas depende do fato de que há apenas uma maçã defeituosa.
Se você não souber quantas maçãs boas / ruins existem, poderá usar o seguinte algoritmo:
Esse é o pior cenário, mas é executado no
O(N/M)
tempo (ouO(N)
dependendo de você considerar uma única passagem como um único teste ou como uma coleção de testes executados em paralelo). Tudo considerado, esta não é uma abordagem ruim, por qualquer meio.Pode haver algoritmos com desempenho melhor que isso, mas exige que você saiba quantas maçãs ruins / maçãs boas existem no lote. Sem conhecer esse fator, embora eu não possa provar isso, eu estaria disposto a apostar que você não pode fazer melhor do que o último algoritmo listado acima.
Espero que ajude!
Edit : Do ponto de vista prático, entendo que algumas dessas operações não são executadas facilmente. Isso é verdade, no entanto, a realidade lamentável é que você não pode determinar estritamente a maçã podre a partir da qual os processos estavam sendo executados na caixa de areia que estava sendo executada naquele momento, sem pelo menos ativar ou desativar os processos. Se a pergunta pertence ao algoritmo, acho que respondi a isso. Se a pergunta diz respeito a como lidar com uma situação como essa, talvez a pergunta seja mais adequada ao superusuário SE.
fonte