Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Análise Assintótica, Notas de estudo de Engenharia Informática

Uma breve descrição

Tipologia: Notas de estudo

2014

Compartilhado em 13/08/2014

joel-sarmento-barros-3
joel-sarmento-barros-3 🇧🇷

4.3

(8)

30 documentos

1 / 14

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
CENTRO DE ENSINO SUPERIOR – CESF
CURSO DE ENGENHARIA DA COMPUTAÇÃO
"BEM-AVENTURADO o homem que não anda segundo o conselho dos ímpios, nem
se detém no caminho dos pecadores, nem se assenta na roda dos escarnecedores."
Jesus de Nazaré
www.Facebook.com/vsegueme www.twitter.com/vemesegueme30
TABALHO REFERENTE A NOTA DE LMD COM O TÍTULO: ANÁLISE
ASSINTÓTICA.
MANAUS
2009
JOEL SARMENTO BARROS
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Pré-visualização parcial do texto

Baixe Análise Assintótica e outras Notas de estudo em PDF para Engenharia Informática, somente na Docsity!

CENTRO DE ENSINO SUPERIOR – CESF

CURSO DE ENGENHARIA DA COMPUTAÇÃO

"BEM-AVENTURADO o homem que não anda segundo o conselho dos ímpios, nem se detém no caminho dos pecadores, nem se assenta na roda dos escarnecedores." Jesus de Nazaré

www.Facebook.com/vsegueme www.twitter.com/vemesegueme

TABALHO REFERENTE A 4ª NOTA DE LMD COM O TÍTULO: ANÁLISE

ASSINTÓTICA.

MANAUS

JOEL SARMENTO BARROS

DELSON ASSUNÇÃO

ALBERT OTTO

TABALHO REFERENTE A 4ª NOTA DE LMD COM O TÍTULO: ANÁLISE

ASSINTÓTICA.

MANAUS

SUMÁRIO

A análise a assintótica, como já podemos perceber em nossas pesquisas na tentativa de fazer este trabalho, é um tipo de analise que não se limita a analise de algoritmos de programação, mas é usado nas diversas áreas do conhecimento, no entanto, sempre com a mesma finalidade, que é analisar e otimizar um determinado algoritmo. Muitas vezes precisamos otimizar códigos para aumentar a robustez e velocidade de sistemas. Podemos ter vários fatores influenciando nesse ponto. O que iremos expor neste trabalho diz respeito a uma das principais formas de análise da lógica envolvida nos algoritmos, a análise assintótica. Esse termo é bem comum quando estudamos estrutura de dados, visto que é um estudo paralelo, quando não é um pré-requisito do mesmo. Sabemos que dentro da área de informática as disciplinas mais complexas e com maior índice de reprovação nos cursos superiores são algoritmos e estrutura de dados e, na maioria das vezes, um bom conhecimento de análise assintótica resolveria o problema ou facilitaria a compreensão de temas mais avançados.

2. JUSTIFICATIVA

Este trabalho tem por finalidade principal não apenas adquirir uma boa nota para a 4ª parcial, mas tentaremos demonstrar, apesar do pouco material existente sobre o assunto, seja na internet ou em livros, uma visão geral do que é a analise assintótica , a motivação para este tipo de analise e qual a sua importância, usando um pequeno exemplo onde se descarta as informações desnecessárias para simplificar a analise.

3. OBJETIVOS

3.1 GERAL:

