SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Algoritmos Gulosos e Aproximados
Dianne Dias Silva
Inael Rodrigues
Jarderson Cruz
O que são algoritmos gulosos?
O que são algoritmos gulosos?




Algoritmo guloso, ou ganancioso, é uma técnica de algoritmos para resolver
 problemas de otimização, sempre realizando a escolha que parece ser a
melhor no momento; fazendo uma escolha ótima local, na esperança de que
               esta escolha leve até a solução ótima global.
Características dos Algoritmos
● Utilizados para otimização;
● Um algoritmo guloso é "míope";
● Nunca voltam atrás;
● Algoritmos      simples     e    de fácil
  implementação;
● Nem sempre conduz à soluções ótimas
  globais;
● Podem efetuar cálculos repetitivos.
Elementos do Algoritmo Guloso
● Propriedade de escolha gulosa;

● Subestrutura ótima.
Algoritmo Guloso Genérico
Problema do Troco
Problema do Troco
● Troco de $2.89;

● Moedas = { 100, 25, 10, 5 , 1 };

● Min (Troco): 2 de valor 100, 3 de valor 25, 1
  de valor 10 e 4 de valor 1.
Algoritmo do Troco
Seleção de Atividades
Seleção de Atividades
● S = a1, a2, . . . , an um conjunto n atividades
  que desejam utilizar um mesmo recurso;

● ai possui um tempo de início (si) e um tempo
  de término (fi);

● 0 ≤ si < fi < ∞;

● ai e aj são compatíveis se si ≥ fj ou sj ≥ fi.
Seleção de Atividades
Seleção de Atividades
Seleção de Atividades
Seleção de Atividades
Seleção de Atividades
Seleção de Atividades
Seleção de Atividades
Seleção de Atividades
Algoritmo da Seleção de Atividades
Algoritmo da Seleção de Atividades
Estratégia Gulosa X Programação
Dinâmica
● Programação Dinâmica: Escolha depende
  das soluções para os subproblemas (Top-
  down), ou seja, subproblemas menores para
  os maiores;

● Estratégia Gulosa: Não depende das
  soluções para os subproblemas (Bottom-
  up), isto é, a instância de um problema é
  reduzida a cada iteração, através da escolha
  gulosa.
Problema da Mochila
● Problema da mochila 0-1: um ladrão tem
  que levar itens inteiros e pode levar um
  mesmo item apenas uma vez;

● Problema da mochila fracionária: o ladrão
  pode levar frações de cada item;

● Pode se utilizar uma estratégia gulosa para
  resolver o problema da mochila fracionária,
  mas não para resolver o da mochila 0-1.
Problema da Mochila
Algoritmos Aproximados
● Um algoritmo de aproximação        retorna
  soluções aproximadas;

● São algoritmos de tempo polinomial para
  vários problemas NP-completos;

● Tais algoritmos possuem relação de
  aproximação se para qualquer entrada, que
  indica solução obtida está dentro do fator
  definido do custo da solução ótima;
Relação de Aproximação
● A relação de aproximação p(n) é definida
  em termos do custo C* de uma solução
  ótima;




● Para qualquer entrada de tamanho n, o
  custo C da solução produzida pelo algoritmo
  de aproximação está dentro de um fator p(n)
  da solução ótima;
Relação de Aproximação
● Estas definições    se aplicam tanto a
  problemas    de     minimização  quanto
  maximização;

● Maximização (0<C<C*): a relação C*/C o
  fator do custo da solução ótima é maior que
  o custo da solução aproximada;

● Minimização (0<C*<C): a relação C/C* o
  fator do custo da solução aproximada é
  maior que o custo da solução ótima;
Relação de Aproximação
● A relação de aproximação nunca é menor
  que 1, pois C/C*<1 implica C*/C>1;

● Quando a relação de aproximação é
  independente de n, a denotamos de p(n);

● É possível alcançar relações de
  aproximação cada vez melhores, mas ao
  custo de mais tempo de computação.
