SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
Introdução a Análise e
Complexidade de
Algoritmos
Nécio de Lima Veras
Objetivo
Conhecer aspectos básicos sobre a análise e complexidade
de algoritmos.
Antes de qualquer coisa …
O que é mesmo um algoritmo?
Cormen (2002)
“Qualquer procedimento computacional bem
definido que toma algum valor ou conjunto de
valores como entrada e produz algum valor ou
conjunto de valores como saída”
Algoritmos
• Razões para estudar:

• Prática: 

• Devemos conhecer um conjunto de algoritmos de diferentes
áreas;

• Devemos ser capazes de projetar novos algoritmos e analisar
suas eficiências;

• Teóricas: 

• O estudo de algoritmos é a “pedra fundamental” da computação; 

• Desenvolver habilidades analíticas.
Algoritmos
Tipos importantes de
problemas
• Ordenação: reorganizar itens de uma estrutura seguindo
alguma ordem; 

• Busca: encontrar um dado valor chave em um dado
conjunto de valores; 

• Processamento de textos: buscar uma dada palavra em
um texto; avaliar similaridade entre cadeias de caracteres;
etc; 

• Problemas em grafos: planejamento de rotas; caminho
mais curto; ordenação topológica;
Tipos importantes de
problemas
• Problemas combinatoriais: encontrar um objeto
combinatória (permutações, combinações ou
subconjuntos) que satisfaça certas restrições e tenha
certas prioridades (maximizar um valor ou minimizar um
custo);

• Problemas geométricos: envolve objetos geométricos
como pontos, linhas ou polígonos; 

• Problemas numéricos: envolve objetos matemáticos de
natureza contínua: resolução de equações e sistemas de
equações; integrais definidas, etc.
Estratégias de projeto de
algoritmos
• Força bruta (brute force);

• Dividir para conquistar (divide and conquer); 

• Diminuir e conquistar (decrease and conquer); 

• Transformar e conquistar (transform and conquer); 

• Compromisso tempo-espaço (space and time tradeoffs); 

• Estratégia gulosa (greedy); 

• Programação dinâmica (dynamic programming); 

• Voltando atrás (bracktracing);

• Ramificar e limitar (branch and bound);
Análise de algoritmos
• Significa prever os recursos de que ele necessitará. 

• Em geral memória, largura de banda de comunicação ou hardware de
computação são as preocupações principais, mas frequentemente é o
tempo de computação que se deseja medir (Cormen, 2012).

• Basicamente temos dois tipos de análise:

• De um algoritmo particular - calcular o custo de um algoritmo
na resolução de um problema específico; 

• De uma classe de algoritmos - considerando um problema
específico, determinar o algoritmo de menor custo possível
para resolvê-lo.
Como calcular o custo
de um algoritmo?
Moleza!!!
Calculando a sua complexidade
:)
Complexidade computacional?
• Termo criado por Juris Hartmanis e Richard Stearns (1965) 

• Classificação de problemas de acordo com sua dificuldade

• Relação entre: tamanho do problema; o tempo e espaço
necessários para resolvê-lo; 

• Fundamental para projetar e analisar algoritmos.

• Leitura complementar: https://pt.wikipedia.org/wiki/Complexidade_computacional
Complexidade computacional?
• Termo criado por Juris Hartmanis e Richard Stearns (1965) 

• Classificação de problemas de acordo com sua dificuldade

• Relação entre: tamanho do problema; o tempo e espaço
necessários para resolvê-lo; 

• Fundamental para projetar e analisar algoritmos.

• Leitura complementar: https://pt.wikipedia.org/wiki/Complexidade_computacional
Complexidade de
algoritmos
• Complexidade Espacial:

• Quantidade de recursos utilizados para resolver o
problema

• Complexidade Temporal: 

• Quantidade de tempo utilizado, ou número de instruções
necessárias para resolver determinado problema 

• Medida de complexidade

