Escolar Documentos
Profissional Documentos
Cultura Documentos
VITRIA
2008
Governo Federal
Ministro de Educao
Fernando Haddad
CEFETES Centro Federal de Educao Tecnolgica do Esprito Santo
Diretor Geral
Jadir Jos Pela
Diretor de Ensino
Denio Rebello Arantes
Coordenadora do CEAD Centro de Educao a Distncia
Yvina Pavan Baldo
Coordenadoras da UAB Universidade Aberta do Brasil
Yvina Pavan Baldo
Maria das Graas Zamborlini
Designer Instrucional
Danielli Veiga Carneiro
Curso de Tecnologia em Anlise e Desenvolvimento de Sistemas
Coordenao de Curso
Isaura Nobre
Professor Especialista/Autor
Mateus Conrad Barcellos da Costa
DIREITOS RESERVADOS
Cefetes Centro Federal de Educao Tecnolgica do Esprito Santo
Av. Vitria - Jucutuquara - Vitria - ES - (27) 3331.2139
Crditos de autoria da editorao
Capa: Leonardo Tavares Pereira
Projeto grfico: Danielli Veiga Carneiro
Iconografia: Moreno Cunha
Editorao eletrnica: Mateus Conrad B. da Costa, Humberto Wanke, Monia Vignati
Reviso de texto: Karina Bersan Rocha
COPYRIGHT proibida a reproduo, mesmo que parcial, por qualquer meio, sem
autorizao escrita dos autores e do detentor dos direitos autorais.
Catalogao na fonte: Rogeria Gomes Belchior - CRB 12/417
1.
C837
Ol, Aluno(a)!
Equipe do CEFETES
ICONOGRAFIA
Veja, abaixo, alguns smbolos utilizados neste material para gui-lo em seus estudos.
Fala do professor.
Atividades que devem ser elaboradas por voc, aps a leitura dos textos.
Sumrio
1.
ABSTRAO DE DADOS.......................................................................................................................... 9
1.1
INTRODUO .......................................................................................................................................... 9
1.2
CONCEITOS DE ABSTRAO DE DADOS ................................................................................................. 12
1.2.1 Abstrao em Computao.............................................................................................................. 12
1.2.2 Abstrao de Procedimentos ........................................................................................................... 14
1.2.3 Tipos Abstratos de Dados................................................................................................................ 16
1.2.4 Implementao de Tipos Abstratos de Dados.................................................................................. 23
1.2.5 Avaliao de Implementaes de Tipos Abstratos de Dados .......................................................... 25
2.
3.
LISTAS E RVORES................................................................................................................................ 65
3.1
LISTAS CIRCULARES ............................................................................................................................. 65
3.2
LISTA CIRCULAR DUPLAMENTE ENCADEADA ....................................................................................... 75
3.3
RVORES BINRIAS.............................................................................................................................. 82
3.3.1 rvore Binria de Pesquisa............................................................................................................. 83
3.3.2 O TAD rvore Binria de Pesquisa ................................................................................................ 84
3.3.3 Implementao do TAD rvore Binria de Pesquisa ...................................................................... 85
4.
5.
Ol!
Meu nome Mateus Barcellos Costa, sou professor
e pesquisador do CEFET-ES desde 2005. Atuo na
rea de Engenharia de Software e sou professor de
disciplinas de Programao. Se voc quiser mais
informaes sobre mim e sobre os trabalhos que
desenvolvo, pode visitar minha pgina pessoal em
http://www.sr.cefetes.br/~mcosta.
Produzi o material que ora lhe apresento como
instrumento bsico para o estudo da disciplina de
Tcnicas de Programao Avanada. Nesta
disciplina
iremos
aprofundar
nossos
conhecimentos
em
Programao
de
Computadores usando uma linguagem imperativa
ou procedimental. Exemplos destas linguagens
so C e Pascal. Como de costume no nosso
Curso, iremos adotar a linguagem C, em nossos
exemplos e implementaes. No entanto,
preciso que voc saiba que os conceitos estudados
aqui vo alm da linguagem e podem ser
aplicados em diversos cenrios, na programao
e na Engenharia de Software como um todo.
1. ABSTRAO DE DADOS.
1.1 INTRODUO
Um programa de computador desenvolvido para atender alguma
finalidade prtica , normalmente, um artefato complexo. Por esse
motivo, a atividade de desenvolvimento desses artefatos, a
programao de computadores, est entre as atividades mais
complexas desempenhadas pelo homem. Se voc cursou disciplinas
introdutrias de programao, pode estar se questionando: Ora,
desenvolver um programa no to complexo assim! Basta
compreender o problema, suas entradas e suas sadas e construir a
soluo usando uma linguagem de programao. Simples no? No!
A histria da programao tem dado provas que programar no to
simples assim.
Pgina 9
Pgina 10
Pgina 11
Atividades
Nesta introduo foram levantados cinco aspectos que
tornam o desenvolvimento de software uma tarefa
difcil. Para atacar esses aspectos e tornar o
desenvolvimento de software mais simples so
consideradas
trs
dimenses:
Processo
de
desenvolvimento, Pessoas (partes interessadas:
clientes, desenvolvedores) e Tecnologias de
desenvolvimento. Releia os cinco motivos e tente
escrever um texto resumido, estabelecendo uma
relao entre esses 5 motivos e essas trs dimenses.
Pgina 12
Pgina 13
Atividades
Os itens 1,2 e 3 so abstraes. Para cada um deles
descreva os aspectos que esto sendo escondidos e
os aspectos que realmente importam ao
programador:
1. O comando
2. Um arquivo
3. A funo scanf
Pgina 14
FUNO
SADA
Pgina 15
Atividades
1. Suponha que voc tenha disponveis as
seguintes funes em C:
x
x
x
x
Pgina 16
Pgina 17
Pgina 18
Pgina 19
Pgina 20
Pgina 21
Atividades
Implementar as operaes do TadPonto e do TadReta
considerando o enunciado do problema 1, da Seo 1.2.3
do texto, e desenvolver um programa usando a funo
principal (do quadro a seguir) de forma a testar as
operaes.
Pgina 22
Pgina 23
Implementao
Um TAD implementado por um mdulo de um programa. Uma
nica especificao permite diferentes implementaes para um
mesmo TAD. Uma implementao est correta se esta prov o
comportamento especificado para o TAD. Implementaes corretas
podem diferir uma da outra, por exemplo, em termos do algoritmo ou
da estrutura de dados que elas usam. Essas diferenas interferem na
eficincia (desempenho em tempo de execuo, ou ocupao de
espao) apresentado pelo TAD para realizao das operaes.
Encapsulamento
Para uma abstrao funcionar corretamente, a sua
implementao deve ser encapsulada. Se a
implementao for encapsulada, nenhum outro mdulo
do programa vai depender de detalhes de
implementao do TAD. Encapsulamento garante que
mdulos do programa podem ser implementados e reimplementados independentemente, sem afetar os outros
mdulos do programa.
Pgina 24
Pgina 25
Pgina 26
Domnio da complexidade
Os benefcios da localidade so particularmente
importantes para a abstrao de dados. Estruturas de
dados so muitas vezes complicadas e a viso mais
abstrata mais simples provida pela especificao torna o
resto do programa mais simples. Ainda, mudanas nas
estruturas de armazenamento so uma das principais
formas de evoluo de programas. Portanto, os efeitos
dessas mudanas devem ser minimizados encapsulando
essas estruturas de dados em abstraes de dados.
Atividades
Os cdigos a seguir especificam as interfaces de dois
mdulos: Aluno e Turma.
Pgina 27
Pgina 28
Tarefas:
a) Critique a implementao do mdulo acima com
base nos critrios de avaliao de TADs discutidos
acima.
b) Faa uma implementao da operao
atualizaAlunoDaTurma, respeitando os princpios de
programao baseada em tipos abstratos de dados.
Pgina 29
Ol! Aps o estudo e a compreenso dos conceitos que definem a tcnica de Abstrao de
Dados, utilizaremos esses conceitos em nosso estudo at o final da disciplina. Portanto, se voc no
compreendeu ou no se sente ainda plenamente
convencido de que deve utilzar Abstrao de
Dados em seus programas, recomendo que retorne
ao Captulo 2. O motivo disso muito simples.
Daqui para frente estudaremos problemas e solues mais complexos, que exigem muito do estudante em sua capacidade de abstrao. Neste
Captulo, em particular, iniciamos nosso estudo de
um conjunto de TADs muito comuns e
importantes: Os TAD Pilha e Fila.
2.1 PILHAS
No mundo real uma pilha corresponde a um agregado de objetos que
so acomodados um sobre o outro. A Figura 1 ilustra uma pilha em
que os objetos so caixas.
Pgina 30
Pgina 31
Pgina 32
Pgina 33
Atividades
1. Na seqncia a seguir, uma letra significa
empilha e um asterisco significa desempilha.
Determine a seqncia de valores retornados
pela operao desempilha quando essa
seqncia de operaes realizada sob uma
pilha inicialmente vazia.
EAS*Y*QUE***ST***IO*N***
2. Suponha que uma seqncia misturada de
operaes empilha e desempilha realizada.
As operaes empilha empilham inteiros de 0
at 9 ordenadamente. A operao desempilha
desempilha e imprime o valor desempilhado.
Qual das seqncias abaixo no poder ser
impressa?
(a) 4 3 2 1 0 9 8 7 6 5
(b) 4 6 8 7 5 3 2 9 0 1
(c) 2 5 6 7 4 8 9 3 1 0
(d) 4 3 2 1 0 5 6 7 8 9
Pgina 34
Pgina 35
Atividades
1. Empilhamento decrescente. Uma empilhadeira
carrega caixas de 7, 5 e 3 toneladas. H trs pilhas
A, B e C. A pilha A onde se encontram todas as
caixas que chegam no depsito. Com um detalhe:
caixas maiores no podem ser empilhadas sobre
caixas
menores.
Elabore
uma
funo
chegaNoDeposito
(Caixa*
nova,
Pilha* A) que efetue o controle das caixas, de
forma que, caso uma caixa de maior peso do que
uma que j est em A deva ser empilhada, ento,
todas as caixas que esto em A so movidas para as
pilhas auxiliares B (contendo somente caixas de 5
Pgina 36
2.2 FILAS
Em nosso cotidiano nos deparamos constantemente com filas. Ou
melhor, estamos constantemente entrando e saindo de filas! Muitas
pessoas se aborrecem com as filas. Todavia, podemos dizer que elas
so um mal necessrio. Por exemplo, imaginem se, para entrarem em
um nibus em uma cidade, as pessoas no fizessem uma fila e
simplesmente se amontoassem na porta. Seria um tumulto, as pessoas
que estivessem no ponto h mais tempo poderiam no conseguir entrar
ou ficar sem assento. O mais incrvel que isso acontecia h uns 20
anos e ainda acontece em muitos lugares do Brasil e do mundo!
Pgina 37
Pgina 38
Pgina 39
Pgina 40
Pgina 41
Atividades
Ordenar uma fila utilizando 2 pilhas como variveis
auxiliares. Ao final da ordenao o elemento no incio da
fila deve ser menor que o segundo da fila e assim
sucessivamente. A ordenao deve ser feita apenas em
termos das operaes insere, remove, filaVazia,
empilha, desempilha e pilhaVazia. A funo
deve ter a seguinte organizao:
void ordena_2p (Fila* f){
Pilha p1, p2;
...
}
2.2.2 Implementao
deslocamento
de
Filas
em
arranjos
com
Pgina 42
Pgina 43
Atividades
4. Implementar as operaes imprimir Fila para o TAD Fila
implementado anteriormente.
Pgina 44
Pgina 45
Atividades
1. Reimplemente a Fila Circular, considerando que o elemento a ser
inserido um paciente de hospital (pessoa). Os seguintes dados so
importantes para o paciente: nome, idade, horrio de chegada e
enfermidade.
2. Implemente tambm a operao imprimeFila para essa nova Fila.
Pgina 46
Pgina 47
Note que o valor lido para n pode variar de 1 a 100. Quanto menor o
valor de n, maior o desperdcio de espao alocado.
Usando alocao dinmica teremos o valor de n que, lido, pode ser
usado como parmetro da chamada da funo malloc, para alocar um
conjunto de n inteiros, ou seja, um vetor de n inteiros. A funo
alocDinamica na Figura 17 idntica em termos de
funcionalidade funo alocEstatica. Contudo, esta utiliza
alocao dinmica.
Pgina 48
Pgina 49
Pgina 50
Pgina 51
Pgina 52
Pgina 53
Pgina 54
Atividades
1. Implementar uma operao para o TAD Lista
que insira os elementos no seu final.
2. Implementar uma operao para o tadLista
Pgina 55
p
Figura 32: Representao do da estrutura de dados dinmica Pilha.
Pgina 56
300h
NULL
topo
prox
1
item
p
300h
Figura 34: Diagrama da Pilha com um nodo (um elemento empilhado).
Pgina 57
400h
NULL
300h
topo
prox
prox
item
item
300h
400h
p
Figura 35: Empilhando o elemento 2.
500h
topo
NULL
300h
400h
Prox
prox
prox
item
item
item
300h
400h
500h
Pgina 58
Atividades
Reimplementar o TadPilha, usando o TAD Lista, (visto na
reviso de Alocao Dinmica), como cliente. Nessa nova
implementao o tipo Pilha deve ser definido em termos do
tadLista e as implementaes de empilha e desempilha e
filaVazia devem ser feitas com base nas operaes de
remoo e insero.
Pgina 59
TadFila q;
NULL
q.inicio=NULL;
q.fim=NULL;
inicio
NULL
fim
q
Pgina 60
NULL
inicio
prox
300h
fim
item
300h
400h
NULL
inicio
prox
prox
400h
fim
item
item
300h
400h
Pgina 61
Pgina 62
Atividades
1. Adicionar a
TadFila.
operao
imprimeFila
ao
Pgina 63
3. LISTAS E RVORES.
Ol, Neste Captulo continuaremos o nosso estudo
de Tipos Abstratos de Dados, focalizando
implementaes que utilizam alocao dinmica de
memria. Iremos estudar mais sobre listas
encadeadas e tambm sobre estruturas chamadas de
rvores. Nosso estudo de Listas baseia-se em
variaes do TAD Lista estudado no Captulo 2. Da
mesma forma como fizemos para a lista
simplesmente encadeada, para cada variao iremos
especificar e implementar as operaes para
inicializar a lista, inserir um elemento na lista,
remover e recuperar um elemento existente na lista.
prox
prox
prox
Pgina 65
Pgina 66
NULL
inicializa Lista l
l
100h
e
100h
prox
1
100h
l
100h
100h
200h
prox
prox
200h
100h
Insero direita
l
300h
300h
e
100h
prox
100h
200h
prox
200h
prox
2
300h
l
Insero esquerda
Pgina 67
100h
prox
200h
prox
100h
200h
prox
2
300h
l
300h
300h
200h
prox
200h
prox
300h
l
300h
300h
prox
3
300h
l
NULL
Pgina 68
Pgina 69
100h
prox
200h
prox
100h
prox
2
200h
300h
l
300h
e
300h
Remoo do elemento 2
100h
prox
prox
200h
300h
l
Situao 1: Remoo de um elemento Genrico da lista
300h
300h
100h
prox
e
1
100h
200h
prox
prox
2
200h
300h
l
200h
Remoo do elemento 3
200h
100h
prox
2
100h
prox
200h
l
Situao 2: Remoo de elemento apontado por l
100h
100h
prox
100h
Remoo do elemento 1
NULL
l
Situao 3: Remoo do ltimo elemento da lista
Pgina 70
Pgina 71
Pgina 72
Pgina 73
Pgina 74
Atividades
a) Implementar
uma
operao
insere
ordenado. Utilizando essa operao para inserir
elementos, a partir do nodo inicial da lista, o
prximo de cada elemento deve ser maior que o
seu antecessor;
b) Implementar uma operao para concatenar duas
listas circulares A e B. O resultado deve ser uma
lista contendo todos os elementos das duas listas,
de forma alternada. Ou seja: o primeiro da lista A,
o primeiro da lista B, o segundo da lista A, o
segundo da lista B, e assim sucessivamente.
Pgina 75
NULL
inicializaLista
100h
l
ant
100h
100h
e
1
prox
100h
Insere(1)
100h
200h
ant
200h
e
2
100h
ant
prox
100h
200h
e
1
prox
200h
Insere(2)
300h
300h
ant
100h
e
3
100h
200h
prox
ant
200h
300h
e
2
prox
100h
ant
200h
e
1
Insere(3)
prox
300h
Pgina 76
Pgina 77
Pgina 78
300h
300h
ant
100h
e
3
ant
prox
200h
300h
200h
100h
200h
e
2
ant
prox
100h
200h
100h
e
2
prox
300h
200h
100h
proximo
anterior
200h
ant
e
1
100h
prox
100h
ant
200h
e
1
prox
200h
Pgina 79
Pgina 80
Atividades
2. Implementar uma operao para remover os elementos
de uma lista cujo cdigo maior que 10.
Implementar uma funo removeEntrePares que
remove os elementos que so pares da lista. Ou seja, o
anterior e o prximo do elemento so elementos cujo
cdigo um nmero par.
Pgina 81
Um nodo raiz
Pgina 82
sub-rvore
esquerda
15
12
11
18
14
NULL
20
Pgina 83
Atividades
1. Desenhe uma rvore binria de busca cuja
seqncia de inseres de elementos foi: 30 10 20
50 35 e 44.
2. Desenhe uma rvore binria de pesquisa, em que
as chaves so letras para a insero da seqncia
de letras que compem o seu nome e seu
sobrenome, excluindo as repeties e partindo de
uma rvore inicialmente vazia.
3.
Pgina 84
Pgina 85
Recursividade
rvores so estruturas definas recursivamente. Dessa
forma, a recursividade ser um mecanismo
fundamental para simplificar a implementao das
operaes sobre essas estruturas. Caso voc no esteja
se sentido seguro quanto recursividade, recomendo
que volte ao material de programao II e estude o
assunto.
Insero em rvores Binrias de Pesquisa
A operao de insero pode ser descrita pelo seguinte algoritmo:
Pgina 86
Pgina 87
sub-rvore
esquerda
15
12
11
18
14
NULL
20
Pgina 88
Atividades
4. Desenhar a insero dos elementos 13, 0 e 16 na
rvore da Figura 24.
Pesquisa em rvores Binrias de Pesquisa
A operao pesquisa visa retornar um elemento contido na rvore
t, sendo passado um valor de cdigo (chave de busca). O Elemento
encontrado deve ser passado por meio do parmetro ret, que um
ponteiro para Elemento. Essa operao tambm implementada de
forma recursiva e deve receber o endereo da raiz da rvore. Como a
rvore no sofre alteraes na pesquisa, apenas o valor do endereo do
nodo raiz e (e das subrvores nas chamadas recursivas) suficiente.
Pgina 89
Eficincia da Pesquisa
A eficincia da pesquisa em uma rvore binria de
pesquisa a sua maior vantagem. Para localizar um
elemento em uma rvore com N elementos e construda
aleatoriamente, so necessrias aproximadamente log2
N consultas. Para se ter um idia do que isso representa,
uma pesquisa seqencial em uma lista linear contendo
1,000,000 de elementos realiza em mdia 500,000
consultas para encontrar um elemento. Em uma rvore
essa mesma pesquisa gastaria log2 1,000,000 20
consultas.
Isso acontece porque, a cada verificao, metade dos
dados
a
serem
pesquisados
descartada
(correspondente a subrvore direita ou esquerda do
elemento verificado).
A pesquisa s degradada quando a rvore construda
de tal forma que a sua estrutura se torna uma lista
linear. Isso acontece, por exemplo, se os elementos da
rvore forem inseridos em ordem, de acordo com a
chave de busca. Por Exemplo, a construo de uma
rvore com a seqncia 1, 2,3,20,30, 40,41,42, vai
produzir uma lista linear.
Remoo em rvores Binrias de Pesquisa
Para a remoo de um elemento da rvore devemos considerar dois
casos distintos:
1. O elemento a ser removido est em um nodo que possui, no
mximo, uma subrvore;
Nesse caso, a remoo mais simples, podendo ocorrer:
a) quando esq do nodo aponta para NULL;
b) quando dir do nodo aponta para NULL;
c) quando esq e dir apontam para NULL.
2. O elemento a ser removido est em um nodo que possui as
duas subrvores.
A Figura 27 apresenta a remoo do elemento 11 que no possui
filhos, ou seja, no possui nem subrvore direita nem esquerda.
Pgina 90
15
12
15
18
14
11
12
18
20
14
20
Remoo do elemento 18
15
12
18
12
11
14
20
20
11
14
Pgina 91
18
15
12
12
18
14
11
11
20
14
20
14
Troca pelo antecessor
12
11
18
20
Pgina 92
Pgina 93
Pgina 94
*t
*t
15
14
r
12
11
12
18
14
20
11
18
14
13
20
paux
13
antecessor(*t,&((*t)->esq));
q
*t
antecessor(q,&(*r)->dir);
..
q->e=(*r)->e;
paux = *r;
14
q
*t
12
14
18
r
12
11
14
11
13
*r= (*r)->esq;
18
20
paux
20
13
free(paux);
Pgina 95
Atividades
5. Implementar a funo sucessor, equivalente a
antecessor usada na operao remove. Depois,
modificar a operao remove para que o elemento a ser
removido seja substitudo por seu sucessor.
Impresso em rvores de Pesquisa Binria
Para imprimir os elementos de uma rvore binria de busca, basta
percorrer a rvore usando recursividade. possvel, inclusive,
imprimir os elementos da rvore em ordem, crescente ou decrescente.
O Cdigo da Figura 34 apresenta a implementao da impresso em
ordem crescente.
Pgina 96
18
12
11
20
14
imprime(18)// esq
imprime(12)//esq
imprime(11)//esq
fim da recursao
printf(11)
printf(12)
imprime(14) // dir
fim da recursao
printf(14)
printf(18)
imprime(20)//dir
fim da recursao
printf(20)
Pgina 97
Atividades
6. Implementar a operao imprime de forma que os
elementos da rvore sejam impressos:
x
em ordem decrescente
Pgina 98
Pgina 99
Pgina 100
Atividades
Suponha um baralho contendo 40 cartas todas
diferentes, distribudas de forma totalmente aleatria.
Pense em uma carta especfica e responda:
a) Qual a propobilidade da primeira carta do
baralho ser a que voc pensou?
b) Qual a propobilidade da segunda carta ser a
que voc pensou? E da terceira?
c) Qual a probabilidade de encontrar a carta aps
4 tentativas?
d) Em mdia quantas cartas tero que ser
Pgina 101
Sentinela
Sentinela um valor conhecido que inserido em
uma posio especfica de um arranjo ou de uma
lista. O objetivo usarmos o valor do sentinela
para pararmos um processamento ou uma busca.
Por exemplo, quando buscamos um valor x em um
vetor que vai de 0 a n, e inserimos o valor x como
sentinela na posio n+1. Assim, a busca pode ser
feita at encontrarmos o valor do sentinela, sem a
necessidade de testarmos se chegamos at o limite
do arranjo. O cdigo abaixo ilustra este cenrio:
// buscando x
v[n+1] = x; // atribui o sentinela
i = 0;
while (v[i] != x) {
i++;
}
Pgina 102
Pgina 103
Pgina 104
Atividades
1. Desenvolva um programa utilizando o TAD
Tabela que mea o tempo de execuo da pesquisa
seqencial. Altere o cdigo da tabela para aceitar
um conjunto de at 100.000 itens. Pesquise por
alternativas para medir o tempo de execuo de
um programa. Planeje sua estratgia para medir o
tempo.
2. No estudo da pesquisa seqencial, a busca no
Pgina 105
A D E F G
5 6
J
M N O
Pgina 106
Pgina 107
Atividades
1. Desenvolva um programa utilizando o TAD
Tabela que mea o tempo de execuo da pesquisa
seqencial. Altere o cdigo da tabela para aceitar
um conjunto de at 100.000 itens. Pesquise por
alternativas para medir o tempo de execuo de
um programa. Planeje sua estratgia para medir o
tempo.
2. Implemente uma verso recursiva da pesquisa
binria.
Pgina 108
Pgina 109
Pgina 110
Pgina 111
Pgina 112
Pgina 113
Pgina 114
Pgina 115
Pgina 116
Atividades
8. Modificar a implementao inicial de Hash (sem
tratamento de coliso) para suportar colises com a tcnica
de endereamento aberto.
Pgina 117
5.
Pgina 118
Seleo
Insero
Bolha
Shell
Quicksort
Pgina 119
Pgina 120
3
3
1
1
1
1
1
1
1
1
7
7
7
2
2
2
2
2
2
2
20 1
20 1
20 3
20 3
3 20
3 4
3 4
3 4
3 4
3 4
2
2
2
7
7
7
5
5
5
5
11
11
11
11
11
11
11
7
7
7
0 5 4
10 5 4 (fim
10 5 4 (fim
10 5 4 (fim
10 5 4 (fim
10 5 20 (fim
10 7 20 (fim
10 11 20 (fim
10 11 20 (fim
10 11 20 (fim
da
da
da
da
da
da
da
da
da
interao
interao
interao
interao
interao
interao
interao
interao
interao
i=0)
i=1)
i=2)
i=3)
i=4)
i=5)
i=6)
i=7)
i=8)
Pgina 121
da iterao i=1)
da iterao i=2)
da iterao i=3)
da iterao i=4)
da iterao i=5)
da iterao i=6)
da iterao i=7)
da iterao i=8)
da iterao i=9)
Pgina 122
11 0 5 4
11 0 5 4
11 0 5 4
11 0 5 4
11 0 5 4
20 0 5 4
0 20 5 4
0 5 20 4
0 5 4 20
0 5 4 20
0 5 4 20
11 5 4 20
5 11 4 20
5 4 11 20
5 4 11 20
5 4 11 20
5 4 11 20
(troca
(troca
(troca
(troca
(troca
(troca
10
10
20
20
20
20
e
e
e
e
e
e
3)
7)
1)
2)
11)
0)
Pgina 123
1
1
3
2
2
2
2
2
2
0
1
2
2
2
3
3
3
3
0
0
2
2
7
7
7
7
0
0
0
3
3
3
3
0
0
0
0
7
5
5
5
4
4
4
5 10 4 11 20
5 4 10 11 20
5 4 10 11 20
5 4 10 11 20
5 4 10 11 20
7 4 10 11 20
4 7 10 11 20
4 7 10 11 20
5 7 10 11 20
5 7 10 11 20
5 7 10 11 20
Pgina 124
(primeira
8.
A cada iterao distncia d reduzida de acordo com alguma
seqncia. Na utiliza iterao esta distncia reduzida a 1. Este passo
corresponde ao mtodo de insero original.
Vejamos um exemplo concreto, considerando o arranjo a = {35,
28, 16, 07, 12, 08,04} e utilizando a seqncia de
distncias {3,1}:
Para d = 3 o mtodo ordena os elementos que esto a uma distncia 3
entre si. Na tabela abaixo estes elementos esto em negrito:
Pgina 125
28
16
07
12
08
04
35 est
ordenado, 7
comparado
07
28
16
35
12
08
04
{07,35} est
ordenado, 4
comparado
04
28
16
07
12
08
35
{04,07,35}
est
ordenado
04
28
16
07
12
08
35
28 est
ordenado,
12
comparado
04
12
16
07
28
08
35
{12,28} est
ordenado
04
12
16
07
28
08
35
16 est
ordenado,
35
comparado
04
12
08
07
28
16
35
{08,16} est
ordenado
Pgina 126
1
5
1
1
1
1
1
1
1
1
2
1
1
1
2
2
2
2
2
2
2
2
2
2
2
1
2
2
2
2
4
4
4
4
4
4
2 11
10
10
10
10
10
10
10
10
11
11
11
11
11
11
11
11
10
10
10
10
10
10
10
10
7
7
7
7
5
5
11
11
11
11
11
11
11
11
11
11
11
11
11
11
5
5
5
5
5
5
5
5
5
5
0 5
0 5
0 5
7 5
7 5
7 20
7 20
7 20
4
4
4
4
4
4
4
4
7
7
7
7
7
7
7
10
10
10
10
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
20
20
4
4
4
4
4
4
4
4
4
4
10
10
10
10
11 7
11 7
11 7
11 7
11 7
11 7
11 7
11 7
11 7
11 11
20
20
20
20
20
20
20
20
20
20
10
10
10
10
10
10
10
10
10
10
Pgina 127
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
4
4
4
4
4
5
5
5
5
5
7
7
7
7
7
11
11
11
11
10
20
20
20
11
11
10
10
20
20
20
Pgina 128
Pgina 129
Pgina 130
Atividades
1. Realizar os experimentos com os 5 mtodos de ordenao
estudados. No caso do shellsort utilizar a seqncia de Knuth.
a) Realizar testes com todos os mtodos para vetores de tamanho
20000, 40000, 60000, 80000, 100000, 150000, 200000, 250000,
300000, 350000, 400000 e 500000.
b) Utilizar um software que trace grficos (Excel, por exemplo) e
traar um grfico de desempenho dos mtodos utilizados. O
grfico deve ter os seguintes eixos: eixo x: tamanho do vetor. Eixo
y: tempo de execuo. Colocar as curvas de todos os mtodos no
mesmo grfico para facilitar a comparao.
c) Fazer uma anlise dos resultados obtidos (descritiva).
2. Sabemos que a eficincia do Shellsort depende da seqncia de
distncias utilizada. Assim, neste exerccio, primeiramente voc
deve inventar uma seqncia de distncias sua para ser utilizada
no Shellsort. Posteriormente, escreva uma funo myShellsort que
execute o Shellsort com uma seqncia produzida por voc.
Invente uma seqncia sua! Voc pode utilizar a mesma estrutura
que foi utilizada para as funes shelsort1 e shellsort2. Compare
os resultados de tempo obtidos com a sua seqncia com os
obtidos com a seqncia de Knuth.
Pgina 131
Pgina 132
Segunda Edio.