Buscar

1 - INTRODUÇÃO

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

DEQ/6648 – FUNDAMENTOS DA 
ESTRUTURA DA INFORMAÇÃO 
Departamento de Engenharia Química 
Universidade Estadual de Maringá 
Prof. Leonardo Faria Costa 
INTRODUÇÃO 
• Apresentação dos Algoritmos 
• Recursividade 
• Complexidade de Algoritmos 
• Notação O 
• Algoritmos Ótimos 
INTRODUÇÃO 
• Um algoritmo é um processo sistemático para a 
resolução de um problema 
 
• Dois aspectos básicos no Estudo dos algoritmos: 
 
Correção – verificar a exatidão do método empregado 
através de uma prova matemática. 
 
Análise – avaliar a eficiência do algoritmo em termos de 
tempo de execução e memória ocupada. 
INTRODUÇÃO 
• Durante o processo de computação o algoritmo 
manipula dados gerados pela entrada 
• Tipo Abstrato de Dados – quando os dados são 
dispostos e manipulados de uma forma 
homogênea. 
ALGORÍTMO ENTRADA SAÍDA 
Tipo Abstrato de Dados 
• Modelo matemático + Conjunto de operações 
definido sobre este modelo 
 
• Um algoritmo é projetado em termos de tipos 
abstratos de dados 
 
• Na representação do modelo matemático 
emprega-se uma estrutura de dados 
 
• As estruturas diferem uma das outras pela 
disposição ou manipulação de seus dados 
 
Tipo Abstrato de Dados 
• Estrutura de dados <-> conhecimento dos 
algoritmos 
 
• A escolha certa da estrutura adequada para 
cada caso depende do conhecimento de 
algoritmos para manipular a estrutura de 
forma eficiente 
Apresentação dos algoritmos 
• Os algoritmos serão descritos através de uma linguagem 
de estrutura simples de blocos semelhante ao Pascal 
 
• O início e final de cada bloco são determinados pela 
posição da margem esquerda 
 
• Se uma certa linha do algoritmo inicia um bloco, ele se 
estende até a última linha seguinte, cuja margem 
esquerda se localiza mais a direita do que a primeira do 
bloco 
 
 
 
Apresentação dos algoritmos 
• Exemplo: o bloco iniciado por para inclui as três 
linhas seguintes. 
 
• A declaração de atribuição é indicada por := 
 
Exemplo 
Para i: =1,..., [n] faça 
 temp:= S[i] 
 S[i]:= S[n – i + 1] 
 S[n- i + 1]:= temp 
 
Apresentação de algoritmos 
•Variáveis simples, vetores, matrizes e registros - linguagens de 
programação; 
• Elementos de vetores e matrizes são identificados por índices 
entre colchetes: 
 
– A[5]: quinto elemento do vetor A 
– B[i,3]: elemento localizado na linha i e coluna 3 
– T.chave: indica o campo chave do registro T 
 
•Referência a registros podem ser realizadas por meio de ponteiros 
que armazenam endereços com o uso do símbolo ↑. 
Apresentação de algoritimos 
 
• Cada ponteiro é associado a um único tipo de registro, por 
isso o nome do registro pode ser omitido; 
 
•Exemplo: pt↑.info representa o campo info de um registro 
alocado no endereço contido em pt 
 
•A sentença após o símbolo % significa comentário 
APRESENTAÇÃO DE ALGORÍTMOS 
• Comandos de decisão e repetição 
– se... então 
– se... então... senão 
– enquanto... faça 
– para ... faça 
– pare 
 
Exemplo:Inversão de uma sequência 
•Uma sequência de elementos armazenada no vetor S[i], onde 1 ≤ i ≤ n. 
Deseja-se inverter os elementos da sequência no vetor . 
Para i: =1,..., [n] faça 
 temp:= S[i] 
 S[i]:= S[n – i + 1] 
 S[n- i + 1]:= temp 
 
