Transformação de Chave. (Hashing)
|
|
|
- Giovanna Sacramento Valente
- 7 Há anos
- Visualizações:
Transcrição
1 UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Transformação de Chave (Hashing) e Gomes da Costa [email protected] 1
2 Transformações de Chave, ou Tabela Hash, ou Tabelas de Dispersão; Hashing : fazer picadinho, ou fazer uma bagunça; Técnica que objetiva organizar um conjunto de dados, caracterizados por uma chave, de forma que o acesso tenha o menor custo possível; Em estruturas tradicionais (já estudadas), se os registros forem mantidos ordenados, algoritmos eficientes podem garantir busca à um custo O(log n); 2
3 Tabelas hash, se bem projetadas, podem garantir buscas à um custo constante O(1); Os registros armazenados em uma tabela são diretamente endereçados a partir de uma transformação aritmética sobre a chave de pesquisa; O preço pago por esta eficiência será o uso maior de memória; 3
4 Exemplo: Suponhamos um sistema acadêmico que utiliza como chave o número de matrícula do aluno (RA) composto por 7 dígitos numéricos; Para permitir a busca à um registro de um aluno com um custo constante poderia ser utilizada a sua própria matrícula como índice de um vetor vet; Se isto fosse feito, poderíamos acessar os dados do aluno cuja matrícula é mat através de vet[mat]; 4
5 Assim, o acesso ocorre em ordem constante, entretanto o custo de memória para manter esse acesso é muito alto; Vamos considerar que o registro correspondente a cada aluno tenha a seguinte estrutura: struct Aluno { int mat; char nome [80]; char [30]; char turma; }; 5
6 Considerando que o número de matrícula é composto por 7 dígitos, ele poderia ser caracterizado por qualquer número entre 0 e ; Assim, existe 10 milhões de possíveis números de matrícula; Para isto, seria necessário um vetor com 10 milhões de elementos, que poderia ser estabelecido por: #define MAX Aluno vet[max]; 6
7 Dessa forma, o nome do aluno de matrícula mat é acessado simplesmente através de vet[mat].nome; Embora o acesso seja rápido o custo de memória é proibitivo; Para a struct definida anteriormente teríamos um gasto de 115 bytes de memória para cada aluno; Assim, o vetor descrito anteriormente consumiria bytes, ou seja, acima de 1 Gbyte de memória; 7
8 Em uma situação prática, seria comum encontrar um cadastro com algo em torno de alunos, o que necessitaria de apenas 115 Kbytes de memória para armazenamento; Uma forma de resolver o problema do gasto excessivo de memória, garantindo um acesso rápido, é através do uso de tabela hash; 8
9 Um método de pesquisa através de hashing, é constituído de duas etapas principais: Computar o valor da função de transformação (função hashing), a qual transforma a chave de pesquisa em um endereço de tabela; Considerando que duas ou mais chaves podem ser transformadas em um mesmo endereço de tabela, é necessário existir um método para lidar com colisões; 9
10 Mesmo que o número de registros a serem armazenados seja muito menor do que o tamanho da tabela, qualquer que seja a função de transformação, fatalmente ocorrerão algumas colisões; Paradoxo do aniversário (Feller, 1968): Em um grupo de 23 ou mais pessoas juntas ao acaso, a probabilidade de que 2 pessoas comemorem aniversário no mesmo dia é maior do que 50%. 10
11 Assim, em uma tabela com 365 endereços a probabilidade de colisão entre 23 chaves escolhidas aleatoriamente é maior do que 50%; Alta probabilidade de colisões, mesmo com distribuição uniforme; Exemplos: Armazenar registros cuja chave é o RG de pessoas, com 7 dígitos numéricos, em uma tabela com endereços; Armazenar registros cuja chave consiste de nomes compostos por até 16 letras (26 16 chaves possíveis) em uma tabela com 1000 endereços; 11
12 Funções de Transformação: Uma função de transformação deve mapear chaves em inteiros dentro do intervalo [0..M- 1], onde M é o tamanho da tabela; A função ideal é aquela que: seja simples de ser computada; para cada chave de entrada, qualquer uma das saídas possíveis é igualmente provável de ocorrer. Considerando que as transformações sobre as chaves são aritméticas, se houverem chaves não numéricas, elas devem ser transformadas em números; 12
13 Um dos métodos que funciona muito bem para a transformação de chave, utiliza o resto da divisão por M: h(k) = K mod M Onde K é um inteiro correspondente à chave; Este é um método muito simples; Cuidado na escolha do valor de M: Se M é par, então h(k) é par quando K é par, e h(k) é ímpar quando K é ímpar; Assim, uma boa estratégia é escolher um valor primo para M; 13
14 Um exemplo de função em linguagem C: const n=10, M=7; typedef char TipoChave[n]; int h(tipochave Chave) { int i, Soma=0; for (i=0; i<n; i++) Soma += Chave[i]; return (Soma % M); } 14
15 Exercício: Considere uma situação em que os itens de dados são identificados por uma chave composta por números inteiros de até 5 algarismos. Considere ainda que a função de transformação utilizada para endereçamento em uma tabela seja h(k)=k mod N, onde N é o tamanho da tabela. Considerando uma tabela de tamanho N=7, calcule os endereços para as seguintes chaves : 70013,10000, 7478, 197, 35019, 792, 10394, 5515, 8748, Trace um gráfico mostrando a distribuição destas chaves na tabela. Descreva a sua opinião a respeito da ocorrência (ou não) de colisões proporcionada pelas chaves descritas anteriormente e lance algumas hipóteses que possam viabilizar o tratamento de possíveis colisões em termos de estruturas de dados. 15
16 Um estudo de caso: Armazenar dados de alunos utilizando como chave o RA; Alta probabilidade de colisões, mesmo com distribuição uniforme; Identificando partes significativas da chave: Número de matrícula: Indicadores seqüenciais Vestibular de ingresso Ano de ingresso Pode-se adotar uma parte da chave de acordo com o tamanho da tabela que se pretende utilizar; 16
17 Para armazenar apenas dados de alunos pertencentes à uma determinada turma: Considerando que: muitos alunos provavelmente ingressaram no mesmo ano; muitos alunos provavelmente ingressaram no mesmo vestibular; uma tabela de tamanho 100 seria suficiente para armazenar os dados dos alunos de uma turma; Poderiam ser tomados os dois últimos dígitos dos indicadores seqüenciais para compor a chave; Indicadores seqüenciais Vestibular de ingresso Ano de ingresso 17
18 Assim, a tabela poderia ser dada por: Aluno* tab[100]; Neste caso, o acesso ao nome do aluno cujo número de matrícula é mat seria dado por: vet[mat%100]->nome; A função de busca que mapeia uma chave para um índice da tabela poderia ser: int hash (int mat) { return (mat%100); } 18
19 De forma geral, para uma tabela de tamanho N, a função poderia ser dada por: Na prática, costuma-se utilizar um número primo para estabelecer o tamanho da tabela; Para minimizar o número de colisões, utiliza-se como regra empírica [Celes et al., 2004]: Evitar taxa de ocupação superior a 75%; Taxas em torno de 50%, em geral, trazem bons resultados; Taxas menores do que 25% podem representar gasto excessivo de memória; int hash (int mat) { return (mat%n); } 19
20 Tratamento de colisões: Vamos considerar um vetor de ponteiros, dado por: #define N 127 typedef Aluno* Hash[N]; Uso da posição consecutiva livre: Os elementos que colidem são armazenados em posições da tabela ainda não ocupadas; Uma das estratégias consiste em buscar a próxima posição livre (utilizando incremento circular): x h(x) busca por posição livre o 20
21 Em uma busca, depois de mapeada a chave, procura-se a mesma no vetor até que ela ou uma posição vazia seja encontrada; Aluno* hsh_busca (Hash tab, int mat) { int h=hash(mat); while (tab[h]!= NULL) { if (tab[h]->mat == mat) return tab[h]; h=(h+1)%n; } return NULL; } 21
22 Uma função que insere ou modifica um elemento poderia ser dada por: Aluno* hsh_insere (Hash tab, int mat, char n[81], char e[41], char t) { int h=hash(mat); while (tab[h]!= NULL) { if (tab[h]->mat == mat) break; h=(h+1)%n; } if (tab[h]==null) { //não encontrou o elemento tab[h] = (Aluno*) malloc (sizeof (Aluno)); tab[h]->mat = mat; } strcpy (tab[h]->nome, n); // atribui ou modifica informação strcpy (tab[h]-> , e); tab[h]->turma = t; return tab[h]; } 22
23 Uso de listas encadeadas: Estratégia diferente, consiste em fazer com que cada elemento da tabela hash represente um ponteiro para uma lista encadeada; x h(x) 23
24 Neste caso, a estrutura poderia ser dada por: struct Aluno { int mat; char nome [80]; char [30]; char turma; sturct Aluno* prox; }; 24
25 A operação de busca poderia ser descrita da seguinte forma: Aluno* hsh_busca (Hash tab, int mat) { int h = hash(mat); Aluno* a = tab[h]; while (a!= NULL) { if (a->mat == mat) return a; a = a->prox; } return NULL; } 25
26 Custo médio de uma consulta [Ziviani, 2002]: Uso de posição consecutiva livre: Considerando um fator de carga α dado por: α=q/n» Onde Q é a quantidade de elementos inseridos na estrutura e N é o tamanho da tabela; O custo médio é dado por: Custo médio = ½ (1+1/(1- α)) Lista encadeada: Custo médio = (1+ α) Onde α=q/n, e Q é a quantidade de elementos inseridos na estrutura e N é o tamanho da tabela; A constante 1 corresponde ao tempo gasto para cálculo da função hash; 26
27 Evolução do custo médio para posição consecutiva livre: Q N Custo , , , , , , , , , , , ,50 Custo 60,00 40,00 20,00 0,00 Evolução do custo Carga Custo 27
28 Referências Bibliográficas: Celes, Waldemar et al. Introdução a Estruturas de Dados. Rio de Janeiro: Elsevier, 2004; Pereira, Silvio do Lago. Estruturas de Dados Fundamentais. São Paulo: Érica, 1996; Wirth, Niklaus. Algoritmos e Estruturas de Dados. Rio de Janeiro: LTC, 1999; Ziviani, Nivio. Projeto de Algoritmos com implementações em Pascal e C. São Paulo: Pioneira Thomson Learning, 2002; 28
Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II
Pesquisa em memória primária: hashing Algoritmos e Estruturas de Dados II Hashing Algoritmos vistos efetuam comparações para localizar uma chave. Os registros armazenados em uma tabela são diretamente
Módulo 18 - Tabelas de Dispersão
Estruturas de Dados Módulo 18 - Tabelas de Dispersão 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Exercícios Adicionais P3 e P4 de 2001 a 2003: http://www.inf.puc-rio.br/~inf1620/p&l/links.html 2/6/2005
A inserção da chave 6 da árvore acima resulta na árvore abaixo.
149 Árvores B+ As operações nas árvores B+ não são muito diferentes das operações das árvores B. Inserir uma chave em uma folha que ainda tenha algum espaço exige que se coloque as chaves desta folha em
Matrizes esparsas: definição
Matrizes esparsas: definição o objetivo é mostrar os métodos de armazenamento e manipulação de matrizes esparsas esparsidade de uma matriz é a relação entre o número de elementos nulos de uma matriz e
Hashing: conceitos. Hashing
Hashing: conceitos hashing é uma técnica conhecida como espalhamento, mapeamento ou randomização que tenta distribuir dados em posições aleatórias de uma tabela (array) associa cada objeto (de um determinado
Linguagem C: Listas Encadeadas
Prof. Paulo R. S. L. Coelho [email protected] Faculdade de Computação Universidade Federal de Uberlândia GEQ007 Organização 1 Introdução 2 3 Organização Introdução 1 Introdução 2 3 Introdução Introdução
DAINF - Departamento de Informática
DAINF - Departamento de Informática Algoritmos 2 - Árvore binária de busca Prof. Alex Kutzke ( http://alex.kutzke.com.br/courses ) 30 de Novembro de 2015 Slides adaptados do material produzido pelo Prof.
Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Pesquisa Linear. Adriano J. Holanda 15/3/2016
Pesquisa Linear Adriano J. Holanda 15/3/2016 Busca Linear em memória principal Introdução O dados estarão sempre armazenados na memória principal (DRAM 1 ): não há necessidade de acesso à memória secundária
Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura
Árvores B Prof. Márcio Bueno [email protected] / [email protected] Fonte: Material da Prof a Ana Eliza Lopes Moura Situação Problema Memória Principal Volátil e limitada Aplicações Grandes
Análise de Algoritmos
Análise de Algoritmos Parte 1 Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 04 Algoritmos e Estruturas de Dados I Qual a diferença entre um algoritmo e um programa? Como escolher o algoritmo
TABELA HASH. Prof. André Backes. Princípio de funcionamento dos métodos de busca
TABELA HASH Prof. André Backes Problema 2 Princípio de funcionamento dos métodos de busca Procurar a informação desejada com base na comparação de suas chaves, isto é com base em algum valor que a compõe
Lista Encadeada (Linked List)
Lista Encadeada (Linked List) As listas ou listas encadeadas são a estrutura de dados mais simples concebível excetuando-se naturalmente os arrays. Listas encadeadas nada mais são que uma seqüência de
Árvores Binárias de Busca (ABB) 18/11
Árvores Binárias de Busca (ABB) 18/11 Definição Uma Árvore Binária de Busca possui as mesmas propriedades de uma AB, acrescida da seguintes propriedade: Para todo nó da árvore, se seu valor é X, então:
Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP
Medida do Tempo de Execução de um Programa Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Medida do Tempo de Execução de um Programa O projeto de algoritmos é fortemente influenciado pelo estudo
Estruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011
Estruturas de Dados Aula 16: Árvores com Número Variável de Filhos 13/06/2011 1 Fontes Bibliográficas Livros: Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 13; Projeto de Algoritmos
INF P3-23/06/07 Questão 1 Nome:
INF 1620 - P3-23/06/07 Questão 1 Considere a implementação de listas encadeadas para armazenar inteiros dada pelo tipo abaixo: struct lista { int info; struct lista* prox; typedef struct lista Lista; Escreva
Listas Lineares Ordenadas
Listas Lineares Ordenadas Algoritmos e Estruturas de Dados I Nesta apresentação será apresentado o ADT lista linear ordenada Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre
Programação de Computadores II. Cap. 17 Busca
Programação de Computadores II Cap. 17 Busca Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:
Programação II. Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio Busca em Vetor Problema: Entrada: vetor v com n elementos elemento d a procurar Saída m se o elemento procurado está em
Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza
Árvores B Hashing Estrutura de Dados II Jairo Francisco de Souza Funções Hashing Divisão Compressão de chaves alfanuméricas Multiplicação Enlaçamento Deslocado Limite Função Meio-Quadrado Extração Transformação
Classificação e Pesquisa de Dados. Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos
Classificação e Pesquisa de Dados Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos UFRGS INF1124 Arquivo indexado - AI Indicação de uso Baixa freqüência de acessos seqüenciais
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
INF1007: Programação 2 7 Busca em Vetores. 01/04/2014 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 7 Busca em Vetores 01/04/2014 (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Busca em vetor Busca linear Busca binária 01/04/2014 (c) Dept. Informática - PUC-Rio 2 Busca em
Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 11 Pilhas 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Estruturas de Dados I
Estruturas de Dados I Rodrigo Porfírio da Silva Sacchi [email protected] 3410-2075 Aula 6: Listas Encadeadas e Alocação Dinâmica Listas Encadeadas e Alocação Dinâmica Alocação Seqüencial versus
Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira
Algoritmos e Estrutura de Dados Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira Listas Seqüenciais Estática Seqüencial É implementada usando um vetor Deve-se determinar qual a
Fundamentos de Algoritmos (5175/31)
UEM/CTC Departamento de Informática Curso: Ciência da Computação Professor: Flávio Rogério Uber Fundamentos de Algoritmos (5175/31) Material Original: Prof. Yandre Maldonado e Gomes da Costa (UEM/DIN)
INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 8 Listas Encadeadas (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Motivação Listas encadeadas Implementações recursivas Listas de tipos estruturados (c) Dept. Informática
indexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016
indexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016 Universidade Federal do Paraná indexação e hashing Índices
Estados dos processos. Infra Estruturas Computacionais. A troca de contexto. Escalonamento de Processos. Escalonamento de Processos
Infra Estruturas Computacionais Professor: André Ferreira [email protected] Material baseado: Prof.ª Renata Vilas e outros Estados dos processos novo admissão condição satisfeita pronto carga
Documento de uso exclusivo da unidade, não possui valor legal. 28/06/ :43:00. Matéria: Carga Horária Total. Prática: 44 Campo: 44
Disciplina: CCT0021 - ESTRUTURA DE DADOS Matéria: Carga Horária Total Teórica: 44 Prática: 44 Campo: 44 Tipo Curso: 4 - GRADUAÇÃO TECNOLÓGICA Curso(s): 35 - SISTEMAS DE INFORMAÇÃO 4091 - ANÁLISE E DESENVOLVIMENTO
Módulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Módulo 10 Listas Encadeadas
Estruturas de Dados Módulo 10 Listas Encadeadas 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus
Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro
Estruturas de Dados Filas de Prioridade Ricardo J. G. B. Campello Parte deste material é baseado em adaptações e extensões de slides disponíveis em http://ww3.datastructures.net (Goodrich & Tamassia).
4 Variáveis. Unesp Campus de Guaratinguetá
4 Variáveis Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante Composição do Hardware MEMÓRIA UNIDADES FUNCIONAIS
Introdução Métodos de Busca Parte 1
Introdução Métodos de Busca Parte 1 SCC-201 Introdução à Ciência da Computação II Rosane Minghim 2009 Importância em estudar busca Busca é uma tarefa muito comum em computação? Vários métodos e estruturas
Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação
Listas e matrizes esparsas. SCC122 Estruturas de Dados
Listas e matrizes esparsas SCC Estruturas de Dados Matriz: definição Matriz é um arranjo (tabela) retangular de números dispostos em linhas e colunas 8 9 6 4 7 3 3x3 B 8 9 4 3 5 3 4 3x4 A nº de elementos
Árvores. Prof. César Melo DCC/ICE/UFAM
Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não podem ser usadas como hierarquias. Exemplo: árvore
Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4
Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para
Árvores Binárias de Busca
0. Um breve comentário sobre os algoritmos de busca em tabelas De uma maneira geral, realizam-se operações de busca, inserção e remoção de elementos numa tabela. A busca sequencial tradicional é O(N).
Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler
Aula 10 Alocação Dinâmica de Memória Listas Encadeadas prof Leticia Winkler 1 Prof. Leticia Winkler 2 Alocação de Memória Reservar na memória (principal), o espaço para guardar a informação através da
Introdução à Computação MAC0110
Introdução à Computação MAC0110 Prof. Dr. Paulo Miranda IME-USP Aula 2 Variáveis e Atribuições Memória Principal: Introdução Vimos que a CPU usa a memória principal para guardar as informações que estão
LP II Estrutura de Dados Estruturas Heterogêneas e Listas Lineares Estáticas. Prof. José Honorato Ferreira Nunes
LP II Estrutura de Dados Estruturas Heterogêneas e Listas Lineares Estáticas Prof. José Honorato Ferreira Nunes [email protected] Estruturas (struct) Ao manusearmos dados muitas vezes deparamos com informações
ALGORITMOS E ESTRUTURAS DE DADOS CES-11
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro [email protected] Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos
Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?
Introdução à Ciência da Computação Ponteiros em C Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros
Agenda. Ideia. Buscar um item em um array. Função hash. Função hash. Hash Table. Introdução Definição Hash Table. Métodos de resolução de conflitos
Agenda [email protected] Introdução Definição função hash Kpo abstrato de dados Métodos de resolução de conflitos lista encadeada endereçamento aberto Departamento de Ciências Exatas niversidade Estadual de
PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S
PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é
Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,
SCC 202 Algoritmos e Estruturas de Dados I. Listas Lineares Encadeadas Alocação dinâmica
SCC 202 Algoritmos e Estruturas de Dados I Listas Lineares Encadeadas Alocação dinâmica Lista Encadeada Dinâmica Utiliza alocação dinâmica de memória ao invés de arranjos (vetores) pré-alocados. Inserção
I Alocação dinâmica de memória é utilizada para alocar espaço de memória para armazenar conteúdos de variáveis;
30/08/2016 V UNIVIRTUS POL 5 Nota: 100 isciplina(s): strutura de ados ata de início: 17/08/2016 22:12 Prazo máximo entrega: - ata de entrega: 17/08/2016 22:28 Questão 1/10 Sobre alocação dinâmica de memória,
Fundamentos de Programação
Fundamentos de Programação Linguagem C++: arrays - aula I Bruno Emerson Gurgel Gomes 1 1 Instituto Federal de Educação, Ciência e Tecnologia do RN (IFRN) 2012 Bruno Gomes (IFRN) Fundamentos de Programação
ESTRUTURAS COMPOSTAS. Variáveis Compostas Unidimensionais VETOR. Baseado nos slides de Rosely Sanches e Simone Senger de Souza
ESTRUTURAS COMPOSTAS Variáveis Compostas Unidimensionais VETOR Baseado nos slides de Rosely Sanches e Simone Senger de Souza 2 ESTRUTURAS COMPOSTAS Pode-se organizar os dados dos tipos simples em tipos
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 6 Gerenciamento de Memória Prof. Galvez Considerações Gerais Multiprogramação implica em manter-se vários processos em memória Memória necessita ser alocada de
Pesquisa em Memória Secundária. Prof. Jonas Potros
Pesquisa em Memória Secundária Prof. Jonas Potros Pesquisa em Memória Secundária Pesquisa em memória secundária: arquivos que contém mais registros do que a memória interna pode armazenar. Algoritmos e
Lista com descritor (continuação)
Lista com descritor (continuação) Rotina para remover o eiro elemento de uma LLSECD: char removeiniciollsecd(tdescritor *l, TInfo val) { p = l->; l->=p->prox; if (l->==1) Rotina para remover o último nó
Algoritmos e Estruturas de Dados II IEC013
Algoritmos e Estruturas de Dados II IEC013 TAD, Pilhas e Filas Prof. César Melo Todos os créditos ao Prof. Leandro Galvão TAD: Definição SE programa = definição de um tipo de dados + operação sobre dados
Organização de Arquivos. SCE-183 Algoritmos e Estruturas de Dados II
Organização de Arquivos SCE-183 Algoritmos e Estruturas de Dados II 1 Arquivos Ao construir uma estrutura de arquivos, estamos impondo uma organização aos dados Qual a diferença entre os termos stream
Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa
Ordenação Externa Ordenação Externa Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação
SCC122 - Estruturas de Dados. Lista Estática Seqüencial
SCC122 - Estruturas de Dados Lista Estática Seqüencial Lista Uma lista é uma estrutura que armazena elementos de forma alinhada, ou seja, com elementos dispostos um após o outro. Ex.: Listas de nomes,
C++ - Matrizes. Observ.: C++ não avisa quando o limite de uma matriz foi excedido. Providenciar a verificação é responsabilidade do programador.
C++ - Matrizes É um conjunto de variáveis, do mesmo tipo, referenciadas por um único nome, onde cada variável é diferenciada por meio de um número entre colchetes chamado índice. Declaração : tipo nome
Disciplina de Algoritmos e Programação
Disciplina de Algoritmos e Programação Aula Passada Prática com declaração e inicialização de variáveis Capacidade de representação (estouro de representação) Tamanho ocupado pela variável na memória (comando
Linguagem C Princípios Básicos (parte 1)
Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos
Módulo 4. Listas Encadeadas. Algoritmos e Estruturas de Dados II C++ (Rone Ilídio)
Módulo 4 Listas Encadeadas Algoritmos e Estruturas de Dados II C++ (Rone Ilídio) 1 Ponteiro para struct Ponteiro pode apontar para qualquer tipo de dados A partir de um ponteiro para uma variável cujo
a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.
UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 1. Um programa P foi compilado com um compilador
AULA 14 ESTRUTURA DE DADOS
AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri Matriz Uma matriz bidimensional é um conjunto de elementos (ou tabela) composta por m linhas e n colunas. Matriz Uma
Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:
Compressão de Textos Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM O volume
INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática
1. Listas sequenciais versus listas ligadas. Lista sequencial
Alocação Dinâmica Listas Ligadas 1. Listas sequenciais versus listas ligadas Lista sequencial Uma lista sequencial é um conjunto de elementos contíguos na memória. Um vetor é o melhor exemplo de lista
FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5. Cristina Boeres
FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5 Cristina Boeres Introdução! Diferença de velocidade entre Processador e MP O processador executa uma operação rapidamente e fica em
Noções de algoritmos - Aula 1
Noções de algoritmos - Aula 1 Departamento de Física UFPel Definição de algoritmo Sequência ordenada e finita de operações para a realização de uma tarefa. Tarefa: Experimento de Física I. Passo 1: Reunir
LINGUAGEM C: ARRAY: VETORES E MATRIZES
LINGUAGEM C: ARRAY: VETORES E MATRIZES Prof. André Backes POR QUE USAR ARRAY? As variáveis declaradas até agora são capazes de armazenar um único valor por vez. Sempre que tentamos armazenar um novo valor
SCC Capítulo 5 Métodos de Busca [3]
SCC-201 - Capítulo 5 Métodos de [3] João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis
Anhanguera Educacional S.A. Centro Universitário Ibero-Americano
O C++ foi inicialmente desenvolvido por Bjarne Stroustrup durante a década de 1980 com o objetivo de melhorar a linguagem de programação C, mantendo a compatibilidade com esta linguagem. Exemplos de Aplicações
Introdução à Linguagem C++
Introdução à Linguagem C++ C++: Definição C++ C A Linguagem de Programação C++ pode ser definida como uma extensão da Linguagem C; Todo código de programação em Linguagem C pode a priori ser compilado