Esquemas de Aproximação
●O esquema de aproximação é um algoritmo
 de aproximação que toma como entrada não
 apenas uma instância do problema, mas
 também um valor ε;

●Tal que para qualquer ε fixo, o esquema é um
 algoritmo de aproximação (1 + ε);
Esquemas de Aproximação
● Se o esquema de aproximação é executado
  em tempo polinomial para qualquer ε > 0
  fixo, o chamamos de esquema de
  aproximação de tempo polinomial;

● Se o tempo de execução é polinomial em 1/ε
  quanto ao tamanho n da instância da
  entrada, o chamamos de esquema de
  aproximação de tempo completamente
  polinomial.
Algoritmos Aproximados
● Cobertura de Vértices: Problema de
  Decisão;

● Cobertura de Vértices Mínima: Problema de
  Otimização.
Cobertura de Vértices
● Se o problema é enunciado como um problema de
  decisão, é chamado de o problema da cobertura de
  vértices:
  ○ Instância: Grafo G e um inteiro positivo K.
  ○ Questão: Tem G uma cobertura de vértices de
     tamanho máximo de K?

● O problema da cobertura de vértices é um problema
  dos 21 problemas NP-completos de Karp.
Cobertura de Vértices
● O problema da cobertura de vértices mínima
  é um problema de otimização que consiste
  em encontrar a menor cobertura de vértices
  em um grafo dado.
    ○ INSTÂNCIA: Grafo G;
    ○ SAÍDA: Menor número K de tal forma que G tem
      uma cobertura de vértices de tamanho K.

.
Cobertura de Vértices
● Definição: Na Teoria dos grafos, uma
  cobertura de vértices de um grafo é um
  conjunto de vertices tal que cada aresta do
  grafo é incidente, a pelo menos, um vértice
  do conjunto.
Cobertura de Vértices
● A versão de otimização do problema de
  cobertura de vértices consiste em encontrar
  a cobertura de vértices de um grafo que
  requer o menor número de vértices.
  ○ A chamada cobertura de vértices ótima.
Cobertura de Vértices
● Cobertura qualquer:




● Cobertura Mínima:
Cobertura de Vértices
● Como seria uma heurística plausível para
  obter uma boa cobertura de vértices?
  ○ Adicione os nós de maior grau a C até que todas as
    arestas estejam cobertas.

● Esta heurística não é uma aproximação
  ○ A sua relação de aproximação cresce a uma taxa
    log n, em que n é o número de vértices.
Cobertura de Vértices
● Para criarmos um algoritmo de aproximação
  neste caso, usaremos uma técnica que
  aparentemente é menos sofisticada do que
  aquela heurística.
  ○ Comece com C Vazio;
  ○ Enquanto houver alguma aresta não coberta,
    escolha arbitrariamente uma aresta (u,v), adiciona-a
    a um conjunto A, adicione u e v a C e os remova de
    G, juntamente com as demais arestas incidentes a
    elas.
Cobertura de Vértices
Cobertura de Vértices
● Quão distante do ótimo a cobertura de
  vértices obtida pode ser?
  ○ A contém arestas de G, das quais, nenhuma
    compartilha um mesmo vértice:
    ■ É um emparelhamento.
  ○ Limitante: Uma cobertura de vértices ótima,
    obviamente contém pelo menos um vértice ligado a
    cada uma das arestas A:
    ■ Senão alguma aresta não seria coberta;
    ■ Então |C*|>= |A|.
Cobertura de Vértices
  ● A cobertura de vértices C comtém os dois
    vértices de cada aresta em A, logo:
                    |C|=2|A|

  ● Combinando as duas equações, temos
    que:
                |C|<=2|C*|
Cobertura de Vértices
● Desta forma, este é um algoritmo de
  aproximação 2 de cobertura de vértices
  ○ O tamanho da cobertura de vértice retornada é no
    máximo 2 vezes maior do que a cobertura de
    vértices ótima.
● Ainda, o algoritmo é polinomial
  ○ Consiste em remoção e adição de arestas e adição
    de elementos em um conjunto.
