Aula de revisão

Propaganda
MC3305
Algoritmos e Estruturas de Dados II
Aula 22 – && Revisão geral
Prof. Jesús P. Mena-Chalco
[email protected]
2Q-2015
1
Medida de custo/complexidade de um
algoritmo
2
(1) medida de custo pela execução de um
programa em uma plataforma real
Tais medidas são bastante inadequadas e os resultados
jamais devem ser generalizados:
Os resultados são dependentes do compilador que pode favorecer
algumas construções em detrimento de outras;
Os resultados dependem de hardware;
Quanto grandes quantidades de memória são utilizadas, as medidas de
tempo podem depender deste aspecto.
3
(1) medida de custo pela execução de um
programa em uma plataforma real
Apesar disso, há argumentos a favor de se obterem medidas
reais de tempo:
Exemplo: Quando há vários algoritmos distintos para resolver o
problema;
Assim, são considerados tanto os custos reais das operações como os
custos não aparentes, tais como alocação de memória, indexação,
carga, dentre outros.
4
(2) medida de custo por meio de um modelo
matemático
Usa um modelo matemático baseado em um computador
idealizado.
Deve ser especificado o conjunto de operações e seus
custos de execuções.
É mais usual ignorar o custo de algumas das operações e
considerar apenas as mais significantes.
Em algoritmos de ordenação:
Consideramos o conjunto de comparações entre os elementos do
conjunto a ser ordenado e ignoramos as operações aritméticas, de
atribuição e manipulação de índices, caso existam.
5
Função de complexidade
Para medir o custo de execução de um algoritmo, é comum
definir uma função de custo ou função de complexidade f.
Função de complexidade de tempo:
mede o tempo necessário para executar um algoritmo
para um problema de tamanho n.
Função de complexidade de espaço:
mede a memória necessária para executar um algoritmo
para um problema de tamanho n.
Utilizaremos f para denotar uma função de complexidade de tempo daqui para frente.
Na realidade, f não representa tempo diretamente, mas o número de vezes que
determinada operação (considerada relevante) é realizada.
6
Melhor caso, pior caso e caso médio
Melhor caso:
Menor tempo de execução sobre todas as entradas de
tamanho n.
Pior caso:
Maior tempo de execução sobre todas as entradas de
tamanho n.
Caso médio (caso esperado):
Média dos tempos de execução de todas as entradas de
tamanho n.
Aqui supoe-se uma distribuição de probabilidades sobre o conjunto de entradas
de tamanho n.
7
Comparação de programas
Estudamos o comportamento assintótico das funções de
custo (comportamento de suas funções de custo para
valores grande de n).
O comportamento assintótico de f(n) representa o limite do
comportamento de custo, quando n cresce.
8
Comparação de programas: exemplo
O programa1 leva
O programa2 leva
vezes para ser executado.
vezes para ser executa.
Qual dos dois é o melhor?
Depende do tamanho do problema.
Para n<50, o programa 2 é melhor
Para n>50, o programa 1 é melhor
9
Comparação de programas
Se uma função não é O(f(n)) isso implica que a função seja
Omega(f(n)) ?
10
11
Tratabilidade do problema
Um problema é considerado
Intratável (difícil):
Se ele é tão difícil que não se conhece um algoritmo
polinomial para resolvê-lo
Ex. Algoritmo do caixeiro viajante
Tratável / bem resolvido (fácil):
Se existe um algoritmo polinomial para resolvê-lo.
Ex. Algoritmo de multiplicação de matrizes.
← Algoritmo de Strassen
12
Questão importante
13
Questão importante
14
Recursividade
15
Recursividade
Uma função recursiva é aquela que se chama a si mesma (obrigatoriamente)?
16
Recursividade
Uma função recursiva não necessariamente é aquela que se chama a si mesma
17
Ordenação
18
Ordenação
Os métodos de ordenação são classificados em 2 grandes
grupos:
Ordenação Interna:
Se o arquivo a ser ordenado cabe todo na memória principal
Ordenação Externa:
Se o arquivo a ser ordenado não cabe todo na memória principal
19
Ordenação
20
Ordenação
Os métodos de ordenação são classificados em 2 grandes
grupos:
Ordenação Interna:
Se o arquivo a ser ordenado cabe todo na memória principal
→ Algoritmos Baseados em Comparações
→ Algoritmos Não Baseados em Comparações
21
Ordenação
Algoritmos basedos em Comparações
Insertion sort
Selection sort
Bubble sort
Merge sort
Quick sort
Complexidade computacional
[limite matemático]
[limite assintótico para a ordenação]
22
Ordenação
Algoritmos basedo em Comparações
Insertion sort
Selection sort
Bubble sort
Merge sort
Quick sort
Algoritmos não baseados em Comparações
(utilizam alguma informação sobre os dados)
Counting sort
Radix sort
Bin sort / Bucket sort
Algoritmos que fazem a ordenação em tempo linear
23
Ordenação
24
Ordenação (bogosort.c)
25
Ordenação parcial
26
Ordenação parcial
Os algoritmos de Ord. Parcial que estudamos:
Seleção parcial
Inserção parcial
Heapsort parcial
Quicksort parcial (implementado muito bem por vocês!)
27
Seleção parcial
Um dos algoritmos mais simples.
Principio de funcionamento:
Selecione o menor item do vetor.
Troque-o com o item que está na primeira posição do
vetor.
Repita estas duas operações com os itens:
n-1, n-2, n-3, …, n-(k-1), n-k
k=7
Animação: https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
28
Comparação entre algoritmos
29
Heurísticas de pesquisa
Procedimento simplificador (embora não simplista)
30
Heurísticas proposta por Rivest
Move To Front (MTF) para listas:
Elemento vai para a primeira posição.
Transposição (T) para vetores:
Elemento vai para a uma posição mais
perto do início.
31
Heurísticas proposta por Rivest
MTF
Elemento vai para a primeira posição.
T
Elemento vai para a uma posição mais
perto do início.
É possível fazer melhor que MTF e T? Sim
Aplicar a regra apenas quando o elemento é acessado k
vezes seguidas, para k=2,3, ou 4.
Leva mais tempo para estabilizar, mas faz de uma melhor
maneira.
32
Árvores
33
Árvores de pesquisa
A árvore de pesquisa é uma estrutura muito eficiente para
armazenar informação.
Apropriada quando existe necessidade de considerar todos
ou alguma combinação de:
Acesso direto e sequencial eficientes.
Facilidade de inserção e retirada de elementos.
Boa taxa de utilização de memória.
Utilização de memória principal e secundária.
34
Representação hierárquica
Representação por barras
Representação por parênteses
35
Nós e filhos
“Carga útil”
Campos que dão
estrutura à árvore
→ O nó folha (=leaf) é um nó que não tem filho algum.
→ Se x tiver um pai, essa árvore é uma subárvore de alguma árvore maior.
36
Varredura
Uma função recursiva que faz a varredura e-r-d de uma
árvore binária r:
37
Varredura
38
Complexidade de busca em uma ABB
Busca em ABB = caminho da raiz até a chave desejada
(ou até a folha, caso a chave não exista)
Pior caso:
Maior caminho até a folha = altura da árvore
Complexidade:
Uma árvore binária balanceada é aquela
com altura
39
Árvore AVL
40
AVL
Georgy M. Adelson-Velsky
Russia
Evgenii Mikhailovich Landis
Ucrania
(1922-2014/abril/26)
(1921-1997)
41
AVL
G.M. Adelson-Velskii y E.M. Landis
“An algorithm for the organization of information”.
Proceedings of the USSR Academy of Sciences, vol. 146, pp. 263–266, 1962
AVL foi a primeira estrutura
(conhecida)
de árvore de
altura balanceada ou
altura equilibrada.
42
Árvores AVL
43
Árvores AVL: Fator de balanceamento
O fator de balanceamento/equilibrio de um nó T em uma
ABB é definido como:
Para qualquer nó T em uma árvore AVL, o fator de
balanceamento assume o valor: +1, 0, -1.
O fator de balanceamento de uma folha?
44
Árvores AVL: Fator de balanceamento
45
Árvores AVL: Rotações
O processo de rebalanceamento é conduzido utilizando 4
tipos de rotações
LL
RR
LR
RL
46
Árvores AVL
Há um custo adicional para manter uma árvore balanceada,
mesmo assim garantindo O(log2 n), mesmo no pior caso,
para todas as operações.
Em testes empíricos:
Uma rotação é necessária a cada duas inserções.
Uma rotação é necessária a cada cinco remoções.
47
Árvore Rubro-Negras
48
Árvore Rubro-Negra
Rudolf Bayer
Computer scientist
49
Árvore Rubro-Negra
Somente em 1978, Leo Guibas e Robert Sedgewick , atribuiram
a 'coloração' na árvore.
A cor "vermelho" foi escolhida porque era a mais bonita produzida pela impressora
laser a cores disponíveis para os autores, enquanto trabalhavam na Xerox PARC
50
Propriedades de Árvore Rubro-Negra
As propriedades da árvore rubronegra são:
1- Todo nó da árvore ou é
vermelho ou é preto
2- A raiz e as folhas (nil) são
pretas
3- Se um nó é vermelho, então
seus filhos são pretos
4- Para todo nó, todos os
caminhos do nó até as folhas
descendentes contêm o mesmo
número de nós pretos.
51
Altura de uma Árvore Rubro-Negra
As ARNs com n nós/chaves internas tem altura, no máximo,
igual a 2 lg(n+1) = O(log(n))
A prova é por indução. Ver detalhes no livro de Cormen et al.
52
Inserção
53
Altura de uma Árvore Rubro-Negra
Nenhum caminho é maior do que duas vezes o
comprimento de qualquer outro caminho
54
AVL vs Rubro-Negra
Altura (pior caso)
AVL: 1.44 lg(n+1)
ARN:
2 lg(n+1)
Árvores AVL são mais rigidamente balanceadas que ARN:
AVL→ A inserção e remoção são mais lentas.
AVL→ A busca (recuperação) são mais rápidas.
AVL: Eficiente para árvores que mudam pouco.
ARN: Eficiente para árvores de mudam muito.
55
AVL vs Rubro-Negra
56
Árvores Digitais (Trie)
57
TRIE originado de 'Information reTRIEval'
TRIE = digital tree = radix tree = prefix tree
58
Árvores digitais (Árvore de prefixos)
Palavras/Chaves:
● A
● to
● tea
● ted
● ten
● inn
59
Árvores TRIE
A busca se inicia na raiz.
As busca continua com a subárvore
associado ao símbolo/caratere
procurado até chegar a uma folha (ou
nó interno)
Essa estrutura permite fazer buscas
eficiente de cadeias que
compartilham prefixo.
60
Implementando uma ATRIE
61
Árvores P.A.T.R.I.C.I.A.
acrônimo de
Practical Algorithm To Retrieve
Information Coded In Alphanumeric
62
PATRICIA
63
Árvores PATRICIA
TRIE compactada binária.
Caminhos que possuem nós com apenas 1 filho são
agrupados em uma única aresta.
Diferente das TRIE, não armazena informações nos nós
internos, apenas contadores e ponteiros para cada subárvore descendente.
Ou seja, nenhuma chave é prefixa de outra.
64
PATRICIA: Exemplo de representação
Registro acumulativo que
integra todos os nós exeto nas folhas.
Indica o caractere que deve ser comparado
ao caractere da chave informada.
Identifica qual a posição do caratere
da chave informada que deve ser
analisado
Similar às ABBs: Se a chave é menor ou
Igual ao nó, ela é consultada à esquerda,
caso contrário, à direita.
65
PATRICIA
Vantagem
Permite armazenar um número de posições para qual é
movido para fentre antes de fazer a próxima comparação.
[elimina comparações desnecessárias → melhora o desempenho]
66
PATRICIA
Desvantagem
Considera apenas 2 subárvores.
Se mais do que duas chaves são distintas na mesma posição
do caratere, é necessário adicionar nós extras ao índice para
separa-lo.
[Se n chaves são distintas na mesma posição, então serão necessários
n-1 nós para separá-los.
Se muitos casos destes acontecem, é preferível utilizar TRIE]
67
Árvores
50
60
70
80
90
Anos
log(m) →
log(n) →
1960
TRIE
1968
PATRICIA
1962
AVL
1972
Symmetric
Binary
B-Trees
1978
Red-Black
68
Árvores B
69
Artigo: R. Bayer, E. McCreight “Organization and Maintenance of
Large Ordered Indexes”. Acta-Informatica, 1:173-189, 1972.
70
P
D
A
B
C
D
M
P
G
I
W
T
M
N
P
R
S
W
T
U
W
71
http://blog.hackerrank.com/the-unhealthy-obsession-with-tree-questions/
72
HASHING (tabelas de dispersão)
73
Problemas com o acesso direto
As chaves nem sempre são valores numéricos:
Exemplo: chaves com nomes de pessoas.
Solução: Contruir uma representação numérica das chaves.
Função F(chave) → {0,1,...,m-1}
O problema dos espaços é mais grave!
Exemplo: duas chaves 0 e 999.999
Acesso direto: tabela de 1milhão de buckets, sendo que somente dois
seriam ocupados.
Solução: o uso de tabelas de dispersão.
Precisamos de um bucket para cada chave possível.
74
Tabelas de dispersão (Hashing)
Através da aplicação de uma função conveniente (função de
dispersão ou função hash), a chave é transformada em um
endereço de tabela (endereço base).
hash(chave) → {0, 1, … ,m-1}
Note: m, não n.
O método aproveita a possíbilidade de acesso randômico a
memória para alcançar uma complexidade média O(1), sendo
o pior caso, entretanto, O(n)
75
Tabelas de dispersão/espalhamento
Duas formas de tratar colisões:
Endereçamento aberto.
Resolução de colisões através de encadeamento.
Para evitar colisões usa-se uma função Hash que apresente “comportamento randômico”
76
Custo de acesso a disco
77
Custo do acesso a disco
O custo do acesso a disco pode ser dividido em três
operações distintas
–
–
–
Tempo de busca (seek).
Atraso rotacional no disco.
Tempo de transferência dos dados.
Custo do acesso a disco
Tempo de busca (Seek time)
Tempo necessário para se mover o braço de acesso para o
cilindro correto.
Atraso rotacional (Rotational delay)
É o tempo que o disco necessita para rotacionar de forma
que o setor desejado fique sob a cabeça de leitura/escrita.
Tempo de transferência (Transfer time)
É dado pela seguinte fórmula:
Tempo de transferência = (Número de bytes transferidos / Número de
bytes na trilha) x tempo de rotação.
Comparação memória RAM vs discos
 Discos