• Parâmetro: tamanho do problema
Exemplos
• Ordenar n números

• Multiplicar duas matrizes quadradas n x n (cada uma com
n2 elementos) 

“Relação entre: tamanho do problema; o tempo e espaço
necessários para resolvê-lo”
Complexidade de
algoritmos
Espacial Temporal
Recursos (memória)
necessários
• Tempo

• Número de instruções
necessárias

• Perspectivas:

• Pior caso;

• Caso médio; 

• Melhor caso.
Complexidade de
algoritmos
Espacial Temporal
Recursos (memória)
necessários
• Tempo

• Número de instruções
necessárias

• Perspectivas:

• Pior caso;

• Caso médio; 

• Melhor caso.
Como analisar por essas perspectivas?
Melhor caso
• Menor tempo de execução para uma entrada de tamanho n 

• É pouco usado, por ter aplicação em poucos casos 

• Exemplo: 

• Problema: encontrar um elemento em uma lista de n números

• Complexidade no melhor caso: 

• Assume-se que o número estaria logo na topo da lista 

T(n) = 1
(função T que determina a complexidade de tempo)
Pior caso
• Maior tempo de execução sobre entradas de tamanho n 

• É mais fácil de se obter

• Exemplo:

• Problema: encontrar um elemento em uma lista de n números 

• Complexidade no pior caso:

• Assume-se que, no pior caso, o número estaria no final da
lista 

T(n) = n
Caso médio
• Média dos tempos de execução de todas as entradas de tamanho n, ou
baseado em probabilidade de determinada condição ocorrer

• É mais difícil de se determinar

• Exemplo:

• Problema: encontrar um elemento em uma lista de n números 

• Complexidade no caso médio:

• Para encontrar o i-ésimo número são necessárias i comparações
com probabilidade pi de procurar pelo número. Dado por: 

T(n) = 1 . p1 + 2 . p2 + 3 . p3 + … + n . pn
Caso médio
• Desenvolvendo, temos:
Análise dos casos
• Então, determine T(n) quando o tamanho da lista n for:
n
Melhor caso
T(n) = 1
Caso médio
T(n) = (n + 1) / 2
Pior caso
T(n) = n
10
100
10000
1000000
Análise dos casos
• Então, determine T(n) quando o tamanho da lista n for:
n
Melhor caso
T(n) = 1
Caso médio
T(n) = (n + 1) / 2
Pior caso
T(n) = n
10 1 5,5 10
100 1 50,5 100
10000 1 5000,5 10000
1000000 1 500000,5 1000000
Análise dos casos
0
250000
500000
750000
1000000
n= 10 n = 100 n = 10000 n = 1000000
Pior caso Caso médio
Crescimento de funções
• Comportamento assintótico 

• Quando n tem valor muito grande (n >> ∞)

• Termos inferiores e constantes multiplicativas
contribuem pouco na comparação e podem ser
descartados 

• Exemplo: 

• Algoritmo 1: f1(n) = 2n2 + 5n operações 

• Algoritmo 2: f2(n) = 500n + 4000 operações
Crescimento de funções
• Comportamento assintótico 

• Quando n tem valor muito grande (n >> ∞)

• Termos inferiores e constantes multiplicativas contribuem pouco na
comparação e podem ser descartados 

• Exemplo: 

• Algoritmo 1: f1(n) = 2n2 + 5n operações 

• Algoritmo 2: f2(n) = 500n + 4000 operações 

Como crescem f1 e f2 ?
Qual o algoritmo mais eficiente?
Notação assintótica
• Define limites para o crescimento assintótico das
funções; 

• Preocupação principal:

• A maneira como o tempo de execução de um
algoritmo aumenta com o tamanho da entrada no
limite, à medida que o tamanho da entrada aumenta
indefinidamente (tendendo ao infinito).
A notação Ω (ômega)
• Oferece um limite inferior assintótico 

