javascript-algorithms

Estrutura de Dados e Algoritmos em JavaScript

Build Status codecov

Este repositório contém exemplos baseados em JavaScript de muitos algoritmos e estruturas de dados populares.

Cada algoritmo e estrutura de dado possui seu próprio README com explicaçÔes relacionadas e links para leitura adicional (incluindo vídeos para YouTube)

Leia isto em outros idiomas: English çź€äœ“äž­æ–‡, çčé«”äž­æ–‡, 한ꔭ얎, æ—„æœŹèȘž, Polski, Français, Español

Data Structures

Uma estrutura de dados é uma maneira particular de organizar e armazenar dados em um computador para que ele possa ser acessado e modificado de forma eficiente. Mais precisamente, uma estrutura de dados é uma coleção de dados valores, as relaçÔes entre eles e as funçÔes ou operaçÔes que podem ser aplicadas a os dados.

B - Iniciante, A - Avançado

Algoritmos

Um algoritmo Ă© uma especificação inequĂ­voca de como resolver uma classe de problemas. Isto Ă© um conjunto de regras que define precisamente uma sequĂȘncia de operaçÔes.

B - Iniciante, A - Avançado

Algoritmos por TĂłpico

Algoritmos por Paradigma

Um paradigma algorĂ­tmico Ă© um mĂ©todo ou abordagem genĂ©rica subjacente ao design de uma classe de algoritmos. É uma abstração maior do que a noção de um algoritmo, assim como algoritmo Ă© uma abstração maior que um programa de computador.

Como usar este repositĂłrio

Instalar todas as dependĂȘncias

npm install

Executar o ESLint

VocĂȘ pode querer executĂĄ-lo para verificar a qualidade do cĂłdigo.

npm run lint

Execute todos os testes

npm test

Executar testes por nome

npm test -- 'LinkedList'

Parque infantil

VocĂȘ pode brincar com estruturas de dados e algoritmos em ./src/playground/playground.js arquivar e escrever testes para isso em ./src/playground/__test__/playground.test.js.

Em seguida, basta executar o seguinte comando para testar se o cĂłdigo do seu playground funciona conforme o esperado:

npm test -- 'playground'

Informação Ăștil

ReferĂȘncias

▶ Estruturas de dados e algoritmos no YouTube

Notação Big O

Ordem de crescimento dos algoritmos especificados em notação Big O.

Notação Big-O

Fonte: Notação Big-O dicas.

Abaixo estå a lista de algumas das notaçÔes Big O mais usadas e suas comparaçÔes de desempenho em relação aos diferentes tamanhos dos dados de entrada.

Notação Big-O Cålculos para 10 elementos Cålculos para 100 elementos Cålculos para 1000 elementos
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

Complexidade de operaçÔes de estrutura de dados

estrutura de dados Acesso Busca Inserção Eliminação comentårios
Array 1 n n n  
Stack n n 1 1  
Queue n n 1 1  
Linked List n n 1 1  
Hash Table - n n n Em caso de uma função hash perfeita, os custos seriam O (1)
Binary Search Tree n n n n No caso de custos de ĂĄrvore equilibrados seria O (log (n))
B-Tree log(n) log(n) log(n) log(n)  
Red-Black Tree log(n) log(n) log(n) log(n)  
AVL Tree log(n) log(n) log(n) log(n)  
Bloom Filter - 1 1 - Falsos positivos sĂŁo possĂ­veis durante a pesquisa

Array Sorting Algorithms Complexity

Nome Melhor Média Pior Mémoria Eståvel comentårios
Bubble sort n n2 n2 1 Sim  
Insertion sort n n2 n2 1 Sim  
Selection sort n2 n2 n2 1 Não  
Heap sort n log(n) n log(n) n log(n) 1 Não  
Merge sort n log(n) n log(n) n log(n) n Sim  
Quick sort n log(n) n log(n) n2 log(n) Não O Quicksort geralmente é feito no local com o espaço de pilha O O(log(n)) stack space
Shell sort n log(n) depende da sequĂȘncia de lacunas n (log(n))2 1 NĂŁo  
Counting sort n + r n + r n + r n + r Sim r - maior nĂșmero na matriz
Radix sort n * k n * k n * k n + k Sim k - comprimento da chave mais longa