Atividades Projeto e Análise de Algoritmos

Período: 5º Professora: Ana Mara Aluno: Pedro Henrique Rocha de Andrade Valor total: 2pts

Atividades referentes ao mês de abril sobre ordenação externa e tabela hash. Código em anexo :)


Ordenação Externa


Resolução de Exercícios: Ordenação Externa


Questão 1 - Intercalação de caminhos

a) Intercalação

O processo utiliza ponteiros para os elementos iniciais de cada arquivo ordenado disponível: Entrada Fita 1 - {3, 9, 20, 45} Entrada Fita 2 - {1, 7, 15, 28} Entrada Fita 3 - {4, 8, 16, 30} Entrada Fita 4 - {2, 6, 18, 40}

PassoValores DisponíveisSaídaFitaPonteiro
1{3, 1, 4, 2}1F2F2 avança para 7
2{3, 7, 4, 2}2F4F4 avança para 6
3{3, 7, 4, 6}3F1F1 avança para 9
4{9, 7, 4, 6}4F3F3 avança para 8
5{9, 7, 8, 6}6F4F4 avança para 18
6{9, 7, 8, 18}7F2F2 avança para 15
7{9, 15, 8, 18}8F3F3 avança para 16
8{9, 15, 16, 18}9F1F1 avança para 20
9{20, 15, 16, 18}15F2F2 avança para 28
10{20, 28, 16, 18}16F3F3 avança para 30
11{20, 28, 30, 18}18F4F4 avança para 40
12{20, 28, 30, 40}20F1F1 avança para 45
13{45, 28, 30, 40}28F2F2 esgotado
14{45, 30, 40}30F3F3 esgotado
15{45, 40}40F4F4 esgotado
16{45}45F1F1 esgotado

b) Sequência final resultante

1, 2, 3, 4, 6, 7, 8, 9, 15, 16, 18, 20, 28, 30, 40, 45

c) Por que “intercalação de n caminhos”?

O método tem esse nome porque processa simultaneamente arquivos (caminhos) de entrada ordenados.

d) Análise de escala (8 arquivos / 4 caminhos)

Fases necessárias: 2 fases de intercalação. Agrupamento: Na primeira fase, os 8 arquivos seriam divididos em dois grupos de 4 arquivos cada. Processamento: Fita 1: 10 Fita 2: 10 Fita 3: 10 Fita 4: 10 Fita 5: 10 Fita 6: 10 Fita 7: 10 Fita 8: 10

Passada 1: Intercalar a fita 1, 2, 3 e 4 pra fita 9, fita 5, 6, 7 e 8 pra fita 10 (só pode 4 caminhos por vez) Fita 9: 40 Fita 10: 40

Passada 2: intercalar fita 9 e 10 Fita 11: 80

Resultado: Fita 11 ordenada com os 80 registros.


Questão 2 - Intercalação Balanceada Bloco Variado

Parâmetros: 6 arquivos, 4 valores. Entrada: 22, 5, 18, 30, 9, 14, 27, 3, 35, 11, 40, 6, 16, 28, 1, 33, 12, 25, 4, 31, 8, 20, 2, 26

a) Distribuição

Entrada Fita 1 - {5, 18, 22, 30}, {1, 16, 28, 33} Entrada Fita 2 - {3, 9, 14, 27}, {4, 12, 25, 31} Entrada Fita 3 - {6, 11, 35, 40}, {2, 8, 20, 26} Saida Fita 4 - {} Saida Fita 5 - {} Saida Fita 6 - {}

b) Intercalações

Entrada Fita 1 - {5, 18, 22, 30}, {1, 16, 28, 33} Entrada Fita 2 - {3, 9, 14, 27}, {4, 12, 25, 31} Entrada Fita 3 - {6, 11, 35, 40}, {2, 8, 20, 26}

Se fossem duas fitas tb n ficaria com tamanho variado, por conta do tamanho da entrada, ou por causa dos valores, coincidentemente ficaram bons. Entrada Fita 1 - {5, 18, 22, 30}, {6, 11, 35, 40}, {1, 16, 28, 33} Entrada Fita 2 - {3, 9, 14, 27}, {2, 8, 20, 26}, {4, 12, 25, 31} Saida Fita 3 - {3,5,9,14,18,22,27,30,1,4,12,16,25,28,31,33} Saida Fita 4 - {2,6,8,11,20,26,35,40} Reescrever na fita 1 a intercalação do bloco