• Definição: Sejam f e g duas funções com domínio X.
Dizemos que a função f é Ω(g(n)) sse

(∃c ∈ R+)(∃n0 ∈ X)(∀n ≥ n0)(c.|g(n)| ≤ |f(n)|)
Notação Ω
• Então uma função f(n) é Ω(g(n)) se existem duas
constantes positivas c e n0 tais que:

c . g(n) ≤ f(n), para todo n ≥ n0
A notação O (ômicron)
• Oferece um limite superior assintótico

• Definição: Sejam f e g duas funções de domínio X.
Dizemos que a função f é O(g(n)) sse

(∃c ∈ R+)(∃ n0 ∈ X)(∀ n ≥ n0) (|f(n)| ≤ c.|g(n)|)
Notação O
• Então uma função f(n) é O(g(n)) se existem duas
constantes positivas c e n0 tais que:

f(n) ≤ c . g(n), para todo n ≥ n0
Exemplos (Notação O)
• 3n + 2 = O(n), pois 3n + 2 ≤ 4n para todo n ≥ 2

• 1000n2 + 100n – 6 = O(n2), pois 

• 1000n2 +100n – 6 ≤ 1001n2 para n ≥ 100 

• f(n) = amnm+...+a1n+a0 => f(n) = O(nm)
A notação θ (theta)
• Oferece limites assintóticos inferior e superior

• Definição: Sejam f e g duas funções de domínio X.
Dizemos que a função f é θ(g(n)) sse

(∃c1, c2 ∈ R+)(∃n0 ∈ X)(∀ n ≥ n0) (c1.|g(n)| ≤ |f(n)| ≤ c2.|g(n)|)
Notação θ
• Então uma função f(n) é θ(g(n)) se existem constantes
positivas c1 e c2 e n0 tais que:

0 ≤ c1 . g(n) ≤ f(n) ≤ c2 . g(n) para todo n ≥ n0
Algumas complexidades conhecidas
Exemplo - soma de vetores
Qual a complexidade no pior caso?
Exemplo - soma de matrizes
Qual a complexidade no pior caso?
Exemplo - multiplicação de matrizes
Qual a complexidade no pior caso?
Exemplo - multiplicação de matrizes
Torre de Hanoi
Torre de Hanoi - implementação
Torre de Hanoi - Análise de complexidade
Importância da análise de complexidade
Exercícios
Referências
• Notas de aula (prof. Valdísio Viana - UECE)

• Notas de aula (prof. José Maria - UFC)

• Algoritmos: Teoria e Prática - Cormen (3a. Edição -
Elsevier)

• Estrutura de dados: algoritmos, análise da complexidade
e implementações em Java e C/C++ - Ana Ascencio e
Graziela Araújo (Pearson)

Mais conteúdo relacionado

Mais procurados

Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1
Pacc UAB
 
Lista de exercicios algoritmos resolvida-
Lista de exercicios   algoritmos  resolvida-Lista de exercicios   algoritmos  resolvida-
Lista de exercicios algoritmos resolvida-
Mauro Pereira
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalização
Ticianne Darin
 
Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1
Pacc UAB
 
Aula 7 - Repetição enquanto - exemplos
Aula 7 - Repetição enquanto - exemplosAula 7 - Repetição enquanto - exemplos
Aula 7 - Repetição enquanto - exemplos
Pacc UAB
 

Mais procurados (20)

Informática Básica - Aula 04 - Software
Informática Básica - Aula 04 - SoftwareInformática Básica - Aula 04 - Software
Informática Básica - Aula 04 - Software
 
Seguranca de rede
Seguranca de redeSeguranca de rede
Seguranca de rede
 
Introdução a computação
Introdução a computaçãoIntrodução a computação
Introdução a computação
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1
 
