Estruturas de Dados

notas de aula baseadas no livro Algorithms
de Sedgewick e Wayne

public class LinearProbingHashST< Key, Value>
{
   private int N;
   private int M = 16;
   private Key[] keys;
   private Value[] vals;

   public LinearProbingHashST( ) {
      keys = (Key[]) new Object[M];
      vals = (Value[]) new Object[M];
   }

   private int hash( Key key) { 
      return (key.hashCode( ) & 0x7fffffff) % M; 
   }

   private void resize( int cap) {
      LinearProbingHashST< Key, Value> t;
      t = new LinearProbingHashST< Key, Value>( cap);
      for (int i = 0; i < M; i++)
         if (keys[i] != null)
            t.put( keys[i], vals[i]);
      keys = t.keys;
      vals = t.vals;
      M = t.M;
   }

   public void put( Key key, Value val) {
      if (N >= M/2) resize(2*M);
      int i;
      for (i = hash( key); keys[i] != null; i = (i+1) % M)
         if (keys[i].equals( key)) { 
            vals[i] = val; 
            return; 
         }
      keys[i] = key;
      vals[i] = val;
      N++;
   }

   public Value get( Key key) {
      int i;
      for (i = hash( key); keys[i] != null; i = (i+1) % M)
         if (keys[i].equals( key))
            return vals[i];
      return null;
   }
}

Código adaptado de Algorithms, 4th.ed. (p.470) de Sedgewick e Wayne

O tema dessas notas é o mesma de boa parte da Ciência/Engenharia da Computação:  a construção de programas rápidos, programas que resolvem problemas de maneira eficiente (ou seja, sem desperdício de tempo).

O segredo de muitos programas rápidos está na maneira como seus dados são organizados durante o processamento, ou seja, na estrutura de dados (data structure) empregada pelo programa. Muitas vezes, a melhor maneira de organizar os dados não é óbvia nem simples. Mas uma boa estrutura de dados tem um efeito dramático sobre a velocidade do programa. (É o caso, por exemplo, da estrutura conhecida como árvore rubro negra.)

O estudo de boas estruturas de dados é o assunto central destas notas.  Isso envolve, em particular, o estudo de algoritmos para a criação e manipulação dessas estruturas.  Assim,  o título deste sítio poderia ser Algoritmos e Estruturas de Dados.

Conteúdo deste sítio:

Pré-requisito: Supõe-se que o leitor já teve um curso de introdução à programação e um curso de projeto de algoritmos.

 


Outros assuntos:   Projeto de Algoritmos em C  |  Livro Algoritmos em C  |  Algorithms Design in C  |  Desenvolvimento de Algoritmos  |  Literate Programming & CWEB  |  O que é uma prova?  |  Uma Introdução Sucinta à Teoria dos Grafos  |  Exercícios de Teoria dos Grafos  |  Graph Theory Exercises  |  Digrafos  |  Algoritmos em Grafos com Stanford GraphBase  |  Algoritmos para Grafos via Sedgewick  |  Teoria dos Grafos via Diestel  |  Análise de Algoritmos  |  Minicurso de Análise de Algoritmos  |  Algoritmos de Programação Linear  |  Otimização Combinatória  |  Algoritmos de Aproximação