Para s = 1 e n = 20 
O valor que estiver na primeira posição do vetor S é chamado temp S[1]; 
O que estiver na última posição do vetor S (S[20 – 1 + 1]) = S[20] irá para a primeira 
posição de do vetor (S[1] = S[20]) 
O conteúdo dessa posição será temp. 
Recursividade 
• Procedimento recursivo é um tipo especial de 
procedimento que contém em sua descrição, 
uma ou mais chamadas a si mesmo e a chamada 
é dita chamada recursiva. 
• Todo procedimento recursivo deve possuir pelo menos 
uma chamada de um local exterior a ele (chamada 
externa) 
 
 
Exemplo de recursivo - Fatorial 
• Cálculo do fatorial de um inteiro n ≥ 0, n!=n(n-1)! 
 Sabe-se que 0! = 1; 1! = 1 
 
 função fat(i) 
 fat(i) := se i ≤ 1 então 1 
 senão i x fat(i-1) 
 
• Variável fat – representa uma função 
 
Procedimento não recursivo 
• Um procedimento não recursivo é aquele em que 
todas as chamadas são externas. 
 
• Exemplo: cálculo do fatorial (não recursivo) 
 
 fat[0] := 1 
 para j := 1,... , n faça 
 fat[j] := j x fat[j-1] 
 
• A variável fat é um vetor 
Procedimento não recursivo 
• Todo procedimento recursivo corresponde um 
outro não recursivo que executa, exatamente a 
mesma computação. 
 
• Qual procedimento é melhor? 
 Procedimento recursivo apresenta maiores 
vantagens pois são mais concisos do que os 
não recursivos; a verificação da correção pode 
ser mais simples também 
Complexidade do algoritmo 
• Uma característica importante do algoritmo é o seu tempo de execução: 
 
– Método empírico – tempo de execução através da execução 
propriamente dita do algoritmo 
– Método analítico – medir o tempo de execução de forma 
independente do computador utilizado, da linguagem e das 
condições locais de processamento 
 
• Objetivo de usar esses métodos é obter uma expressão matemática para 
avaliar o tempo de um algoritmo que não é uma tarefa simples 
 
Propor simplificações: 
Simplificações 
1) Supor que a quantidade de dados a serem manipulados pelo algoritmo 
seja muito grande; 
• Algoritmos cujas entradas tem uma quantidade reduzida de dados não 
serão considerados, somente o comportamento assintótico será avaliado – a 
expressão matemática fornecerá valores de tempo somente quando a 
quantidade de dados crescer o suficiente 
• Não serão consideradas constantes aditivas ou multiplicativas na expressão 
matemática obtida. 
•A ideia é exprimir o tempo de execução de um algoritmo 
em função da entrada 
Processo de execução de um algoritmo 
– Pode ser dividido em etapas elementares - passos 
 
– Cada passo consiste na execução de um número fixo de operações 
básicas cujos tempos de execução são considerados constantes ; 
 
– A operação básica de maior frequência de execução é chamada 
operação dominante 
– Exemplo: em vários algoritmos para ordenar os elementos de 
uma sequência dada, cada passo corresponde a uma comparação 
entre dois elementos da sequência. 
Processo de execução de um algoritmo 
• Portanto: 
Número de passos = 
Número de execuções 
da operação dominante 
Analisar a complexidade do algoritmo que faz a 
inversão de uma sequência 
• O algoritmo de um único passo possui um tempo de execução 
constante 
Exemplo 1 
Para i: =1,..., [n] faça 
 temp:= S[i] 
 S[i]:= S[n – i + 1] 
 S[n- i + 1]:= temp 
 
 Cada entrada é uma sequência em que se deseja inverter 
 O algoritmo executa exatamente as mesmas operações para sequência 
de mesmo tamanho n; 
 Cada passo corresponde a troca de posição entre dois elementos da 
sequência ou seja, a execução das três instruções de atribuições dentro 
do bloco para do algoritmo; 
 
O número de passos é igual ao número de execuções do bloco para, ou 
seja, é igual a [n], n>1. 
 
 
 