Lista de exercicios algoritmos resolvida-
Lista de exercicios   algoritmos  resolvida-Lista de exercicios   algoritmos  resolvida-
Lista de exercicios algoritmos resolvida-
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Algoritmos - capítulo 1
Algoritmos - capítulo 1Algoritmos - capítulo 1
Algoritmos - capítulo 1
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalização
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Aula 7 - Repetição enquanto - exemplos
Aula 7 - Repetição enquanto - exemplosAula 7 - Repetição enquanto - exemplos
Aula 7 - Repetição enquanto - exemplos
 
Aula 10 Software - sistema operacional e aplicativos
Aula 10 Software - sistema operacional e aplicativosAula 10 Software - sistema operacional e aplicativos
Aula 10 Software - sistema operacional e aplicativos
 
Sistemas Operacionais - 03 - Tipos e Estrutura dos SO
Sistemas Operacionais - 03 - Tipos e Estrutura dos SOSistemas Operacionais - 03 - Tipos e Estrutura dos SO
Sistemas Operacionais - 03 - Tipos e Estrutura dos SO
 
Aula 03 - Hardware e Software
Aula 03 - Hardware e SoftwareAula 03 - Hardware e Software
Aula 03 - Hardware e Software
 
Apresentação Scratch
Apresentação ScratchApresentação Scratch
Apresentação Scratch
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
JavaScript: Introdução e Operadores (aula 1)
JavaScript: Introdução e Operadores (aula 1)JavaScript: Introdução e Operadores (aula 1)
JavaScript: Introdução e Operadores (aula 1)
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 

Semelhante a Introdução à analise e complexidade de algoritmos

13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
Ricardo Bolanho
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
gjpbg
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
Leandro Lopes
 

Semelhante a Introdução à analise e complexidade de algoritmos (20)

EDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdfEDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdf
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
0001
00010001
0001
 
000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
 
11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf
 
Aula02
Aula02Aula02
Aula02
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Math
MathMath
Math
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Big data
Big dataBig data
Big data
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdf
 
Cap1
Cap1Cap1
Cap1
 
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas MatemáticosRaciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
 

Mais de Nécio de Lima Veras

Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados
Nécio de Lima Veras
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
Nécio de Lima Veras
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
Nécio de Lima Veras
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
Nécio de Lima Veras
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
Nécio de Lima Veras
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionais
Nécio de Lima Veras
 

Mais de Nécio de Lima Veras (20)

Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Versionamento com git
Versionamento com gitVersionamento com git
Versionamento com git
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados
 
Agentes inteligentes com jason
Agentes inteligentes com jasonAgentes inteligentes com jason
Agentes inteligentes com jason
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
 
Revisão de matemática
Revisão de matemáticaRevisão de matemática
Revisão de matemática
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
 
Notas sobre agentes inteligentes
Notas sobre agentes inteligentesNotas sobre agentes inteligentes
Notas sobre agentes inteligentes
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
 
Relacionamentos do mapeamento OR
Relacionamentos do mapeamento ORRelacionamentos do mapeamento OR
Relacionamentos do mapeamento OR
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Java swing
Java swingJava swing
Java swing
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionais
 

Último

CONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docx
CONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docxCONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docx
CONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docx
EduardaMedeiros18
 
Manual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .pdfManual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .pdf
Pastor Robson Colaço
 
5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf
5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf
5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf
edjailmax
 
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdfGRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
rarakey779
 

Último (20)

Apresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantilApresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantil
 
CONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docx
CONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docxCONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docx
CONTO-3º-4º-E-5ºANO-A-PRINCESA-E-A-ERVILHA[1] (1).docx
 
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptxSlides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
 
Os Padres de Assaré - CE. Prof. Francisco Leite
Os Padres de Assaré - CE. Prof. Francisco LeiteOs Padres de Assaré - CE. Prof. Francisco Leite
Os Padres de Assaré - CE. Prof. Francisco Leite
 
Exercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdfExercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdf
 