● Surpreedentemente, este é um dos
  melhores algoritmos de aproximação para
  cobertura de vértices.
Referências Bibliográficas
● CORMEN, T. H., LEISERSON, C, E.,
  RIVEST, R. L. e STEIN, C. “Algoritmos:
  Teoria e Prática”. 2ª ed. Ed. Campus, 2002.

● ZIVIANI, Nivio. "Projeto de Algoritmos com
  Implementações em Pascal e C". 3ª ed. Ed.
  Pioneira Thomson Learning, 2010.

Weitere ähnliche Inhalte

Was ist angesagt?

Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais111111119
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraMarcos Castro
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos GrafosBianca Dantas
 
Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)Vitor Hugo Melo Araújo
 
Programação avançada
Programação avançada Programação avançada
Programação avançada Ilídio Costa
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalizaçãoTicianne Darin
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPDelacyr Ferreira
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratosMaurício Linhares
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em CCaique Silva
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaDelacyr Ferreira
 

Was ist angesagt? (20)

Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de Dijkstra
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
 
Algoritmo Guloso
Algoritmo GulosoAlgoritmo Guloso
Algoritmo Guloso
 
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em JavaPOO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
 
Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Programação avançada
Programação avançada Programação avançada
Programação avançada
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalização
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NP
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em C
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise Assintótica
 

Ähnlich wie Algoritmos Gulosos e Aproximados

Ähnlich wie Algoritmos Gulosos e Aproximados (20)

Programação Dinâmica
Programação DinâmicaProgramação Dinâmica
Programação Dinâmica
 
Apresentacao N P Completude Loiane
Apresentacao  N P Completude  LoianeApresentacao  N P Completude  Loiane
Apresentacao N P Completude Loiane
 
O problema do transporte aplicado à grafos
O problema do transporte aplicado à grafosO problema do transporte aplicado à grafos
O problema do transporte aplicado à grafos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Aula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoAula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvido
 
Aritmética - Aula 5 - Algoritmo de Euclides
Aritmética - Aula 5 - Algoritmo de EuclidesAritmética - Aula 5 - Algoritmo de Euclides
Aritmética - Aula 5 - Algoritmo de Euclides
 
Cálculo numérico
Cálculo numéricoCálculo numérico
Cálculo numérico
 
Classes de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícilClasses de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícil
 
Iteração de política
Iteração de políticaIteração de política
Iteração de política
 
Pesquisa Operacional 1_Aula 2
Pesquisa Operacional 1_Aula 2Pesquisa Operacional 1_Aula 2
Pesquisa Operacional 1_Aula 2
 
Floyd-Warshall
Floyd-WarshallFloyd-Warshall
Floyd-Warshall
 
Introdução metodos computacionais
Introdução metodos computacionaisIntrodução metodos computacionais
Introdução metodos computacionais
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Aula 4 Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
Aula 4   Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17Aula 4   Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
Aula 4 Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
 
Teoria da Computação
Teoria da ComputaçãoTeoria da Computação
Teoria da Computação
 
0001
00010001
0001
 
000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 
Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 
Aula2
Aula2Aula2
Aula2
 
ApostilaAlgoritmo
ApostilaAlgoritmoApostilaAlgoritmo
ApostilaAlgoritmo
 

Mehr von Inael Rodrigues

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemInael Rodrigues
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reaisInael Rodrigues
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2Inael Rodrigues
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: ComentáriosInael Rodrigues
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Inael Rodrigues
 
Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Inael Rodrigues
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Inael Rodrigues
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiInael Rodrigues
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android Inael Rodrigues
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityInael Rodrigues
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilInael Rodrigues
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Inael Rodrigues
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1Inael Rodrigues
 

Mehr von Inael Rodrigues (18)

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de Pastagem
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reais
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2
 
Código limpo: Limites
Código limpo: LimitesCódigo limpo: Limites
Código limpo: Limites
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: Comentários
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09
 
Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento Ágil
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1
 