Exemplo 2 
• Dadas duas matrizes A e B, ambas n x n, analisar a 
complexidade do algoritmo para se obter a matriz 
C = A + B e a matriz D = A . B 
 
 
 Algoritmo: Soma de matrizes 
 para i := 1, ... , n faça 
 para j := 1, ... , n faça 
 cij := aij + bij 
 
 
 Algoritmo: Produto de matrizes 
 para i := 1, ... , n faça 
 para j := 1, ... , n faça 
 cij := 0 
 para K := 1, ... , n faça 
 cij := cij + aik . bkj 
 
 
COMPLEXIDADE DE TEMPO 
‒ Variável independente é o parâmetro n 
‒ Cada passo no algoritmo soma é a execução da soma aij + bij; 
no algoritmo produto é a operação aij.bij 
‒ O n° total de passos é o n° total de somas e produto 
respectivamente para cada caso 
‒ Algoritmo soma efetua n² passos; o algoritmo produto 
executa n³ passos 
NOTAÇÃO O 
• Simplificações para obter a expressão que 
representa o número de passos executadospelo algoritmo 
 
– Desprezar as constantes aditivas e multiplicativas 
• 3n será aproximado para n 
– Desprezar os termos de menor grau 
• n2 + n será aproximado por n2 
• 6n3 + 4n – 9 será aproximado por n3 
NOTAÇÃO O - Exemplos 
• f = n2 – 1 
 
• f = 403 
 
• f = 5 + 2.log n + 3.log2 n 
 
• f = 3n + 5.log n + 2 
 
• f = 5 . 2n + 5n10 
NOTAÇÃO O - Exemplos 
• f = n2 – 1 
 
• f = 403 
 
• f = 5 + 2.log n + 3.log2 n 
 
• f = 3n + 5.log n + 2 
 
• f = 5 . 2n + 5n10 
• f = O(n2) 
 
• f = O(1) 
 
• f = O(log2 n) 
 
• f = O(n) 
 
• f = O(2n) 
NOTAÇÃO O - Propriedades 
i. O(g + h) = O(g) + O(h) 
ii. O(k.g) = k . O(g) = O(g) 
As complexidades de cada algoritmo são: 
Algoritmo 1 – inversão de uma sequência – complexidade O(n/2) 
Algoritmo 2 - fatorial (não recursivo) – complexidade O(n) 
Algoritmo 3 – soma de matrizes – complexidade O (n²) 
Algoritmo 4 – produto de matrizes – complexidade O(n³) 
 
NOTAÇÃO W 
Assim como a notação O é útil para descrever limites 
superiores assintóticos, a notação Ω é empregada para 
limites inferiores assintóticos. 
 
• Exemplo: f = n2 – 1, então são válidas as igualdades f = 
W(n2), f = W(n) e f = W(1), mas não vale f = W(n3) 
 
ALGORÍTMOS ÓTIMOS 
• Seja P um problema, um limite inferior para P é uma 
função l, limites inferiores naturais é o tamanho da 
entrada. 
• Se existir um algoritmo A cuja complexidade seja O(l), 
então A é denominado algoritmo ótimo para P 
• Um algoritmo ótimo é aquele que apresenta a menor 
complexidade dentre todos os possíveis algoritmos para 
resolver o mesmo problema 
ALGORÍTMOS ÓTIMOS 
• Algoritmo 1 – inversão de sequência – qualquer possível 
algoritmo para inverter a sequência deverá efetuar sua 
leitura – limite inferior é Ω(n), a complexidade do 
algoritmo é O(n), então o algoritmo é ótimo 
• Algoritmo 3 – soma de matrizes n x n deverá em primeiro 
lugar efetuar sua leitura – limite inferior é Ω(n²) , a 
complexidade do algoritmo para soma de matrizes é 
O(n²), então o algoritmo é ótimo 
ALGORITMOS ÓTIMOS 
• Algoritmo 4 – produto de matrizes – um limite 
inferior para o problema do produto de matrizes é 
Ω(n²). A complexidade do algoritmo que calcula o 
produto de matrizes é O(n³) e são reconhecidos 
algoritmos que efetuam o produto de matrizes 
dentro de uma complexidade inferior a O(n³) – 
algoritmo não é ótimo

Outros materiais