Campanha 18 de. Maio laranja dds.pptx
Campanha 18 de.    Maio laranja dds.pptxCampanha 18 de.    Maio laranja dds.pptx
Campanha 18 de. Maio laranja dds.pptx
 
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
 
Poema - Reciclar é preciso
Poema            -        Reciclar é precisoPoema            -        Reciclar é preciso
Poema - Reciclar é preciso
 
prova do exame nacional Port. 2008 - 2ª fase - Criterios.pdf
prova do exame nacional Port. 2008 - 2ª fase - Criterios.pdfprova do exame nacional Port. 2008 - 2ª fase - Criterios.pdf
prova do exame nacional Port. 2008 - 2ª fase - Criterios.pdf
 
Manual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .pdfManual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .pdf
 
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
 
Multiplicação - Caça-número
Multiplicação - Caça-número Multiplicação - Caça-número
Multiplicação - Caça-número
 
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdfAs Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
 
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptxSlides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
 
Produção de poemas - Reciclar é preciso
Produção  de  poemas  -  Reciclar é precisoProdução  de  poemas  -  Reciclar é preciso
Produção de poemas - Reciclar é preciso
 
Atividade com a música Xote da Alegria - Falamansa
Atividade com a música Xote  da  Alegria    -   FalamansaAtividade com a música Xote  da  Alegria    -   Falamansa
Atividade com a música Xote da Alegria - Falamansa
 
5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf
5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf
5ca0e9_ea0307e5baa1478490e87a15cb4ee530.pdf
 
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
 
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdfGRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
 
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docxAtividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
 

