O documento discute conceitos de complexidade de algoritmos, incluindo análise empírica e matemática de algoritmos. Apresenta exemplos de como contar instruções em algoritmos e discute a complexidade de casos como melhor caso, pior caso e caso médio.
5. 13:07
O que é um Algoritmo?
Estrutura de Dados: Aula Sobre Arquivos
6. O queé um Algoritmo?
13:07
Um algoritmo é uma sequência de instruções não
ambíguas para resolver um problema obtendo uma
saída desejada para qualquer entrada legítima em
um intervalode tempofinito.
Estrutura de Dados: Complexidade de Algoritmos
“Alessandro L. Koerich”
7. Análisede umAlgoritmo
13:07
Busca responder a seguinte pergunta:
Podemos fazer um algoritmo mais eficiente?
Estrutura de Dados: Complexidade de Algoritmos
8. Análisede umAlgoritmo
13:07
Podemos resolver um problema de várias maneiras
diferentes, não necessariamente com a mesma
eficiência
Essas diferenças podem ser:
Irrelevantes para um pequeno número de elementos
processados
Crescer proporcionalmente com o número de elementos
processados
Estrutura de Dados: Complexidade de Algoritmos
9. Análisede umAlgoritmo
13:07
Para compara a eficiência dos algoritmos foi
criada uma medida chamada de
complexidade computacional
Basicamente, indica o custo ao se aplicar um
algoritmo, sendo
𝑐𝑢𝑠𝑡𝑜 = 𝑚𝑒𝑚ó𝑟𝑖𝑎 + 𝑡𝑒𝑚𝑝𝑜
Estrutura de Dados: Complexidade de Algoritmos
10. Análisede umAlgoritmo
13:07
Para determinar se um algoritmo é o mais
eficiente, podemos utilizar duas abordagens
Análise empírica
•Comparação entre os programas
Análise matemática
•Estudo das propriedades do algoritmo
Estrutura de Dados: Complexidade de Algoritmos
11. AnáliseEmpírica
13:07
Avalia o custo de um algoritmo a partir da
avaliação da execução do mesmo quando
implementado
Um algoritmo é analisado pela execução de
seu programa correspondente
Estrutura de Dados: Complexidade de Algoritmos
12. AnáliseEmpírica:vantagens
13:07
Avaliar o desempenho em uma determinada
configuração de computador/linguagem
Considerar custos não aparentes (ex: custo da
alocação de memória)
Comparar computadores
Comparar linguagens
Estrutura de Dados: Complexidade de Algoritmos
13. AnáliseEmpírica: dificuldades
13:07
Necessidade de implementar o algoritmo
Resultado pode ser mascarado pelo hardware ou
software
Qual a natureza dos dados
Dados reais
Aleatórios (avaliam o desempenho médio)
Perversos (pior caso)
Estrutura de Dados: Complexidade de Algoritmos
14. AnáliseMatemática
13:07
Permite um estudo formal de um algoritmo ao
nível ideia por trás do algoritmo
Vantagens
Detalhes de baixo nível (linguagem, hardware, etc, são
ignorados)
Permite entender como um algoritmo se comporta à
medida que o conjunto de dados de entrada cresce
Estrutura de Dados: Complexidade de Algoritmos
17. AnáliseMatemática:ContandoInstruções Simples
13:07
Instrução que pode ser executada diretamente pela CPU
Atribuição de um valor a uma variável
Acesso ao valor de um elemento do vetor
Comparação de dois valores
Incremento de um valor
Operações aritméticas básicas (adição, multiplicação)
Vamos assumir que
As instruções possuem o mesmo custo
Comandos de seleção possuem custo zero
Estrutura de Dados: Complexidade de Algoritmos
19. AnáliseMatemática:ContandoInstruções Simples
13:07
O custo da linha2 é de: 2 instruções
O comando forprecisa ser inicializado: 1 instrução (i = 0)
Mesmo que o vetor tenha tamanho zero, ao menos uma comparação será executada (i < n), o
que custa mais 𝟏instrução
Estrutura de Dados: Complexidade de Algoritmos
20. AnáliseMatemática:ContandoInstruções Simples
13:07
O custo para executar o comando de laço for(linha 2) é de: 2𝑛 instruções
Ao final de cada iteração do laço for, precisamos executar uma instrução de
• Incremento (i + +)
• Comparação para verificar se vamos continuar no laço for (i < n)
O laço será executado 𝑛vezes. Assim, essas 2instruções também serão executadas 𝑛 vezes: 2𝑛 instruções
Estrutura de Dados: Complexidade de Algoritmos
21. AnáliseMatemática:ContandoInstruções Simples
13:07
Ignorando os comandos contidos no corpo do laço for,
teremos que o algoritmo precisa executar 3 + 2𝑛 instruções:
3 instruções antes de iniciar o laço for
2 instruções ao final do laço for, o qual é executado 𝑛 vezes
Assim, considerando um laço vazio, podemos definir uma
função matemática que representa o custo do algoritmo em
relação ao tamanho do vetor de entrada: 𝑓 𝑛 = 2𝑛 + 3
Estrutura de Dados: Complexidade de Algoritmos
22. AnáliseMatemática:ContandoInstruções Simples
13:07
Contando as instruções restantes do for
Comando if 1instrução: acessa o valor do vetor
e atribui a outra variável M = A[i].
Porém, sua execução depende do resultado da
comparação feita pelo if
Estrutura de Dados: Complexidade de Algoritmos
23. AnáliseMatemática:ContandoInstruções Simples
13:07
Custo dominante ou pior caso do algoritmo
Antes, bastava saber o tamanho do vetor 𝑛,
para definir a função de custo 𝑓(𝑛). Agora
temos que considerar o conteúdo do vetor
A1 = 1,2,3,4
A2 = {4,3,2,1}
Estrutura de Dados: Complexidade de Algoritmos
24. AnáliseMatemática:ContandoInstruções Simples
13:07
Custo dominante ou pior caso do algoritmo
Antes, bastava saber o tamanho do vetor 𝑛,
para definir a função de custo 𝑓(𝑛). Agora
temos que considerar o conteúdo do vetor
A1 = 1,2,3,4
A2 = {4,3,2,1}
Estrutura de Dados: Complexidade de Algoritmos
25. AnáliseMatemática:ContandoInstruções Simples
13:07
Pior caso: Maior número de instruções
No nosso algoritmo o pior caso ocorre quando o
vetor possui valores em ordem crescente
O valor de M é sempre substituído
O laço for sempre executa as 2 instruções
Estrutura de Dados: Complexidade de Algoritmos
29. Complexidadesobreváriasperspectivas
13:07
Estrutura de Dados: Complexidade de Algoritmos
Melhor caso: Consiste em assumir que vai acontecer o
melhor. Pouco utilizado e de baixa aplicabilidade;
Em uma lista telefônica queremos encontrar o nome do
usuário de um número, assumindo-se o melhor caso o
número telefônico será o primeiro da lista.
31. Complexidadesobreváriasperspectivas
13:07
Estrutura de Dados: Complexidade de Algoritmos
Pior caso: Consiste em assumir que vai acontecer o pior.
É a perspectiva mais utilizada
Ainda no exemplo da lista telefonica, assumindo-se o pior
caso o número telefônico será o último da lista.
33. Complexidadesobreváriasperspectivas
13:07
Estrutura de Dados: Complexidade de Algoritmos
Caso médio: É o caso mais difícil de ser determinado,
pois, necessita de análise estatística.
No mesmo exemplo da lista telefônica. Deve-se levar em
consideração a maneira como o algoritmo percorre a lista e
determinar estatisticamente quantas operações em média
serão executadas.
39. Prática
13:07 39
As aulas práticas foram baseadas no material de
LinguagemC Descomplicada , Dr. André R.Backes.
Disponívelem: https://programacaodescomplicada.wordpress.com/
Estrutura de Dados: Prática com Arquivos
40. Arquivos:bibliotecastdio.h
13:07
A linguagem C usa um tipo especial de ponteiro para
manipular arquivos
Forma geral:
FILE *nome_ponteiro;
É esse ponteiro que controla o fluxo de leitura e escrita
dentro de um arquivo
Estrutura de Dados: Prática com Arquivos