O problema mínimo de zap abaixo é o Exercício 11 na palestra de Jeff Erickson sobre "Algoritmo Greedy" .
O problema mínimo de zap pode ser declarado mais formalmente da seguinte maneira. Dado um conjunto do círculos no plano, cada um especificado por seu raio e pela coordenadas do centro, calcule o número mínimo de raios da origem que cruzam todos os círculos . Seu objetivo é encontrar um algoritmo eficiente para esse problema. (Veja um exemplo de "9 balões com 4 raios" na figura abaixo)
Pergunta: Suponha que seja possível disparar um raio que não cruze nenhum balão. Descreva e analise um algoritmo ganancioso que resolva o problema mínimo de zap nesse caso especial.
Estou tendo problemas para abordar esse problema. Eu pensei que uma abordagem gananciosa seria usar o raio que cruza mais círculos e recuar, mas me disseram que isso estava errado. Por que é isso?
E qual é o sentido do fato de haver um raio que não cruza balões? Devo provar que alguma solução ótima usa esse fato?
Qualquer ajuda seria apreciada! Recentemente, comecei a aprender algoritmos :)
Algoritmo baseado na resposta de hengxin: https://cs.stackexchange.com/a/52293/42816
Prova por indução matemática
Nota: Não utilizou a implementação O (n log n)
Agora vamos provar a correção desse algoritmo usando indução matemática. Mostraremos que nosso algoritmo ganancioso não pode fazer pior do que a solução ideal.
Deixei seja o conjunto de raios disparados pelo nosso algoritmo ganancioso. Deixei ser o conjunto de raios disparados por outra solução ideal.
Nosso caso base é quando . Existe apenas um objeto para destruir, e nosso algoritmo ganancioso usa 1 raio, o que também é ideal. Então, isso dá uma olhada.
Agora, para nossa hipótese de indução, assumiremos que nosso algoritmo guloso é ideal para até objetos.
Afirmamos agora que o primeiro raio de do não pode fazer pior do que o de .
Agora vamos considerar um situação do objeto. Então, nós classificamos e de acordo com , sentido horário. Agora vamos examinar o primeiro raio que ocorre a partir desentido horário. No, esse primeiro raio, chame-o , não pode ser pior do que o de , chame-o , porque nosso algoritmo ganancioso diz que esse raio cruza a maioria dos objetos, incluindo o primeiro . Portanto, intercepta tanto ou menos objetos do que . Assim, podemos substituir com na solução ideal .
Agora, temos que descobrir se o resto é ideal, cortando , que chamaremos . No entanto, como agora existem no máximo objetos, nossa hipótese de indução diz que nosso algoritmo ganancioso encontra uma solução ótima para . Como tal, oO problema tem uma solução ideal do nosso algoritmo ganancioso. QED