Introdução à analise e complexidade de algoritmos

  • 1. Introdução a Análise e Complexidade de Algoritmos Nécio de Lima Veras
  • 2. Objetivo Conhecer aspectos básicos sobre a análise e complexidade de algoritmos.
  • 3. Antes de qualquer coisa … O que é mesmo um algoritmo?
  • 4. Cormen (2002) “Qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída”
  • 5.
  • 6. Algoritmos • Razões para estudar: • Prática: • Devemos conhecer um conjunto de algoritmos de diferentes áreas; • Devemos ser capazes de projetar novos algoritmos e analisar suas eficiências; • Teóricas: • O estudo de algoritmos é a “pedra fundamental” da computação; • Desenvolver habilidades analíticas.
  • 8. Tipos importantes de problemas • Ordenação: reorganizar itens de uma estrutura seguindo alguma ordem; • Busca: encontrar um dado valor chave em um dado conjunto de valores; • Processamento de textos: buscar uma dada palavra em um texto; avaliar similaridade entre cadeias de caracteres; etc; • Problemas em grafos: planejamento de rotas; caminho mais curto; ordenação topológica;
  • 9. Tipos importantes de problemas • Problemas combinatoriais: encontrar um objeto combinatória (permutações, combinações ou subconjuntos) que satisfaça certas restrições e tenha certas prioridades (maximizar um valor ou minimizar um custo); • Problemas geométricos: envolve objetos geométricos como pontos, linhas ou polígonos; • Problemas numéricos: envolve objetos matemáticos de natureza contínua: resolução de equações e sistemas de equações; integrais definidas, etc.
  • 10.
  • 11.
  • 12. Estratégias de projeto de algoritmos • Força bruta (brute force); • Dividir para conquistar (divide and conquer); • Diminuir e conquistar (decrease and conquer); • Transformar e conquistar (transform and conquer); • Compromisso tempo-espaço (space and time tradeoffs); • Estratégia gulosa (greedy); • Programação dinâmica (dynamic programming); • Voltando atrás (bracktracing); • Ramificar e limitar (branch and bound);
  • 13. Análise de algoritmos • Significa prever os recursos de que ele necessitará. • Em geral memória, largura de banda de comunicação ou hardware de computação são as preocupações principais, mas frequentemente é o tempo de computação que se deseja medir (Cormen, 2012). • Basicamente temos dois tipos de análise: • De um algoritmo particular - calcular o custo de um algoritmo na resolução de um problema específico; • De uma classe de algoritmos - considerando um problema específico, determinar o algoritmo de menor custo possível para resolvê-lo.
  • 14. Como calcular o custo de um algoritmo?
  • 15. Moleza!!! Calculando a sua complexidade :)
  • 16. Complexidade computacional? • Termo criado por Juris Hartmanis e Richard Stearns (1965) • Classificação de problemas de acordo com sua dificuldade • Relação entre: tamanho do problema; o tempo e espaço necessários para resolvê-lo; • Fundamental para projetar e analisar algoritmos. • Leitura complementar: https://pt.wikipedia.org/wiki/Complexidade_computacional
  • 17. Complexidade computacional? • Termo criado por Juris Hartmanis e Richard Stearns (1965) • Classificação de problemas de acordo com sua dificuldade • Relação entre: tamanho do problema; o tempo e espaço necessários para resolvê-lo; • Fundamental para projetar e analisar algoritmos. • Leitura complementar: https://pt.wikipedia.org/wiki/Complexidade_computacional
  • 18. Complexidade de algoritmos • Complexidade Espacial: • Quantidade de recursos utilizados para resolver o problema • Complexidade Temporal: • Quantidade de tempo utilizado, ou número de instruções necessárias para resolver determinado problema • Medida de complexidade • Parâmetro: tamanho do problema
  • 19. Exemplos • Ordenar n números • Multiplicar duas matrizes quadradas n x n (cada uma com n2 elementos) “Relação entre: tamanho do problema; o tempo e espaço necessários para resolvê-lo”
  • 20. Complexidade de algoritmos Espacial Temporal Recursos (memória) necessários • Tempo • Número de instruções necessárias • Perspectivas: • Pior caso; • Caso médio; • Melhor caso.
  • 21. Complexidade de algoritmos Espacial Temporal Recursos (memória) necessários • Tempo • Número de instruções necessárias • Perspectivas: • Pior caso; • Caso médio; • Melhor caso. Como analisar por essas perspectivas?
  • 22. Melhor caso • Menor tempo de execução para uma entrada de tamanho n • É pouco usado, por ter aplicação em poucos casos • Exemplo: • Problema: encontrar um elemento em uma lista de n números • Complexidade no melhor caso: • Assume-se que o número estaria logo na topo da lista T(n) = 1 (função T que determina a complexidade de tempo)
  • 23. Pior caso • Maior tempo de execução sobre entradas de tamanho n • É mais fácil de se obter • Exemplo: • Problema: encontrar um elemento em uma lista de n números • Complexidade no pior caso: • Assume-se que, no pior caso, o número estaria no final da lista T(n) = n
  • 24. Caso médio • Média dos tempos de execução de todas as entradas de tamanho n, ou baseado em probabilidade de determinada condição ocorrer • É mais difícil de se determinar • Exemplo: • Problema: encontrar um elemento em uma lista de n números • Complexidade no caso médio: • Para encontrar o i-ésimo número são necessárias i comparações com probabilidade pi de procurar pelo número. Dado por: T(n) = 1 . p1 + 2 . p2 + 3 . p3 + … + n . pn
  • 26. Análise dos casos • Então, determine T(n) quando o tamanho da lista n for: n Melhor caso T(n) = 1 Caso médio T(n) = (n + 1) / 2 Pior caso T(n) = n 10 100 10000 1000000
  • 27. Análise dos casos • Então, determine T(n) quando o tamanho da lista n for: n Melhor caso T(n) = 1 Caso médio T(n) = (n + 1) / 2 Pior caso T(n) = n 10 1 5,5 10 100 1 50,5 100 10000 1 5000,5 10000 1000000 1 500000,5 1000000
  • 28. Análise dos casos 0 250000 500000 750000 1000000 n= 10 n = 100 n = 10000 n = 1000000 Pior caso Caso médio
  • 29. Crescimento de funções • Comportamento assintótico • Quando n tem valor muito grande (n >> ∞) • Termos inferiores e constantes multiplicativas contribuem pouco na comparação e podem ser descartados • Exemplo: • Algoritmo 1: f1(n) = 2n2 + 5n operações • Algoritmo 2: f2(n) = 500n + 4000 operações
  • 30. Crescimento de funções • Comportamento assintótico • Quando n tem valor muito grande (n >> ∞) • Termos inferiores e constantes multiplicativas contribuem pouco na comparação e podem ser descartados • Exemplo: • Algoritmo 1: f1(n) = 2n2 + 5n operações • Algoritmo 2: f2(n) = 500n + 4000 operações Como crescem f1 e f2 ? Qual o algoritmo mais eficiente?
  • 31. Notação assintótica • Define limites para o crescimento assintótico das funções; • Preocupação principal: • A maneira como o tempo de execução de um algoritmo aumenta com o tamanho da entrada no limite, à medida que o tamanho da entrada aumenta indefinidamente (tendendo ao infinito).
  • 32. A notação Ω (ômega) • Oferece um limite inferior assintótico • Definição: Sejam f e g duas funções com domínio X. Dizemos que a função f é Ω(g(n)) sse (∃c ∈ R+)(∃n0 ∈ X)(∀n ≥ n0)(c.|g(n)| ≤ |f(n)|)
  • 33. Notação Ω • Então uma função f(n) é Ω(g(n)) se existem duas constantes positivas c e n0 tais que: c . g(n) ≤ f(n), para todo n ≥ n0
  • 34. A notação O (ômicron) • Oferece um limite superior assintótico • Definição: Sejam f e g duas funções de domínio X. Dizemos que a função f é O(g(n)) sse
 (∃c ∈ R+)(∃ n0 ∈ X)(∀ n ≥ n0) (|f(n)| ≤ c.|g(n)|)
  • 35. Notação O • Então uma função f(n) é O(g(n)) se existem duas constantes positivas c e n0 tais que: f(n) ≤ c . g(n), para todo n ≥ n0
  • 36. Exemplos (Notação O) • 3n + 2 = O(n), pois 3n + 2 ≤ 4n para todo n ≥ 2 • 1000n2 + 100n – 6 = O(n2), pois • 1000n2 +100n – 6 ≤ 1001n2 para n ≥ 100 • f(n) = amnm+...+a1n+a0 => f(n) = O(nm)
  • 37. A notação θ (theta) • Oferece limites assintóticos inferior e superior • Definição: Sejam f e g duas funções de domínio X. Dizemos que a função f é θ(g(n)) sse
 (∃c1, c2 ∈ R+)(∃n0 ∈ X)(∀ n ≥ n0) (c1.|g(n)| ≤ |f(n)| ≤ c2.|g(n)|)
  • 38. Notação θ • Então uma função f(n) é θ(g(n)) se existem constantes positivas c1 e c2 e n0 tais que: 0 ≤ c1 . g(n) ≤ f(n) ≤ c2 . g(n) para todo n ≥ n0
  • 40. Exemplo - soma de vetores Qual a complexidade no pior caso?
  • 41. Exemplo - soma de matrizes Qual a complexidade no pior caso?
  • 42. Exemplo - multiplicação de matrizes Qual a complexidade no pior caso?
  • 45. Torre de Hanoi - implementação
  • 46. Torre de Hanoi - Análise de complexidade
  • 47. Importância da análise de complexidade
  • 49. Referências • Notas de aula (prof. Valdísio Viana - UECE) • Notas de aula (prof. José Maria - UFC) • Algoritmos: Teoria e Prática - Cormen (3a. Edição - Elsevier) • Estrutura de dados: algoritmos, análise da complexidade e implementações em Java e C/C++ - Ana Ascencio e Graziela Araújo (Pearson)