O que vem a ser análise assintótica? Fazer uma análise assintótica é se preocupar com valores grandes de entrada para o processamento do algoritmo, com o intuito de calcular o tempo total de processamento e viabilidade para determinados casos. Muitas vezes com isso podemos ser capazes de saber se é necessária a utilização de outra metodologia ou ferramenta para a realização de uma tarefa. Vale lembrar que, mesmo sendo uma área de extrema importância na informática, não é comum à maioria dos 'profissionais' do mercado atual praticá-la. Alguns dos motivos para isso são:

  • profissionais com boa capacidade desse tipo de análise são caros para a maioria das empresas
  • gerentes de projeto não vêem o tempo gasto para isso como um tempo útil e preferem ver resultados imediatos
  • profissionais estudam essa disciplina no ensino superior apenas como uma disciplina complementar e também preferem matérias mais práticas ou mais fáceis (visto que, no geral, matemática é uma disciplina complexa) Pensar assintoticamente requer uma visão mais além do projeto, visualizando até onde o sistema pode chegar. Isso parece óbvio, mas não é bem assim, já que muitas vezes é difícil de simular valores grandes no ambiente de teste, então os testes são feitos com limites pequenos. Por outro lado não podemos simplesmente fazer o contrário, ou seja, criar sistemas com suporte ao dobro do que realmente precisaria. Tudo é questão de fazer um bom estudo, e caso a caso. Junto com o estudo de análise assintótica, temos o conceito de notação assintótica, que é a representação matemática criada por Paul Bachmann no século XIX. Nela, temos três notações comuns para classificar as ordens das funções, essas ordens determinam a equivalência das funções, ou seja podemos ter uma função que seja to tipo n², essa função é equivalente à função 400n². São equivalentes assintoticamente falando, lembrando que sempre nos preocupamos com valores de entrada grandes para n. As três principais classificações de ordem são: Ordem O, Ordem Omega e Ordem Theta.

A explicação matemática das ordens é bem complexa, existem muitos livros que explicam seus conceitos, recomendo: The Art of Computer Programming (de Knuth). Mas resumidamente, para colocarmos o assunto dentro do contexto de sistemas, podemos dizer que a ordem O (O) analisa o pior caso, ou seja, pega ele analisa o limite superior de entrada, esse é o mais comum de todos e o mais amplamente usado e serve para testar o qual o máximo que será utilizado de processamento. A

Ordem Omega é o inverso, analisa a entrada mais baixa e serve para testar o qual o mínimo que sempre será usado de processamento. Por último temos a Ordem Theta, que é utilizada para testar os valores médios de entrada, ela é juntamente usada com bases estatísticas de dados e requer melhor conhecimento das entradas.

Motivação para analise de algoritmo Dois aspectos importantes:

  • Um problema pode, geralmente, ser resolvido por diferentes algoritmos.
  • A existência de um algoritmo não implica, necessariamente que este problema possa ser resolvido na prática. A análise de algoritmos pode ser definida como o estudo da estimativa de tempo de execução de algoritmos.
  • O tempo de execução é determinado pelos seguintes aspectos:
  • Tempo para executar uma instrução ou passo.
  • A natureza do algoritmo.
  • O tamanho do conjunto de dados que constitui o problema. É necessário ter uma forma de criar medidas de comparação entre algoritmos que resolvem um mesmo problema. Desta forma, é possível determinar:
  • A viabilidade de um algoritmo.
  • Qual é o melhor algoritmo para a solução de um problema.
  • O interessante é ter uma comparação relativa entre algoritmos.
  • Assumir que a execução de qualquer passo de um algoritmo leva um tempo fixo e igual.
  • O tempo de execução de um computador particular não é Interessante.Qual a quantidade de recursos utilizados para resolver um problema?
  • Tempo
  • Espaço
  • Expressar como uma função do tamanho do problema.
  • Como os requisitos crescem com o aumento do problema?
  • Tamanho do problema:
  • Número de elementos a ser tratado.
    • Tamanho dos elementos

Abordagem Experimental

  • Limitações dos estudos experimentais:
  • Necessidade de se implementar e testar o algoritmo.
  • Experimentos podem ser feitos apenas em um número limitado de cenários. Pode, portanto, não indicar tempo de execução em cenários que não foram considerados no experimento.
  • Para comparar dois algoritmos: garantir os mesmos hardware e ambiente de software.

Análise Assintótica

  • Metodologia para analisar tempo de execução de algoritmos.
  • Ao contrário da abordagem experimental:
  • Usa uma descrição de alto nível dos algoritmos em vez de testar uma de suas implementações.
  • Leva em consideração todas as possíveis entradas.
  • Permite a avaliação de eficiência de algoritmos de uma forma que é independente do hardware e ambiente de software utilizado.

