Skip to content

graxz/algorithms

Repository files navigation

Projeto de estudo de Algoritmos e Estruturas de Dados

Descrição

Este projeto tem como objetivo o estudo de algoritmos e estruturas de dados em Javascript.

Estruturas de Dados

Pilha

Pilhas são uma coleção ordenada de itens que segue o principio (LIFO) Last In First Out, ou seja, o ultimo elemento a entrar é o primeiro a sair. As operações básicas de uma pilha são: push (adicionar um elemento), pop (remover um elemento) e peek (retornar o elemento do topo da pilha).

Explicação grafica de como funciona uma pilha: image

Fila

Filas são uma coleção ordenada de itens que segue o principio (FIFO) First In First Out, ou seja, o primeiro elemento a entrar é o primeiro a sair. As operações básicas de uma fila são: enqueue (adicionar um elemento), dequeue (remover um elemento) e peek (retornar o elemento do topo da fila).

Explicação grafica de como funciona uma fila: image

Fila com Prioridade

Filas são uma coleção ordenada de itens que segue o principio (FIFO) First In First Out, ou seja, o primeiro elemento a entrar é o primeiro a sair. As operações básicas de uma fila são: enqueue (adicionar um elemento), dequeue (remover um elemento) e peek (retornar o elemento do topo da fila). Já as filas com prioridade são filas que possuem um valor de prioridade associado a cada elemento, e os elementos com maior prioridade são atendidos primeiro.

Explicação grafica de como funciona uma fila com prioridade: image

Lista Ligada

Listas Ligadas são uma coleção de itens ordenados que seguem o principio (LIFO) Last In First Out, ou seja, o ultimo elemento a entrar é o primeiro a sair. As operações básicas de uma lista ligada são: append (adicionar um elemento no final da lista), prepend (adicionar um elemento no inicio da lista), insert (adicionar um elemento em uma posição especifica da lista), remove (remover um elemento da lista) e search (retornar a posição de um elemento na lista).

Explicação grafica de como funciona uma lista ligada: image

Lista Duplamente Ligada

Listas duplamente ligadas são uma coleção de itens ordenados que seguem o principio (LIFO) Last In First Out, ou seja, o ultimo elemento a entrar é o primeiro a sair. As operações básicas de uma lista duplamente ligada são: append (adicionar um elemento no final da lista), prepend (adicionar um elemento no inicio da lista), insert (adicionar um elemento em uma posição especifica da lista), remove (remover um elemento da lista) e search (retornar a posição de um elemento na lista). A diferença entre uma lista duplamente ligada e uma lista ligada é que na lista duplamente ligada cada elemento possui uma referencia para o elemento anterior e para o elemento posterior.

Explicação grafica de como funciona uma lista duplamente ligada: image

Lista Circular Ligada

Listas circulares ligadas são uma coleção de itens ordenados que seguem o principio (LIFO) Last In First Out, ou seja, o ultimo elemento a entrar é o primeiro a sair. As operações básicas de uma lista circulares ligada são: append (adicionar um elemento no final da lista), prepend (adicionar um elemento no inicio da lista), insert (adicionar um elemento em uma posição especifica da lista), remove (remover um elemento da lista) e search (retornar a posição de um elemento na lista). A diferença entre uma lista circular ligada e uma lista ligada é que na lista circular ligada o ultimo elemento possui uma referencia para o primeiro elemento.

Explicação grafica de como funciona uma lista circular ligada: image

Conjunto

Conjuntos são uma coleção de itens não ordenados que não aceitam itens duplicados. As operações básicas de um conjunto são: add (adicionar um elemento), remove (remover um elemento), union (retornar a união de dois conjuntos), intersection (retornar a interseção de dois conjuntos), difference (retornar a diferença de dois conjuntos) e subset (verificar se um conjunto é subconjunto de outro conjunto).

Explicação grafica de como pode funcionar um conjunto:

União

União de dois conjuntos

image

Intersecção

Interseção de dois conjuntos

image

Diferenças

Diferença de dois conjuntos

image

Subconjunto

Subconjunto de outro conjunto

image

Tabela Hash

Uma tabela hash é uma estrutura de dados que associa chaves de pesquisa a valores, de modo que a busca dos dados se dê de forma rápida e direta. As operações básicas de uma tabela hash são: put (adicionar um elemento na tabela), remove (remover um elemento da tabela), get (retornar um elemento da tabela) e contains (verificar se um elemento existe na tabela).

Como funciona a tabela hash simples?

  simpleHash(data) {
    let total = 0;
    for (let i = 0; i < data.length; i++) {
      total += data.charCodeAt(i);
    }
      return total % this.table.length;
  }

A função simpleHash é uma função simples de hash que recebe uma string e retorna um valor inteiro que será usado como indice para a tabela hash. A função percorre a string e soma o valor de cada caractere na variavel total e retorna o resto da divisão de total pelo tamanho da tabela hash.

Como funciona a tabela hash com uma melhor distribuição?

  betterHash(data) {
    const H = 37;
    let total = 0;
    for (let i = 0; i < data.length; i++) {
      total += H * total + data.charCodeAt(i);
    }
    total = total % this.table.length;
    if (total < 0) {
      total += this.table.length - 1;
    }
    return parseInt(total);
  }

A função betterHash é uma função de hash que recebe uma string e retorna um valor inteiro que será usado como indice para a tabela hash. A função percorre a string e multiplica o valor de total por 37 e soma o valor de cada caractere na variavel total e retorna o resto da divisão de total pelo tamanho da tabela hash. A função betterHash é mais eficiente que a função simpleHash pois ela distribui melhor os valores na tabela hash.

Explicação grafica de como funciona uma tabela hash: image

Algoritmos

Busca linear

A busca linear é um algoritmo de busca que percorre uma lista de itens e verifica se o item buscado está na lista, a busca linear é um algoritmo de busca simples e ineficiente pois ele percorre toda a lista até encontrar o item buscado. As operações básicas de uma busca linear são: search (retornar a posição de um elemento na lista).

Explicação grafica de como funciona uma busca linear:

image

Busca binária

A busca binaria é um algoritmo de busca que percorre uma lista de itens e verifica se o item buscado está na lista, a busca binaria é um algoritmo de busca eficiente pois ele divide a lista em duas partes e verifica se o item buscado está na primeira ou segunda parte da lista, se o item buscado estiver na primeira parte da lista ele descarta a segunda parte da lista e repete o processo até encontrar o item buscado. As operações básicas de uma busca binaria são: search (retornar a posição de um elemento na lista).

Explicação grafica de como funciona uma busca binaria:

image

Busca por salto

A busca por salto é um algoritmo de busca que percorre uma lista de itens e verifica se o item buscado está na lista, a busca por salto é um algoritmo de busca eficiente pois ele encontra o intervalo onde o item buscado está e faz uma busca linear nesse intervalo. As operações básicas de uma busca por salto são: search (retornar a posição de um elemento na lista).

Explicação grafica de como funciona uma busca por salto:

image

Busca ternária

A busca ternaria é um algoritmo de busca que percorre uma lista de itens e verifica se o item buscado está na lista, a busca ternaria é um algoritmo de busca eficiente pois ele divide a lista em três partes e verifica se o item buscado está na primeira, segunda ou terceira parte da lista, se o item buscado estiver na primeira parte da lista ele descarta a segunda e terceira parte da lista e repete o processo até encontrar o item buscado. As operações básicas de uma busca ternaria são: search (retornar a posição de um elemento na lista).

Explicação grafica de como funciona uma busca ternaria:

image

About

Estudo de algoritmos e estruturas de dados.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published