Pular para conteúdo

Algoritmos Gulosos

Um algoritmo guloso constrói uma solução comprometendo-se com uma escolha localmente preferível sem revisitá-la. Isso funciona apenas quando o problema possui uma propriedade adequada de troca ou dominância.

Escalonamento de intervalos

Dadas atividades com horários de início e término, selecione o maior subconjunto sem sobreposições. Escolher uma atividade compatível que termine primeiro é ótimo.

Argumento de troca: considere qualquer escalonamento ótimo. Sua primeira atividade não pode terminar antes da primeira atividade escolhida pelo algoritmo guloso. Substituí-la pela escolha gulosa preserva a viabilidade e o número de atividades escalonadas. Aplique o mesmo argumento às atividades compatíveis restantes.

Após a ordenação pelo horário de término, a seleção é linear; portanto, o tempo total é Θ(n log n), e o espaço adicional da seleção é Θ(1), sem contar a saída.

Quando a estratégia gulosa falha

Escolher o item de maior valor imediato não resolve o problema da mochila 0/1 em geral. Uma escolha local pode consumir a capacidade necessária para uma combinação melhor. A mochila fracionária possui outra estrutura e admite uma solução gulosa por densidade de valor.

Padrões de prova

  • trocar a primeira divergência de uma solução ótima pela escolha gulosa;
  • mostrar que a solução gulosa permanece pelo menos tão adiantada a cada etapa;
  • modelar os conjuntos viáveis com uma estrutura como um matroide.

Exercícios

  1. Dê um contraexemplo para a escolha da atividade mais curta primeiro.
  2. Prove a escolha de aresta segura de Kruskal usando cortes do grafo.
  3. Explique por que pesos de aresta não negativos são necessários à etapa gulosa de Dijkstra.