Notação Assintótica

  • Objetivo : simplificar a análise descartando informações desnecessárias: –“arredondamento” 1,000,001≈1,000, –Dizer que 3n2 ≈ n
  • Big-Oh Sejam duas funções f ( n ) e g ( n ).
  • f ( n ) é O ( g ( n )) se existem constantes positivas c e n 0 tais que f ( n ) ≤ cg ( n ) para nn 0
  • Exemplo: 2 n + 10 é O ( n )
  • 2 n + 10 ≤ cn
  • ( c − 2) n ≥ 10
  • n ≥ 10/( c − 2)
  • Escolher c = 3 e n 0 = 10

Tabelas de demosntrações

Big-Oh

Big - Oh

ANALISE ASSINTÓTICA

A análise assintótica é baseada nessas definições e estabelece uma ordem relativa entre funções.

  • A notação Big-Oh é usada para expressar o número de operações primitivas executadas como função do tamanho da entrada.
  • um algoritmo que executa em tempo O (n) é melhor do que um que executa em tempo O (n2)
  • de forma semelhante, O (log n) é melhor do que O (n)
  • Cuidado! Preste atenção a constantes muito altas. Um algoritmo que executa em tempo 1,000,000.n é O (n), mas menos eficiente do que um que executa em tempo 2n2, que é O (n2). Informalmente, para se determinar a ordem de complexidade de uma determinada função f(n):
  1. Separar f(n) em duas partes: termo dominante e termos de ordem inferior.
  2. ignorar os termos de ordem inferior.
  3. ignorar as constantes de proporcionalidade.

COMPLEXIDADE DO TEMPO Para determinar o tempo de execução de um determinado algoritmo

  • descobrir a forma geral da curva que caracteriza seu tempo de execução em função do tamanho do problema.
  • Para simplificarmos a análise de complexidade de tempo:
  • adotamos a não existência de unidades de tempo particulares.
  • não consideramos também os termos de ordem inferior, isto é, usamos Big-Oh.

Algumas Dicas

  • Identificar a operação fundamental usada no algoritmo. A análise dessa operação fundamental identifica o tempo de execução. Isso pode evitar a análise linha-por- linha do algoritmo.
  • Quando um algoritmo, em uma passada de uma iteração, divide o conjunto de dados de entrada em uma ou mais partes, tomado cada uma dessas partes e processando separada e recursivamente, e depois juntando os resultados, este algoritmo é possivelmente O(n.log n).
  • Um algoritmo é O(log n) se ele leva tempo constante para reduzir o tamanho do problema, geralmente pela metade. Por exemplo, a pesquisa binária.
  • Se o algoritmo leva tempo constante para reduzir o tamanho do problema em um tamanho constante, ele será O(n).
  • Algoritmos combinatoriais são exponenciais. Por exemplo, o problema do caixeiro viajante. 6. CONCLUSÃO Queremos aqui ressaltar que foi muito importante a iniciativa do professor Cláudio em passar este trabalho, mesmo que sendo no finalzinho do período, onde a correria para as provas finais são grandes, ainda assim, durante a pesquisa deste trabalho tiramos algumas conclusões, principalmente quanto a elaboração e a execução de algoritmos em qualquer área, em que não basta elaborarmos um determinado algoritmo para a solução de um determinado problema físico, mas temos que nos perguntar sempre. Será que este algoritmo é eficiente? O seu tempo de execução é o melhor que pode ser feito dentro das condições dadas? Será que no meu algoritmo não tem coisas desnecessária? São essas e outras perguntas que a analise assintótica vem responder com eficiência para que nos possamos achar a melhor maneira de execução de um determinado algoritmo, independente da área de atuação. 7. REFERÊNCIAS L.GERSTING, Judith. Fundamentos Matemáticos para a Ciência Computação. 3 ed. Rio de Janeiro,RJ: Editora LTC, 1995. INTERNET, Dalton Serey DSC/UFCG. INTERNET, Jorge Figueiredo, DSC/UFCG SITE, www.ime.usp.br/~pf/analise_de_algoritmos

"BEM-AVENTURADO o homem que não anda segundo o conselho dos ímpios, nem se detém no caminho dos pecadores, nem se assenta na roda dos escarnecedores." Jesus de Nazaré

www.Facebook.com/vsegueme www.twitter.com/vemesegueme