Um acesso na memória RAM (Random Access
Memory) tipicamente pode ser feito em 30 a 60
nanosegundos (30 x10-9 s).
– Obter a mesma informação no disco tipicamente leva
de 7 a 10 milisegundos (7 x10-3 s).
– Memória RAM é cerca de 1 milhão de vezes mais
rápida que o disco.
Mas provêm uma capacidade maior a um preço menor.
Também são capazes de reter dados quando o
computador é desligado.
–


são lentos
Estado-da-arte →
Gustavo S. Pavani
81
Conjuntos disjuntos
82
Estruturas para conjuntos disjuntos
 Union-Find
 Coleção
{S1,..., Sk} de conjuntos disjuntos dinâmicos
(que variam ao longo do tempo)
 Cada conjunto Sk é identificado por um representante,
que é um membro do conjunto.
 Geralmente não importa quem é o representante
8
7 3
2
1
9 0
6
5
4
0 1 2 3 4 5 6 7 8 9
C 5 1 1 35 5 5 3 35
83
Operações
 Make_Set(x):
Cria um novo conjunto cujo único
elemento é apontado por x.
–
x não pode pertencer a outro conjunto da coleção.
 Union(x,
y): Executa a união dos conjuntos que
contêm x e y, digamos Sx e Sy, em um conjunto único.
–
Sx ∩ Sy é vazio (conjuntos disjuntos).
–
O representante de S = Sx ∪ Sy é um elemento de S.
 Find(x):