Algoritmos Gulosos e Aproximados

  • 1. Algoritmos Gulosos e Aproximados Dianne Dias Silva Inael Rodrigues Jarderson Cruz
  • 2. O que são algoritmos gulosos?
  • 3. O que são algoritmos gulosos? Algoritmo guloso, ou ganancioso, é uma técnica de algoritmos para resolver problemas de otimização, sempre realizando a escolha que parece ser a melhor no momento; fazendo uma escolha ótima local, na esperança de que esta escolha leve até a solução ótima global.
  • 4. Características dos Algoritmos ● Utilizados para otimização; ● Um algoritmo guloso é "míope"; ● Nunca voltam atrás; ● Algoritmos simples e de fácil implementação; ● Nem sempre conduz à soluções ótimas globais; ● Podem efetuar cálculos repetitivos.
  • 5. Elementos do Algoritmo Guloso ● Propriedade de escolha gulosa; ● Subestrutura ótima.
  • 8. Problema do Troco ● Troco de $2.89; ● Moedas = { 100, 25, 10, 5 , 1 }; ● Min (Troco): 2 de valor 100, 3 de valor 25, 1 de valor 10 e 4 de valor 1.
  • 11. Seleção de Atividades ● S = a1, a2, . . . , an um conjunto n atividades que desejam utilizar um mesmo recurso; ● ai possui um tempo de início (si) e um tempo de término (fi); ● 0 ≤ si < fi < ∞; ● ai e aj são compatíveis se si ≥ fj ou sj ≥ fi.
  • 20. Algoritmo da Seleção de Atividades
  • 21. Algoritmo da Seleção de Atividades
  • 22. Estratégia Gulosa X Programação Dinâmica ● Programação Dinâmica: Escolha depende das soluções para os subproblemas (Top- down), ou seja, subproblemas menores para os maiores; ● Estratégia Gulosa: Não depende das soluções para os subproblemas (Bottom- up), isto é, a instância de um problema é reduzida a cada iteração, através da escolha gulosa.
  • 23. Problema da Mochila ● Problema da mochila 0-1: um ladrão tem que levar itens inteiros e pode levar um mesmo item apenas uma vez; ● Problema da mochila fracionária: o ladrão pode levar frações de cada item; ● Pode se utilizar uma estratégia gulosa para resolver o problema da mochila fracionária, mas não para resolver o da mochila 0-1.
  • 25. Algoritmos Aproximados ● Um algoritmo de aproximação retorna soluções aproximadas; ● São algoritmos de tempo polinomial para vários problemas NP-completos; ● Tais algoritmos possuem relação de aproximação se para qualquer entrada, que indica solução obtida está dentro do fator definido do custo da solução ótima;
  • 26. Relação de Aproximação ● A relação de aproximação p(n) é definida em termos do custo C* de uma solução ótima; ● Para qualquer entrada de tamanho n, o custo C da solução produzida pelo algoritmo de aproximação está dentro de um fator p(n) da solução ótima;
  • 27. Relação de Aproximação ● Estas definições se aplicam tanto a problemas de minimização quanto maximização; ● Maximização (0<C<C*): a relação C*/C o fator do custo da solução ótima é maior que o custo da solução aproximada; ● Minimização (0<C*<C): a relação C/C* o fator do custo da solução aproximada é maior que o custo da solução ótima;
  • 28. Relação de Aproximação ● A relação de aproximação nunca é menor que 1, pois C/C*<1 implica C*/C>1; ● Quando a relação de aproximação é independente de n, a denotamos de p(n); ● É possível alcançar relações de aproximação cada vez melhores, mas ao custo de mais tempo de computação.
  • 29. Esquemas de Aproximação ●O esquema de aproximação é um algoritmo de aproximação que toma como entrada não apenas uma instância do problema, mas também um valor ε; ●Tal que para qualquer ε fixo, o esquema é um algoritmo de aproximação (1 + ε);
  • 30. Esquemas de Aproximação ● Se o esquema de aproximação é executado em tempo polinomial para qualquer ε > 0 fixo, o chamamos de esquema de aproximação de tempo polinomial; ● Se o tempo de execução é polinomial em 1/ε quanto ao tamanho n da instância da entrada, o chamamos de esquema de aproximação de tempo completamente polinomial.
  • 31. Algoritmos Aproximados ● Cobertura de Vértices: Problema de Decisão; ● Cobertura de Vértices Mínima: Problema de Otimização.
  • 32. Cobertura de Vértices ● Se o problema é enunciado como um problema de decisão, é chamado de o problema da cobertura de vértices: ○ Instância: Grafo G e um inteiro positivo K. ○ Questão: Tem G uma cobertura de vértices de tamanho máximo de K? ● O problema da cobertura de vértices é um problema dos 21 problemas NP-completos de Karp.
  • 33. Cobertura de Vértices ● O problema da cobertura de vértices mínima é um problema de otimização que consiste em encontrar a menor cobertura de vértices em um grafo dado. ○ INSTÂNCIA: Grafo G; ○ SAÍDA: Menor número K de tal forma que G tem uma cobertura de vértices de tamanho K. .
  • 34. Cobertura de Vértices ● Definição: Na Teoria dos grafos, uma cobertura de vértices de um grafo é um conjunto de vertices tal que cada aresta do grafo é incidente, a pelo menos, um vértice do conjunto.
  • 35. Cobertura de Vértices ● A versão de otimização do problema de cobertura de vértices consiste em encontrar a cobertura de vértices de um grafo que requer o menor número de vértices. ○ A chamada cobertura de vértices ótima.
  • 36. Cobertura de Vértices ● Cobertura qualquer: ● Cobertura Mínima:
  • 37. Cobertura de Vértices ● Como seria uma heurística plausível para obter uma boa cobertura de vértices? ○ Adicione os nós de maior grau a C até que todas as arestas estejam cobertas. ● Esta heurística não é uma aproximação ○ A sua relação de aproximação cresce a uma taxa log n, em que n é o número de vértices.
  • 38. Cobertura de Vértices ● Para criarmos um algoritmo de aproximação neste caso, usaremos uma técnica que aparentemente é menos sofisticada do que aquela heurística. ○ Comece com C Vazio; ○ Enquanto houver alguma aresta não coberta, escolha arbitrariamente uma aresta (u,v), adiciona-a a um conjunto A, adicione u e v a C e os remova de G, juntamente com as demais arestas incidentes a elas.
  • 40. Cobertura de Vértices ● Quão distante do ótimo a cobertura de vértices obtida pode ser? ○ A contém arestas de G, das quais, nenhuma compartilha um mesmo vértice: ■ É um emparelhamento. ○ Limitante: Uma cobertura de vértices ótima, obviamente contém pelo menos um vértice ligado a cada uma das arestas A: ■ Senão alguma aresta não seria coberta; ■ Então |C*|>= |A|.
  • 41. Cobertura de Vértices ● A cobertura de vértices C comtém os dois vértices de cada aresta em A, logo: |C|=2|A| ● Combinando as duas equações, temos que: |C|<=2|C*|
  • 42. Cobertura de Vértices ● Desta forma, este é um algoritmo de aproximação 2 de cobertura de vértices ○ O tamanho da cobertura de vértice retornada é no máximo 2 vezes maior do que a cobertura de vértices ótima. ● Ainda, o algoritmo é polinomial ○ Consiste em remoção e adição de arestas e adição de elementos em um conjunto. ● Surpreedentemente, este é um dos melhores algoritmos de aproximação para cobertura de vértices.
  • 43. Referências Bibliográficas ● CORMEN, T. H., LEISERSON, C, E., RIVEST, R. L. e STEIN, C. “Algoritmos: Teoria e Prática”. 2ª ed. Ed. Campus, 2002. ● ZIVIANI, Nivio. "Projeto de Algoritmos com Implementações em Pascal e C". 3ª ed. Ed. Pioneira Thomson Learning, 2010.