ordenação de dados em memória baseado na apresentaÇÃo de prof. ronaldo s. mello ine5384 -...
TRANSCRIPT
![Page 1: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/1.jpg)
Ordenação de Dados
em Memória
BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello
INE5384 - Estruturas de DadosUFSC-CTC-INE
![Page 2: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/2.jpg)
Ordenação de Dados
• Processo bastante utilizado na computação de uma estrutura de dados
• Dados ordenados garantem uma melhor performance de pesquisa a uma ED
– busca seqüencial• evita a varredura completa de uma lista de dados
– busca binária• só é possível se os dados estão ordenados• apresenta baixa complexidade
![Page 3: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/3.jpg)
Compromisso• “A complexidade da ordenação da ED
não deve exceder a complexidade da computação a ser feita na ED sem o processo de ordenação”
• Exemplo: deseja-se realizar uma única pesquisa a um vetor– busca seqüencial O(n)– ordenação O(n log n)– Não vale a pena ordenar!
![Page 4: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/4.jpg)
Considerações
• Dados estão mantidos em um vetor
• Elemento do vetor– objeto que possui um atributo chave que deve
ser mantido ordenado
• Um método troca(x,y) realiza a troca dos elementos presentes nas posições x e y do vetor
• Para fins de exemplo, números inteiros serão utilizados como elementos
![Page 5: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/5.jpg)
Métodos de Ordenação
• Ordenação por troca– BubbleSort (método da bolha)– QuickSort (método da troca e partição)
• Ordenação por inserção– InsertionSort (método da inserção direta)– BinaryInsertionSort (método da inserção direta binária)
• Ordenação por seleção– SelectionSort (método da seleção direta)– HeapSort (método da seleção em árvore)
• Outros métodos– MergeSort (método da intercalação)– BucketSort (método da distribuição de chave)
![Page 6: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/6.jpg)
Métodos de Ordenação Simples
• São três– BubbleSort– InsertionSort– SelectionSort
• Características– fácil implementação– alta complexidade– comparações ocorrem sempre entre posições
adjacentes do vetor
![Page 7: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/7.jpg)
“Revisão” de Somatória
• Propriedade 1 (P1)
• Propriedade 2 (P2)
i = 1
n n (n + 1)i =
2
i = 1
n
i =k i = 1
n
ik
![Page 8: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/8.jpg)
SelectionSort
• SelectionSort é um método simples de seleção
– ordena através de sucessivas seleções do elemento de menor valor em um segmento não-ordenado e seu posicionamento no final de um segmento ordenado
e2 e5 e8 . . . e6
e2 e5 e6 . . . e8
troca
![Page 9: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/9.jpg)
Ordenação por Seleção
• Característica particular– realiza uma busca seqüencial pelo menor
valor no segmento não-ordenado a cada iteração
• Simulação de funcionamento
http://math.hws.edu/TMCM/java/xSortLab
![Page 10: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/10.jpg)
Seleção - Complexidade• Para qualquer caso
9 5 1 2 4
1 5 9 2 4
1 2 9 5 4
1 2 4 5 9
1a V: n-1 comparações
2a V: n-2 comparações
. . .(n-1)a V: 1 comparação
i = 1
n - 1i (n - 1) n=
2 O(n2)
troca
![Page 11: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/11.jpg)
Seleção - Implementação void Ordenação_por_Seleção(tipo vet[], int qtpos){
int fim, i, posmaior;tipo aux;fim=qtpos -1; /* inic todo vetor está desordenado */while (fim>0) /* qdo fim=0,a parte desord tem1 elem , logo, está ordenado*/{
posmaior=Escolhe_maior (vet,fim);if (posmaior!= fim) /* se o maior já está na ultpos da parte desord. nada
há a fazer */{
aux=vet[fim];vet[fim]=vet[posmaior];vet[posmaior]=aux,
}fim - -;
}}}
![Page 12: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/12.jpg)
Seleção - Implementação
int Escolhe_maior(tipo v[], int upt){ /* Acessa cada posição da parte desordenada do vetor,procurando
onde está maior valor*/
int pM,i;pM=0;for(i=1;i<=up;i++){
if (v[i]>v[pM])pM=i;
}return ( pM)}
![Page 13: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/13.jpg)
Bolha
• BubbleSort é um método simples de troca– ordena através de sucessivas trocas entre
pares de elementos do vetor
• Características– realiza varreduras no vetor, trocando pares
adjacentes de elementos sempre que o próximo elemento for menor que o anterior
– após uma varredura, o maior elemento está corretamente posicionado no vetor e não precisa mais ser comparado• após a i-ésima varredura, os i maiores elementos
estão ordenados
![Page 14: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/14.jpg)
Bolha
• Simulação de funcionamento
http://math.hws.edu/TMCM/java/xSortLab
![Page 15: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/15.jpg)
Bolha - Complexidade• Para um vetor de n elementos, n – 1
varreduras são feitas para acertar todos os elementos
4 9 2 1 5n = 5
4 2 1 5 9
2 1 4 5 9
1 2 4 5 9
1 2 4 5 9
início:
1 2 4 5 9
1a V: n – 1 comparações
2a V: n – 2 comparações. . .
(n-2)a V: 2 comparações
(n-1)a V: 1 comparação
fim:
![Page 16: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/16.jpg)
Bolha - Complexidade
• Definida pelo número de comparações envolvendo a quantidade de dados do vetor
• Número de comparações:
(n - 1) + (n – 2) + ... + 2 + 1
• Complexidade (para qualquer caso):
i = 1
n - 1
i (n - 1) n=2
O(n2)
![Page 17: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/17.jpg)
Bolha - Implementação void Bolha(tipo vet[], int qtpos){
int ultroca,fimdesord,ultroca;tipo aux;for(fimdesord=qtpos-1;fimdesord>0;fimdesord=ultroca) {
ultroca=0;for(i=0;i<fimdesord;i++) /* ult. pos. que tem vizinho à direita é a penúltima*/{
if(vet[i]>vet[i+1]){
aux=vet[i];vet[i]=vet[i+1];vet[i+1]=aux;ultroca=i; /* guarda onde realizou a última troca pois a
parte antecessora a esta posição no vetor pode ter ficado desordenada */
}}
}
![Page 18: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/18.jpg)
Ordenação por Inserção
• InsertionSort é um método simples de inserção
• Características do método de inserção– considera dois segmentos (sub-vetores) no
vetor: ordenado (aumenta) e não-ordenado (diminui)
– ordena através da inserção de um elemento por vez (primeiro elemento) do segmento não-ordenado no segmento ordenado, na sua posição correta
![Page 19: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/19.jpg)
Método de Inserção
e5 e9 . . . e8 e2
segmento ordenado segmento não-ordenado
e5 e8 e9 . . . e2
• Inicialmente, o segmento ordenado contém apenas o primeiro elemento do vetor
![Page 20: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/20.jpg)
InsertionSort • realiza uma busca seqüencial no segmento
ordenado para inserir corretamente um elemento do segmento não-ordenado
• nesta busca, realiza trocas entre elementos adjacentes para ir acertando a posição do elemento a ser inserido
e5 e9 e8 . . . e2
e5 e8 e9 . . . e2
![Page 21: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/21.jpg)
InsertionSort
• Simulação de funcionamento
http://math.hws.edu/TMCM/java/xSortLab
![Page 22: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/22.jpg)
InsertionSort - Complexidade• Pior caso: vetor totalmente desordenado
9 5 4 2 1n = 5
5 9 4 2 1
4 5 9 2 1
2 4 5 9 1
1 2 4 5 9
início:
1a V: 1 comparação
2a V: 2 comparações. . .
(n-2)a V: n-2 comparações
(n-1)a V: n-1 comparações
i = 1
n - 1
i (n - 1) n=2
O(n2)
![Page 23: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/23.jpg)
InsertionSort - Complexidade• Melhor caso: vetor já ordenado
1 2 4 5 9n = 5
1 2 4 5 9
1 2 4 5 9
1 2 4 5 9
1 2 4 5 9
início:
1a V: 1 comparação
2a V: 1 comparação. . .
(n-2)a V: 1 comparação
(n-1)a V: 1 comparação
n - 1 O(n)
![Page 24: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/24.jpg)
InsertionSort X BubbleSort
Melhor caso Pior caso
InsertionSort O(n) O(n2)
BubbleSort O(n2) O(n2)
![Page 25: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/25.jpg)
Comparação
Melhor caso Pior caso
InsertionSort O(n) O(n2)
BubbleSort O(n2) O(n2)
SelectionSort O(n2) O(n2)
![Page 26: Ordenação de Dados em Memória BASEADO NA APRESENTAÇÃO DE Prof. Ronaldo S. Mello INE5384 - Estruturas de Dados UFSC-CTC-INE](https://reader035.vdocuments.pub/reader035/viewer/2022081419/552fc0f8497959413d8b5885/html5/thumbnails/26.jpg)
Exercícios• Faça um programa que gerencie uma agenda de telefones. O programa deve ser
capaz de armazenar as informações para até 100 pessoas. A agenda deve conter o nome e o telefone de cada pessoa, devendo ser possível realizar as seguintes operações: consulta de um telefone, inclusão de um novo telefone; alteração do número de um telefone já cadastrado; exclusão de um telefone; impressão dos telefones cadastrados; ordenação por nome; consulta a partir do nome de uma pessoa; armazenamento dos dados em um arquivo(escreve_tudo) e recuperação dos dados do arquivo (le_tudo). A rotina de consulta de um telefone obtido o nome, quando o mesmo não está cadastrado deve perguntar ao usuário se o mesmo deve ser incluído.
• a) faça uma função chamada le_tudo() que pergunta o nome do arquivo que contém a agenda. Se o mesmo existir, leia as informações do arquivo. A função retorna a quantidade de registros lidos. Se o arquivo não existe, a função retorna 0 (zero). O nome perguntado deve ser mantido
• b) faça uma função chamada escreve_tudo() que escreva tudo no arquivo cujo nome é o mesmo da rotina de leitura..
• c) faça uma função para cada tarefa que o programa realiza.• • Obs;O programa deverá avisar ao usuário sempre que não puder realizar as
alterações. Faça cada tarefa e teste- Comece pela le_tudo, a seguir faça a inclusão e a escreve_tudo.
• Não se esqueça de fazer a função main().