Devolve um ponteiro para o representante
(único) do conjunto que contém x.
84
Aplicações
 Algumas
aplicações envolvem o agrupamento de N
elementos em uma coleção de conjuntos disjuntos,
ou seja, um particionamento dos elementos em
conjuntos.
Alguns usos
–
–
Problemas de grafos
E.g. árvore geradora mínima, componentes conexas
Agrupamento (clustering)
Envolvido em mineração de dados e reconhecimento de padrões
85
Heurística para floresta de conjuntos
disjuntos
 União
ponderada (union by rank): faça a raiz da
árvore com menor rank (altura) apontar para a raiz da
árvore com maior rank.
 Compressão
de caminhos (path compression):
durante uma busca (Find_Set) faça os nós do
caminho apontar para a raiz
Find_Set(a)
86
Na prática
87
Para finalizar
88
Tópicos interessantes
Algoritmos por força bruta.
Backtracking (refinamento da busca por força bruta).
Algoritmos Gulosos (Greedy algorithms)
Algoritmos de programação dinamica (Dynamic programming)
Algoritmos Randomizados (Monte Carlo algorithms)
Testes de software
Códigos elegantes
89
Código elegante para os artesão de software
“Código que funciona” Vs “Código bonito”
Elegância é sinônimo de beleza. Em computação também
foram associados as conotações de eficâcia e
simplicidade.
90
Código elegante
91
Código elegante
The book is about "topics like testing,
debugging, portability, performance, design
alternatives, and style," which, according to
the authors, "are not usually the focus of
computer science or programming courses".
It treats these topics in case studies,
featuring implementations in several
programming languages (mostly C, but also
C++, AWK, Perl, Tcl and Java).
"The book fills a critical need by providing insight into pragmatic designand coding issues
so that programmers become better at their craft...Programmers just out of school should be
given this book on their first day of work. It will save employers thousands of dollars due to
lost productivity and "mindless" debugging." -- Paul McNamee, Computer Scientist, Johns
Hopkins University Applied Physics Laboratory
92
93
Sobre a P2
Tópicos:
Todos os tratados no quadrimestre
Dia: 18/08 (com inicio -opcional- 30min antes do horário)
Resumo:
Pode trazer uma folha A4 contendo um resumo (feito a mao)
94
Download