DICIONÁRIOS. template<class K,class T> class Par { public: K chave; T valor; Par():chave(),valor()
|
|
- Mariana Cerveira Monteiro
- 8 Há anos
- Visualizações:
Transcrição
1 DICIONÁRIOS Esta estrutura inclui-se nos chamados contentores associativos, que não são mais do que uma colecção de estruturas de tipo Par, com dois membros de dados (chave de pesquisa e valor associado), que dispõe de métodos que permitem pesquisar a chave do par e devolver uma referência para o membro valor desse par, para permitir acesso directo a esse membro tendo diferentes objectivos conforme a aplicação. Um contentor associativo visto como um tipo abstracto de dados, é idêntico a um vector ou a uma lista. É outra estrutura de armazenamento de informação com operações para aceder e modificar elementos. A principal diferença é que as operações num contentor associativo usam uma chave em vez de um índice ou de um algoritmo de pesquisa para aceder ao elemento. Um programador pode usar a chave sem se preocupar como os elementos estão fisicamente guardados nem como as operações fazem a associação entre chave e elemento. No caso em que a chave é uma palavra e o membro valor é um texto que descreve o significado da chave, então o contentor designa-se por dicionário. Neste caso podemos usufruir da vantagem de fazer uma sobrecarga do operador de indexação [ ], em que o operador toma a chave como argumento e devolve uma referência para o membro valor do par. Tal como um índice de um array, o operador pode ser usado em ambos os lados da instrução de atribuição. Assim, sendo dic o meu objecto dicionário, posso inserir o par na estrutura contentora fazendo: dic["ceu"]="sky"; ou acedendo ao valor (significado) pela chave: cout<<dic["ceu"]<<endl; Como exemplo de aplicação de dicionários podemos citar as tabelas de símbolos nos compiladores (dicionários com chaves duplicadas). Neste caso, a chave é o identificador e o valor será uma estrutura contendo o tipo(int, float,...), endereço de memória, valor,... Vejamos agora como podemos definir em C++, uma estrutura dicionário, simplificada, que permita realizar o que acabamos de indicar. Seguidamente, serão estudados contentores associativos baseados em tabelas de hash. class Par public: K chave; T valor; Par():chave(),valor() Instituto Superior de Engenharia do Porto 1
2 ; ; class Dicionario private: Par<K,T> *array; int max; int ocup; public: Dicionario(int dim); ~Dicionario(); T& operator[](const K & ch); void escreve_tudo(); ; Dicionario<K,T>::Dicionario(int dim) max=(dim<16?16:dim); ocup=0; array=new Par<K,T>[max]; Dicionario<K,T>::~Dicionario() delete[] array; T & Dicionario<K,T>::operator [](const K & ch) int enc=0; Par<K,T> *pp; for(pp=array;pp!=(array+ocup);++pp) if(ch==pp->chave) enc=1; return pp->valor; if(ocup==max) overflow-duplicar espaço Par<K,T> *nvec=new Par<K,T>[max*2]; Instituto Superior de Engenharia do Porto 2
3 for(int i=0;i<max;++i) nvec[i]=array[i]; delete [] array; array=nvec; max=max*2; pp=& array[ocup++]; pp->chave=ch; return pp->valor; void Dicionario<K,T>::escreve_tudo() for(int i=0;i<ocup;++i) cout<<array[i].chave<<" : "<<array[i].valor<<endl; TABELAS DE HASH Consideremos o caso ideal: um elemento elem, tem a chave k e existe uma função f (função de hash), esta função vai mapear o elemento elem (chave k ) na posição da tabela, f(k), onde se deve encontrar o elemento elem com chave k. Exemplo: suponhamos uma escola em que os números dos alunos variam entre e A função f deverá ser tal que fará um mapeamento entre o número do aluno e a posição na tabela e poderá ser esta: f(k)=k Assim o aluno n (k=991346), ocupará a posição (posição=f(k) ),346 (=k ) da tabela. De uma forma geral a tabela é inicializada a 0 e a inicialização será de ordem n, (n é o número de elementos possíveis da tabela) e a pesquisa de ordem 1, assim como o juntar elemento e o eliminar. Acontece a maioria das vezes que o número de elementos possíveis para incluir na tabela é muito superior ao tamanho da tabela e neste caso é possível que a mesma função aplicada a chaves diferentes dê como resultado o mesmo valor de índice da tabela. Cada posição na tabela de hash designa-se por bucket. Cada bucket pode conter um ou mais elementos. Instituto Superior de Engenharia do Porto 3
4 No caso de a aplicação da função de hash a duas chaves distintas, do mesmo universo resultar na mesma posição e se o bucket estiver completo diremos que houve colisão. Para simplificar consideramos que cada bucket contem um elemento. As funções de hash terão que ser definidas criteriosamente. Uma função standard, para o caso de chaves inteiras será fazer o resto da divisão inteira da chave pelo tamanho da tabela. Claro que isto será uma opção razoável se a chave não tiver propriedades indesejáveis, como o exemplo que apontamos a seguir: Exemplo: suponhamos uma tabela com 10 posições, e a função de hash a standard. Se todas as chaves terminassem em 0, então seria muito má escolha esta função uma vez que todos os valores colidiriam na posição 0. Também o tamanho da tabela não estaria bem definido. É aceitável que o tamanho da tabela seja um número primo. Quando a entrada são valores aleatórios inteiros, então a função standard é muito simples e distribui as chaves igualmente. Se a chave for uma string ( podemos usar a seguinte função de hash int hash (const String &chave, const int tamanho) char *ptr=chave; int valor=0; while( *ptr) valor = valor + (*ptr ++); return (valor % tamanho); Esta função é fácil de implementar, mas se a tabela é grande não distribui bem as chaves. Suponhamos que o tamanho da tabela é (número primo) e que as chaves contêm 8 ou menos caracteres. Como um caracter é um inteiro entre 0 e 127 a função só assume valores entre 0 e 1016 (127*8). Isto é evidentemente, uma distribuição pouco equitativa. Outra possível função seria: int hash (const String &chave, const int tamanho) return (chave[o] + 26*chave[1] + 676*chave[2]) % tamanho; Assume-se que a chave tem pelo menos comprimento será o nº de letras Instituto Superior de Engenharia do Porto 4
5 do alfabeto e 676 será Esta função só examina os primeiros 3 caracteres e se o tamanho da tabela for como o indicado anteriormente,10007, então pode esperar-se uma distribuição razoavelmente equitativa. Mas, infelizmente as linguagens não são aleatórias, embora haja 26 3 = combinações possíveis de 3 caracteres só se verificam 2851 combinações. Mesmo que essas não colidam só 28% da tabela será usada. Portanto esta função também não será apropriada se a tabela for muito grande. Podemos ainda usar outra função: int hash (const String &chave, const int tamanho) char *ptr=chave; int valor=0; while( *ptr) valor = valor <<5 + (*ptr ++); valor<<5 equivale a multiplicar por 32 return (valor % tamanho); Usou-se o valor 32, para se poder fazer um shift de bits. Esta função é rápida, excepto se as chaves forem muito grandes. É prática corrente não usar todos os caracteres da chave, mas usar só alguns, por exemplo os das posições ímpares MÉTODOS PARA RESOLUÇÃO DE COLISÕES 1. Encadeamento Externo Quando ocorre uma colisão, os elementos que colidiram são colocados numa lista ligada. No exemplo abaixo esquematizado, a tabela de hash está organizada de forma a que cada bucket contem um apontador para um nó (cabeça da lista de colisões) Instituto Superior de Engenharia do Porto 5
6 Tabela[ ] A tabela representada tem 11 posições, e a função de hash escolhida é a função da divisão, que é a mais vulgar. Estamos a supor que a chave é um valor inteiro. A função toma o seguinte aspecto: f(k) = k % D, em que o índice da tabela é dado pelo resto da divisão inteira da chave pelo tamanho, D, da tabela. As posições na tabela são portanto numeradas de 0 a D- 1. Há muitas vezes necessidade de pré processar a chave antes de lhe aplicar a função de hash. Assim para aplicação da função divisão há que converter a chave num número inteiro. Os algoritmos de pesquisa, juntar elemento e eliminar elemento traduzem-se nos correspondentes algoritmos em lista ordenada. A cabeça é dada pelo valor do apontador na posição da tabela dada por h(k). Poder-se-ia melhorar a performance das lista se considerássemos por exemplo, além do apontador cabeça um apontador para a cauda da lista, verificando-se no inicio das operações se o elemento que colidiu é o que apresenta a maior chave. Outra forma de melhorar a performance seria considerar, em vez de lista ordenada, uma estrutura de árvore binária de pesquisa, mas isto deixamos para exercício. 2. Endereçamento Linear Aberto Este método também se usa quando o tamanho da tabela é menor do que a gama de valores possíveis resultantes da aplicação da função de hash e que por consequência surgem colisões. Assim sempre que se verifica uma colisão, não é possível colocar o elemento na posição fornecida pela função de hash uma vez que o bucket correspondente está cheio, recorre-se a este método, obrigando a colocar o elemento no próximo bucket vazio. Desta forma a pesquisa para o próximo bucket disponível é feita considerando a tabela como se fosse circular. A pesquisa inicia-se no bucket dado pela função de hash e um dos 3 casos pode acontecer: Instituto Superior de Engenharia do Porto 6
7 Encontramos um bucket com a chave que procurávamos (encontramos o elemento a pesquisar, pesquisa com sucesso) Encontramos um bucket vazio (pesquisa sem sucesso, o elemento não existe) Regressamos ao bucket inicial (pesquisa sem sucesso e a tabela está cheia). Vamos supor que tínhamos os mesmos valores usados na exemplificação do encadeamento externo e cuja entrada era dada pela ordem seguinte: 11, 58, 38, 60, 93, 22, 44, 16, A posição para a chave 11 tem índice 0. Quando colocar o valor 22, que também deveria ocupar a posição 0 esta já estará ocupada. Teremos então que percorrer a lista fazendo: posição =( posição + 1 )% D até encontrar uma posição vazia, que felizmente neste caso será a próxima. O valor de D neste exemplo tem o valor 11. Seguidamente descreveremos o correspondente algoritmo para pesquisar e inserir o valor de chave x. Consideramos que a nossa tabela terá um campo conteúdo e um campo designado por ocupação que será verdadeiro ou falso conforme a tabela tem esse índice ocupado ou não. Pesquisar_Inserir(x) Inicio Pesquisar j = h(x) inicial = j enc = 0 Repete Se (tabel[j].ocupaçao=verdade e tabela[j].conteudo=x) Então enc=1 Senão j=(j+1)% D Até (enc=1 ou j=inicial ou tabela[j].ocupaçao=falso) Inserir Se (enc=0) Instituto Superior de Engenharia do Porto 7
8 Fim Então Se (j=inicial) Então Overflow Senão tabela[j].conteudo=x tabela[j]. Ocupaçao=verdade Senão O elemento já existe Seguidamente analisaremos um algoritmo para eliminarmos um elemento x da tabela, embora esta estrutura deva ser utilizada em aplicações em que predominam inserções e pesquisas. Para eliminarmos um elemento x da tabela, começaremos por fazer uma pesquisa e caso esse valor seja encontrado, suponhamos que existia no índice j, então colocaríamos o campo ocupação da tabela nessa posição a falso e teríamos que verificar se o elemento seguinte (posição i) estava fora da posição dada pela função de hash (posição r), isto é se r não estivesse entre j e i, teria que ocupar o lugar de j e agora j tomaria o valor de i e tudo se repetiria, até encontrar-se uma posição vazia. Caso contrário, o elemento da posição i estava na posição correcta, então avançar-se-ia para o próximo i até encontrar uma posição livre ou um valor fora da posição devida. Um algoritmo possível será o seguinte: Algoritmo Inicio Pesquisa, considera-se que encontrou na posição j Se (enc==1) Então Repete tabela[j]. ocupaçao=falso i=(j+1)%d Repete Se (tabela[i]. ocupa çao==verdade) Então r=h (tabela[i]. conteudo) Se (((r>j) e (r< =i)) ou ((r>j) e (i<j)) ou ((r<=j) e (i<j))) Então r_entreji=1 Senão r_entreji=0 Até (tabela [i].ocupaçao ==falso ou r_entreji=0) Se (r_entreji=0 e tabela[i].ocupaçao=verdade) Então tabela[j].conteudo=tabela[i]. conteudo tabela[j]. ocupaçao=verdade Instituto Superior de Engenharia do Porto 8
9 Fim j=i Até (tabela[i]. ocupaçao ==falso) Senão Elemento não existe Para verificar se r se encontra entre a posição j e a posição i três situações serão possíveis: j r i i j r r i j Comparação de métodos de pesquisa Já vimos quatro métodos de pesquisa, pesquisa sequencial, pesquisa binária, pesquisa em árvore binária e hashing. A ordem de complexidade temporal destes métodos é normalmente determinada através do número médio de comparações necessárias para localizar um elemento na estrutura. Vimos que na pesquisa sequencial era de O(n) e na pesquisa binária e árvore binária de pesquisa era de O( log 2 n). A análise no caso de hashing é um pouco mais complicada, uma vez que depende da qualidade da função de hash e do tamanho da tabela. Uma boa função de hash, fornece uma distribuição uniforme dos valores de hash e quando combinado com uma tabela relativamente grande, o número de colisões é reduzido. Numa tabela de hash podemos definir o factor de ocupação (? ) como sendo o número de elementos inseridos na tabela (m) sobre o tamanho da tabela (n),? = m n. Instituto Superior de Engenharia do Porto 9
10 Quando a tabela está vazia? = 0. À medida que se inserem elementos na tabela,? vai aumentando, e maior é a probabilidade de colisão. No caso de endereçamento aberto, o seu valor máximo será 1 quando estiver completamente preenchida (m=n). No caso de encadeamento externo, como as listas de colisão podem crescer tanto quanto o que precisamos,? pode ser maior do que 1. A análise formal da complexidade do hashing está fora do âmbito desta disciplina mas podemos apresentar os resultados obtidos por Knuth neste campo. Assim, chegou às fórmulas abaixo indicadas, para determinação do número médio de acessos necessários para uma pesquisa com sucesso e sem sucesso no caso de encadeamento externo e no caso de endereçamento aberto. Resolução de Colisões Pesquisa com Sucesso Pesquisa sem Sucesso Endereçamento [1 2(1-?)] +?2 [1 2(1-?) 2 ] +? 2 Encadeamento 1 +?2 e -? +? Esta tabela mostra que o endereçamento aberto é bom desde que o factor de ocupação se mantenha baixo (< 75%). De uma forma geral o encadeamento é um método melhor. Se?=1 o encadeamento exige 1.5 acessos para uma pesquisa com sucesso, mas o método por endereçamento requer, com a tabela cheia M72 acessos. Sem dúvida, o hashing é um processo de pesquisa extremamente rápido, contudo cada um dos métodos tem a sua utilização. A pesquisa sequencial é eficiente quando o número de elementos é pequeno e os dados não tem que estar ordenados. A pesquisa binária é mais rápida mas exige que os dados estejam ordenados em array. Este tipo de pesquisa não é viável em situações em que os dados são adquiridos em tempo de execução( como tabelas de símbolos), uma vez que um array ordenado é um veículo ineficiente para inserções e eliminações. Por estas razões hashing e árvore binária de pesquisa competem,a árvore binária de pesquisa não é tão rápida mas tem o aspecto interessante de fornecer dados ordenados através de uma visita simétrica. Hasihng é o melhor método quando se pretende acesso rápido e não é requerido informação ordenada. Instituto Superior de Engenharia do Porto 10
11 Aplicações Aplicações desta estrutura são muitas, nomeadamente em compiladores, onde são usadas para manter o controlo das variáveis declaradas no código fonte, são conhecidas por tabelas de símbolos. São realmente as aplicações ideais para esta estrutura, uma vez que as operações realizadas são as inserções e pesquisas. Os identificadores de variáveis são geralmente pequenos e portanto são de computação rápida. Outra aplicação vulgar é nos programas de jogos. Á medida que o programa procura através de diferentes linhas de jogada, conserva o registo de cada posição ocorrida, calculando uma função de hash baseada nessa posição e "guardando" o movimento para essa posição. Se a mesma posição volta a ocorrer, geralmente por uma simples transposição de movimentos, o programa pode evitar cálculos dispendiosos. Esta acção genérica, feita em programas de jogos, é conhecida como "tabela de transposição". Ainda outra aplicação é na detecção de erros de ortografia. É feito hash a um diccionário completo e as palavras pode ser verificadas em tempo constante. As tabelas de hash são também indicadas para isto, uma vez que não é preciso corrigir as palavras, mas simplesmente indicar que não estão correctamente escritas. Instituto Superior de Engenharia do Porto 11
O acesso aos elementos é aleatório, isto é, qualquer elemento numa colecção pode ser acedido realizando uma pesquisa pela chave.
DICIONÁRIOS São assim designadas as colecções de elementos em que cada elemento tem um campo chamado chave e não existem valores de chaves repetidos. As operações características que permitem a sua manipulação
Leia maisPossui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.
3. Tabelas de Hash As tabelas de hash são um tipo de estruturação para o armazenamento de informação, de uma forma extremamente simples, fácil de se implementar e intuitiva de se organizar grandes quantidades
Leia maisAlgoritmos de pesquisa. Tabelas de dispersão/hash
Algoritmos de pesquisa Tabelas de dispersão/hash Introdução Motivação: Considerar o problema de pesquisar um determinado valor num vetor (array). Se o vetor não está ordenado, a pesquisa requer O(n) de
Leia maisBusca. Pesquisa sequencial
Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um
Leia maisHashing. Rafael Nunes LABSCI-UFMG
Hashing Rafael Nunes LABSCI-UFMG Sumário Mapeamento Hashing Porque utilizar? Colisões Encadeamento Separado Endereçamento Aberto Linear Probing Double Hashing Remoção Expansão Quando não usar! Mapeamento
Leia maisTabela de símbolos: tabelas de espalhamento
Tabela de símbolos: tabelas de espalhamento Marcelo K. Albertini 14 de Janeiro de 2014 2/28 Resumo de complexidades Análises para operação efetuada após N inserções pior caso caso médio keys chave get
Leia maisTabelas Hash. Jeane Melo
Tabelas Hash Jeane Melo Roteiro Introdução Motivação Definição Tabelas Hash Exemplos Funções hash Colisões Introdução Estudamos a utilização de estruturas como listas e árvores para armazenar informações
Leia maisHASHING. Katia Guimarães. katia@cin.ufpe.br 1
HASHING Katia Guimarães katia@cin.ufpe.br 1 HASHING Suponha que você pudesse criar um array onde qualquer item pudesse ser localizado através de acesso direto. Isso seria ideal em aplicações do tipo Dicionário,
Leia maisHashing Letícia Rodrigues Bueno
Hashing Letícia Rodrigues Bueno UFABC hash: Hashing (Tabelas de Dispersão): Introdução hash: Hashing (Tabelas de Dispersão): Introdução Hashing (Tabelas de Dispersão): Introdução hash: 1. fazer picadinho
Leia maisOrientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Leia maisBUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES
BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES ALGORITMOS DE BUSCA EM LISTAS COM ALOCAÇÃO SEQÜENCIAL Busca em Listas Lineares A operação de busca é
Leia maisTabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008
Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,
Leia maisPesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) R. P. António Viera, 23. R. Carlos Seixas, 9, 6º
Pesquisa Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) Ficheiro (ou tabela) Campos Nome Endereço Telefone Antunes, João A. R. P. António Viera, 23 720456
Leia maisÁrvores Binárias de Busca
Árvores Binárias de Busca Definição Uma Árvore Binária de Busca possui as mesmas propriedades de uma AB, acrescida da seguinte propriedade: Para todo nó da árvore, se seu valor é X, então: Os nós pertencentes
Leia maisÁrvores Binárias de Busca
Árvores Binárias de Busca Uma Árvore Binária de Busca T (ABB) ou Árvore Binária de Pesquisa é tal que ou T = 0 e a árvore é dita vazia ou seu nó contém uma chave e: 1. Todas as chaves da sub-árvore esquerda
Leia maisÁrvores Binárias Balanceadas
Árvores Binárias Balanceadas Elisa Maria Pivetta Cantarelli Árvores Balanceadas Uma árvore é dita balanceada quando as suas subárvores à esquerda e à direita possuem a mesma altura. Todos os links vazios
Leia maisTabelas de Espalhamento
Tabelas de Espalhamento Motivação Algumas das estruturas de dados vistas anteriormente requerem que seus elementos (células dinâmicas) sejam inspecionados seqüencialmente até que a desejada seja encontrada.
Leia maisCT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches
CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 4) Árvores balanceadas AVL, Rubro-Negras, B-Trees Operações em árvores binárias de busca
Leia maisARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.
Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto
Leia maisAlgoritmos de Busca em Tabelas
Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas estão entre os mais usados. Considere por exemplo um sistema de banco de dados. As operações de busca e recuperação dos dados
Leia maisAnálise de complexidade
Introdução Algoritmo: sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador) Estratégia: especificar (definir propriedades) arquitectura
Leia maisEstrutura de Dados. Unidade VI. -Tabela Hash -Grafos. Prof. Ms. Amilton Souza Martha
Estrutura de Dados Unidade VI -Tabela Hash -Grafos Prof. Ms. Amilton Souza Martha Tabela Hash - Conceitos Um dos maiores problemas encontrados, quando se estuda a alocação de estruturas de dados, é o tempo
Leia maisDEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA
DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA Sistemas Operativos 2003/2004 Trabalho Prático #2 -- Programação em C com ponteiros -- Objectivos Familiarização
Leia maisCAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:
Leia maisMétodos de Pesquisa em Memória Primária
Algoritmos e Estrutura de Dados II Métodos de Pesquisa em Memória Primária Prof Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Pesquisa Por pesquisa (procura ou busca) entende-se o ato
Leia maisBatalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a.
Atividade 6 Batalha Naval Algoritmos de Busca Sumário Computadores são freqüentemente requisitados a encontrar informação em grandes coleções de dados. Estes precisam desenvolver métodos rápidos e eficientes
Leia maisHashing. Estruturas de Dados. Motivação
Estruturas de Dados Hashing Prof. 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). Motivação
Leia maisÁRVORES BINÁRIAS DE PESQUISA
ÁRVORES BINÁRIAS DE PESQUISA Árvores binárias de pesquisa são uma estrutura alternativa do tipo árvore binária, para guardar valores de tal forma que a recuperação dos mesmos pode ser efectuada de forma
Leia maisA memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande
A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada
Leia maisPesquisa Sequencial e Binária
Pesquisa Sequencial e Binária Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 20 Algoritmos e Estruturas de Dados I Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial
Leia maisBanco de Dados I 2007. Módulo V: Indexação em Banco de Dados. (Aulas 1, 2 e 3) Clodis Boscarioli
Banco de Dados I 2007 Módulo V: Indexação em Banco de Dados (Aulas 1, 2 e 3) Clodis Boscarioli Agenda: Estruturas de Índices; Conceitos; Tipos de Índices: Primários; Secundários; Clustering; Multiníveis;
Leia maisPesquisa em Memória Primária. Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária Algoritmos e Estruturas de Dados II Pesquisa em Memória Primária Pesquisa: Recuperação de informação em um grande volume de dados Informação é dividida em registros e cada
Leia maisESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.
PUC-Rio Departamento de Informática Período: 2015.1 Horário: 2as-feiras e 4as-feiras de 17-19 30 de março de 2015 ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) 1 a Lista de Exercícios 1. Lista (a) Seja um TAD
Leia maisTabelas Hash. Também conhecido como tabelas de dispersão. Até agora... MoFvação. Exercício
Tabelas Hash Rohit Gheyi Também conhecido como tabelas de dispersão 1 Até agora Listas Chaves ordenadas ou não Árvores Binárias de Pesquisa Ordenadas Heaps Binárias Chaves com certa ordem MoFvação Estruturas
Leia maisPesquisa em Memória Primária. Prof. Jonas Potros
Pesquisa em Memória Primária Prof. Jonas Potros Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação é dividida
Leia maisDadas a base e a altura de um triangulo, determinar sua área.
Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares
Leia mais20 Caracteres - Tipo char
0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,
Leia mais2. Representação Numérica
2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos
Leia maisÁrvore Binária de Busca
Árvore Binária de Busca 319 Árvore Binária de Busca! construída de tal forma que, para cada nó:! nós com chaves menores estão na sub-árvore esquerda! nós com chaves maiores (ou iguais) estão na subárvore
Leia maisALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11
ALGORITMOS E ESTRUTURAS DE DADOS Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Uma árvore binária é: uma árvore vazia; ou uma árvore onde qualquer
Leia maisProgramação 2. Trabalho Prático P4B. Efectue as tarefas de programação descritas abaixo, usando a linguagem C++ em ambiente Linux.
Mestrado Integrado em Engenharia Electrotécnica e de Computadores 2006/2007 Programação 2 2º Semestre Trabalho Prático P4B Efectue as tarefas de programação descritas abaixo, usando a linguagem C++ em
Leia maisEstruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa 10.1.4217
Estruturas de Armazenamento e Indexação Rafael Lage Moreira Barbosa 10.1.4217 Estruturas de Armazenamento Banco de Dados são armazenados fisicamente como arquivos de registro, que em geral ficam em discos
Leia maisBCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 04: Análise de Algoritmos (Parte 1) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes
Leia mais13 Números Reais - Tipo float
13 Números Reais - Tipo float Ronaldo F. Hashimoto e Carlos H. Morimoto Até omomentonoslimitamosaouso do tipo inteiro para variáveis e expressões aritméticas. Vamos introduzir agora o tipo real. Ao final
Leia maisManual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco
Escola Superior de Tecnologia Instituto Politécnico de Castelo Branco Departamento de Informática Curso de Engenharia Informática Disciplina de Projecto de Sistemas Industriais Ano Lectivo de 2005/2006
Leia maisFUNDAÇÃO EDUCACIONAL DE ITUIUTABA
FUNDAÇÃO EDUCACIONAL DE ITUIUTABA ASSOCIADA À UNIVERSIDADE DO ESTADO DE MINAS GERAIS CURSO DE SISTEMA DE INFORMAÇÃO PILHA E FILA Prof. Walteno Martins Parreira Júnior www.waltenomartins.com.br waltenomartins@yahoo.com
Leia maisColeções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade
Page 1 podem ser comparadas com arrays, visto que também apresentam a capacidade de armazenar referências para vários objetos. Entretanto, as coleções apresentam uma gama de funcionalidades bem maior do
Leia maisRepresentação de Dados
Representação de Dados Introdução Todos sabemos que existem diferentes tipos de números: fraccionários, inteiros positivos e negativos, etc. Torna-se necessária a representação destes dados em sistema
Leia maisEstruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos
Estruturas de Dados Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Árvores Conceitos Árvores binárias Árvores binárias de pesquisa Árvores binárias balanceadas Árvores ESTRUTURAS
Leia maisEngenharia de Software e Sistemas Distribuídos. Enunciado Geral do Projecto
LEIC-A, LEIC-T, LETI, MEIC-T, MEIC-A Engenharia de Software e Sistemas Distribuídos 2 o Semestre 2014/2015 Enunciado Geral do Projecto O que se segue é uma descrição geral do domínio do projecto a desenvolver
Leia maisx0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?
Recorrências Muitas vezes não é possível resolver problemas de contagem diretamente combinando os princípios aditivo e multiplicativo. Para resolver esses problemas recorremos a outros recursos: as recursões
Leia maisNotas da Aula 17 - Fundamentos de Sistemas Operacionais
Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.
Leia maisAlgoritmos e Programação Estruturada
Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.
Leia maisIntrodução. A verificação de tipos pode ser estática e dinâmica
Análise Semântica Introdução Verifica se as construções sintaticamente corretas possuem significado lógico dentro da linguagem Verifica a consistência da declaração e uso dos identificadores Além disso,
Leia maisSegue-se o estudo da forma como os computadores armazenam e acedem às informações contidas na sua memória.
4. Variáveis Para a execução de qualquer tipo de programa o computador necessita de ter guardados os diferentes tipos de dados, já estudados. Esses dados estão guardados na sua memória. Segue-se o estudo
Leia maisResolução de sistemas lineares
Resolução de sistemas lineares J M Martínez A Friedlander 1 Alguns exemplos Comecemos mostrando alguns exemplos de sistemas lineares: 3x + 2y = 5 x 2y = 1 (1) 045x 1 2x 2 + 6x 3 x 4 = 10 x 2 x 5 = 0 (2)
Leia maisArquitetura de Rede de Computadores
TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador
Leia maisCGA Directa. Manual do Utilizador. Acesso, Adesão e Lista de Subscritores
CGA Directa Manual do Utilizador Acesso, Adesão e Lista de Subscritores Versão 1.00 de 10 de Março de 2008 Índice Pág. Introdução 3 Capítulo 1 Capítulo 2 Capítulo 3 Acesso Acesso 4 Adesão Adesão 5 2.1
Leia maisPolimorfismo. Prof. Leonardo Barreto Campos 1
Polimorfismo Prof. Leonardo Barreto Campos 1 Sumário Introdução; Polimorfismo; Polimorfismo Java; Métodos Abstratos Java Classes Abstratas Java Exercício - Java Polimorfismo C++ Classe Abstrata C++; Funções
Leia maisÁrvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza
Árvores B Hashing Estrutura de Dados II Jairo Francisco de Souza Hashing para arquivos extensíveis Todos os métodos anteriores previam tamanho fixo para alocação das chaves. Existem várias técnicas propostas
Leia maisProf. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa
Prof. Yandre Maldonado - 1 PONTEIROS Prof. Yandre Maldonado e Gomes da Costa PONTEIROS Prof. Yandre Maldonado - 2 Ponteiro é uma variável que possui o endereço de outra variável; É um poderoso recurso
Leia maisINF1007 - PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15
INF1007 - PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15 1. Um número racional é expresso por dois inteiros: um numerador e um denominador (este último diferente de zero!). Implemente um TAD para representar números
Leia maisFACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2
FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO Projeto e Análise de Algoritmos II Lista de Exercícios 2 Prof. Osvaldo. 1. Desenvolva algoritmos para as operações abaixo e calcule a complexidade
Leia maisRAID Redundat Arrays of Inexpensive Disks
RAID Redundat Arrays of Inexpensive Disks Criado em alternativa para os discos grandes e caros. Justificativa: Substituindo discos grandes por muitos discos pequenos, o desempenho melhoraria mais cabeças
Leia maisAlgoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br
(Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução
Leia maisGrupo I [4v] b. [0,6v] De que forma é que o escalonador do Linux tenta minimizar o impacto desta limitação?
Número: Nome: LEIC/LERC 2011/12-2º Exame de Sistemas Operativos 3/Fevereiro/2012 Responda no enunciado, apenas no espaço fornecido. Identifique todas as folhas. Duração: 2h30m Grupo I [4v] 1. [0,6v] A
Leia maisPROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem
Leia maisAnálise de Algoritmos: Melhor caso, pior caso, caso médio
Análise de Algoritmos: Melhor caso, pior caso, caso médio Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 25 Sumário Rever um problema e um algoritmo que já conhecem. Descrevê-lo em pseudo-código
Leia maisTarefa Orientada 13 Agrupamento e sumário de dados
Tarefa Orientada 13 Agrupamento e sumário de dados Objectivos: Funções de agregação Agrupamento e sumário de dados Funções de agregação Nesta tarefa orientada iremos formular consultas que sumariam os
Leia maisMétodos Computacionais. Árvores
Métodos Computacionais Árvores Árvores Vetores e Listas são ótimos para representar estrutura de dados lineares, mas não para modelar dados hierárquicos Exemplos de dados hierárquicos: sistema de arquivos
Leia maisMinistério das Finanças Instituto de Informática. Departamento de Sistemas de Informação
Ministério das Finanças Instituto de Informática Departamento de Sistemas de Informação Assiduidade para Calendários Específicos Junho 2010 Versão 6.0-2010 SUMÁRIO 1 OBJECTIVO 4 2 ECRÃ ELIMINADO 4 3 NOVOS
Leia mais5 Caso de estudo O cartão fidelidade
5 Caso de estudo O cartão fidelidade Cartão de fidelização de clientes das distribuidoras de combustível. Definição em JAVA da classe CartaoFidelidade, que deverá apresentar uma funcionalidade semelhante
Leia maisSistemas Operacionais
Sistemas Operacionais Aula 13 Gerência de Memória Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Sumário
Leia maisAula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis
1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que
Leia maisPlaneamento de um Posto de Abastecimento de Combustível
Introdução aos Computadores e à Programação 2007/2008, 2º Semestre 1º Trabalho de OCTAVE Planeamento de um Posto de Abastecimento de Combustível 1. Introdução Pretende-se instalar um posto de abastecimento
Leia maisTrabalhos Práticos. Programação II Curso: Engª Electrotécnica - Electrónica e Computadores
Trabalhos Práticos Programação II Curso: Engª Electrotécnica - Electrónica e Computadores 1. Objectivos 2. Calendarização 3. Normas 3.1 Relatório 3.2 Avaliação 4. Propostas Na disciplina de Programação
Leia maisLÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES
LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o funcionamento do computador Apresentar a função da memória e dos dispositivos
Leia maisESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti
ESTRUTURAS DE DADOS I Notas de Aula 1 SUMÁRIO 1. INTRODUÇÃO... 2 1.1 Array (vetores)... 2 2. BUSCA DE ELEMENTOS... 3 2.1 Busca Seqüencial... 3 2.2 Busca Binária... 3 2.3 Busca Indexada... 3 2.4 Busca Hash...
Leia maisProgramação Básica em STEP 7 Operações Binárias. SITRAIN Training for Automation and Drives. Página 6-1
Conteúdo Página Operações Lógicas Binárias: AND, OR...2 Operações Lógicas Binárias: OR Exclusivo (XOR)...3 Contatos Normalmente Abertos e Normalmente Fechados. Sensores e Símbolos... 4 Exercício...5 Resultado
Leia maisDiminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP;
Diminui o gargalo existente entre processador e memória principal; Diferença de velocidade 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP; Tecnologia semelhante à da CPU e,
Leia maisAula 2 Modelo Simplificado de Computador
Aula 2 Modelo Simplificado de Computador Um computador pode ser esquematizado de maneira bastante simplificada da seguinte forma: Modelo Simplificado de Computador: Memória Dispositivo de Entrada Processador
Leia maisMemória Cache. Prof. Leonardo Barreto Campos 1
Memória Cache Prof. Leonardo Barreto Campos 1 Sumário Introdução; Projeto de Memórias Cache; Tamanho; Função de Mapeamento; Política de Escrita; Tamanho da Linha; Número de Memórias Cache; Bibliografia.
Leia maisEstruturas de Dados Pilhas, Filas e Deques
Estruturas de Dados Pilhas, Filas e Deques Prof. Eduardo Alchieri Estruturas de Dados Pilhas Pilhas Lista LIFO (Last In, First Out) Os elementos são colocados na estrutura (pilha) e retirados em ordem
Leia maisAlgoritmos e Estrutura de Dados III. Árvores
Algoritmos e Estrutura de Dados III Árvores Uma das mais importantes classes de estruturas de dados em computação são as árvores. Aproveitando-se de sua organização hierárquica, muitas aplicações são realizadas
Leia maisDAS5102 Fundamentos da Estrutura da Informação
Pilhas A estrutura de dados Pilha emula a forma de organização de objetos intuitiva que é utilizada diariamente nos mais diversos contextos da vida humana. Containeres são empilhados e desempilhados diariamente
Leia mais3 Classes e instanciação de objectos (em Java)
3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem
Leia maisEstruturas de Dados I
UFES - Curso de verão 2011 Estruturas de Dados I Profa. Juliana Pinheiro Campos jupcampos@gmail.com Árvores binárias de busca (ou São árvores projetadas para dar suporte a operações de busca de forma eficiente.
Leia maisBases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v. 2013-7-31 1/15
Bases Matemáticas Aula 2 Métodos de Demonstração Rodrigo Hausen v. 2013-7-31 1/15 Como o Conhecimento Matemático é Organizado Definições Definição: um enunciado que descreve o significado de um termo.
Leia mais28/9/2010. Paralelismo no nível de instruções Processadores superescalares
Arquitetura de Computadores Paralelismo no nível de instruções Processadores superescalares Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Processadores superescalares A partir dos resultados
Leia maisTIC Unidade 2 Base de Dados. Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado.
Conceitos relativos à Informação 1. Informação O que á a informação? Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado. 2. Dados Em informática designa-se
Leia maisHardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)
Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,
Leia maisPROGRAMAÇÃO II 4. ÁRVORE
4. ÁRVORE PROGRAMAÇÃO II Prof. Jean Eduardo Glazar Uma árvore impõe uma estrutura hierárquica em uma coleção de itens. Um exemplo familiar é a árvore genealógica. Árvores despontam de forma natural em
Leia maisFigura 1 Busca Linear
----- Evidentemente, possuir os dados não ajuda o programador ou o usuário se eles não souberem onde os dados estão. Imagine, por exemplo, uma festa de casamento com cem convidados na qual não se sabe
Leia maisAdministração e Optimização de BDs
Departamento de Engenharia Informática 2010/2011 Administração e Optimização de BDs Mini-Projecto 1 2º semestre A resolução deve ser claramente identificada com o número de grupo e entregue sob a forma
Leia maisUnidade 5 Armazenamento e Indexação
Unidade 5 Armazenamento e Indexação Engenharia de Computação / Engenharia de Produção Banco de Dados Prof. Maria das Graças da Silva Teixeira Material base: Banco de Dados, 2009.2, prof. Otacílio José
Leia maisBC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento
BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento 1 Gerência de espaço em disco Cópia de segurança do sistema de arquivo Roteiro Confiabilidade Desempenho
Leia maisA máscara de sub-rede pode ser usada para dividir uma rede existente em "sub-redes". Isso pode ser feito para:
Fundamentos: A máscara de pode ser usada para dividir uma rede existente em "s". Isso pode ser feito para: 1) reduzir o tamanho dos domínios de broadcast (criar redes menores com menos tráfego); 2) para
Leia maisMétodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.
Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos. Construtor: método executado por uma CLASSE (e não por um objeto, instância da classe)
Leia mais