Comparar Fitas 1,2,3:

PassoFita 1Fita 2Fita 3SaídaDestino
15363Fita 4
25965Fita 4
318966Fita 4
4189119Fita 4
518141111Fita 4
618143514Fita 4
718273518Fita 4
822273522Fita 4
930273527Fita 4
10303530Fita 4
113535Fita 4
124040Fita 4
PassoFita 1Fita 2Fita 3SaídaDestino
11421Fita 5
216422Fita 5
316484Fita 5
4161288Fita 5
516122012Fita 5
616252016Fita 5
728252020Fita 5
828252625Fita 5
928312626Fita 5
10283128Fita 5
11333131Fita 5
123333Fita 5
PassoFita 4Fita 5SaídaDestino
1311Fita 1
2322Fita 1
3343Fita 1
4544Fita 1
5585Fita 1
6686Fita 1
7988Fita 1
89129Fita 1
9111211Fita 1
10141212Fita 1
11141614Fita 1
12181616Fita 1
13182018Fita 1
14222020Fita 1
15222522Fita 1
16272525Fita 1
17272626Fita 1
18272827Fita 1
19302828Fita 1
20303130Fita 1
21353131Fita 1
22353333Fita 1
233535Fita 1
244040Fita 1

Saida Fita 4 - {3, 5, 6, 9, 11, 14, 18, 22, 27, 30, 35, 40} Saida Fita 5 - {1, 2, 4, 8, 12, 16, 20, 25, 26, 28, 31, 33} Saida Fita 6 - {}

Resultado: 1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 14, 16, 18, 20, 22, 25, 26, 27, 28, 30, 31, 33, 35, 40

c) Explique por que, nesse método, os blocos iniciais podem ficar maiores do que a memória principal.

A memória não precisa armazenar o bloco inteiro, apenas os registros que estão sendo comparados no momento, permitindo que o resultado da junção de vários blocos menores resulte em um bloco final maior que a capacidade da RAM.


Questão 3 - Intercalação Polifásica

Parâmetros: 4 arquivos, 5 valores. Entrada: 34, 7, 25, 18, 2, 41, 13, 29, 5, 37, 11, 23, 1, 32, 16, 40, 8, 27, 4, 35

a) Distribuição

Fita 1 - {2-0, 7-0, 13-0, 18-0, 25-0, 29-0, 34-0, 37-0, 41-0, 4-2, 8-2} Fita 2 - {1-1, 5-1, 11-1, 16-1, 23-1, 27-1, 32-1, 35-1, 40-1}  Fita 3 - vazia Fita 4 - vazia

b) Intercalação

Fita 1 - {2-0, 7-0, 13-0, 18-0, 25-0, 29-0, 34-0, 37-0, 41-0} Fita 2 - {1-1, 5-1, 11-1, 16-1, 23-1, 27-1, 32-1, 35-1, 40-1}  Fita 3 - {1-1, 2-0, 5-1, 7-0, 11-1, 13-0, 16-1, 18-0, 23-1, 25-0, 27-1, 29-0, 32-1, 34-0, 35-1, 37-0, 40-1, 41-0} Fita 4 - {4-2,8-2} Fita 1 - {1-1, 2-0, 4-2, 5-1, 7-0, 8-2, 11-1, 13-0, 16-1, 18-0, 23-1, 25-0, 27-1, 29-0, 32-1, 34-0, 35-1, 37-0, 40-1, 41-0}

c) Sequência Final

1, 2, 4, 5, 7, 8, 11, 13, 16, 18, 23, 25, 27, 29, 32, 34, 35, 37, 40, 41


Tabela Hash


Questão 1 - Conceitos Fundamentais

Uma tabela hash é uma estrutura de dados que utiliza uma função específica para mapear chaves a índices em um vetor, permitindo o armazenamento e a recuperação de informações de forma eficiente. Ela resolve o problema da lentidão na busca em grandes conjuntos de dados, eliminando a necessidade de percorrer toda a estrutura linearmente (como em listas) ou realizar múltiplas divisões (como em árvores). O custo médio de busca é porque a função hash permite acessar diretamente a posição de memória onde o elemento está, tornando o tempo de resposta constante e independente do volume total de dados.

Questão 2 - Função de Hashing

Uma função de hashing é um algoritmo que codifica uma chave de entrada em um valor numérico que serve como índice para o vetor da tabela. Uma boa função deve ser rápida para calcular, distribuir as chaves de maneira uniforme para evitar acúmulos em poucos índices e minimizar a ocorrência de colisões. O método da divisão é uma técnica onde o índice é definido pelo resto da divisão da chave pelo tamanho da tabela (), seguindo a fórmula .

Questão 3 - Colisões

Uma colisão ocorre quando duas ou mais chaves diferentes resultam no mesmo índice após o cálculo da função de hashing. Elas são consideradas inevitáveis pois como a quantidade de chaves possíveis é geralmente muito superior ao tamanho físico da tabela, o mapeamento eventualmente sobrepõe elementos. O impacto direto das colisões é a perda de desempenho, pois o sistema precisa executar passos adicionais para organizar e encontrar elementos que “disputam” o mesmo espaço.

Questão 4

a) Encadeamento (Lista Ligada)

Como funciona: Cada posição da tabela armazena o endereço de uma lista ligada. Quando uma colisão ocorre, o novo elemento é inserido no nó dessa lista correspondente ao índice. Vantagens: A tabela pode armazenar mais elementos que o seu tamanho nominal e a exclusão de itens é tecnicamente mais simples. Desvantagens: Consome memória extra para os ponteiros da lista e, se houver muitas colisões, a busca pode se tornar lenta (se tornando linear).

b) Endereçamento Aberto

Como funciona: Todos os elementos são guardados no próprio vetor da tabela. Se a posição original estiver ocupada, o algoritmo procura a próxima célula livre. Sondagem: É o método de busca por uma vaga disponível. Exemplos: Pode ser linear que vai procurar na próxima posição consecutiva, quadrática que usa um salto que cresce com o quadrado ou duplo hashing que usa uma segunda função para definir o intervalo do salto.


Questão 5

Parâmetros: Tamanho 11, Função . Chaves: 22, 1, 13, 11, 24, 33, 35, 44, 21, 10.

Cálculos:

ChaveCálculo ()
22
1
13
11
24
33
35
44
21
10

Inserção:

ChavePosiçãoRepresentação da Lista
220[22]
11[1]
132[13]
110[22 -> 11]
242[13 -> 24]
330[22 -> 11 -> 33]
352[13 -> 24 -> 35]
440[22 -> 11 -> 33 -> 44]
2110[21]
1010[21 -> 10]

Tabela final:

PosiçãoRepresentação da Lista
0[22 -> 11 -> 33 -> 44]
1[1]
2[13 -> 24 -> 35]
10[21 -> 10]

Questão 6

Usando a divisão novamente, as posições indicam onde deveriam cair e as tentativas mostram aonde conseguiu a próxima vazia.

ChavePosiçãoTentativasPosição FinalN Colisões
220Pos 0 (livre)00
11Pos 1 (livre)10
132Pos 2 (livre)20
110Colisão. Tenta Pos 0, 1, 2 (Ocupadas). Pos 3 (Livre)33
242Colisão. Tenta Pos 3 (Ocupada). Pos 4 (Livre)41
330Colisão. Tenta Pos 0, 1, 2, 3, 4 (Ocupadas). Pos 5 (Livre)54
352Colisão. Tenta Pos 3, 4, 5 (Ocupadas). Pos 6 (Livre)63
440Colisão. Tenta Pos 0, 1, 2, 3, 4, 5, 6 (Ocupadas). Pos 7 (Livre)77
2110Pos 10 (Livre)100
1010Colisão. Tenta Pos 0, 1, 2, 3, 4, 5, 6, 7 (Ocupadas). Pos 8 (Livre)88

Tabela final

ChavePosição
220
11
132
113
244
335
356
447
2110
108

Questão 7 - Análise Comparativa

a) Endereçamento Aberto. b) Endereçamento Aberto em termos de memória, só utilizou os 11 espaços disponiveis, Encadeamento utilizou MENOS espaços na lista, mas usou mais memória pra encadear no tratamento das colisões. c) Encadeamento foi melhor.



© 2026 Pedro Henrique Rocha de Andrade · Construído com Quartz