Skip to content

Commit ed99f9d

Browse files
themgoncalvestrekhleb
authored andcommittedApr 16, 2019
Adds Portuguese (pt-BR) translation (trekhleb#340)
* create portuguese translations * renames `Lista Ligada` to `Lista Encadeada` * revert changes on package-lock.json
1 parent 1520533 commit ed99f9d

35 files changed

+1111
-63
lines changed
 

‎README.pt-BR.md

+17-17
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,23 @@ os dados.
2929

3030
`B` - Iniciante, `A` - Avançado
3131

32-
* `B` [Linked List](src/data-structures/linked-list)
33-
* `B` [Doubly Linked List](src/data-structures/doubly-linked-list)
34-
* `B` [Queue](src/data-structures/queue)
35-
* `B` [Stack](src/data-structures/stack)
36-
* `B` [Hash Table](src/data-structures/hash-table)
37-
* `B` [Heap](src/data-structures/heap)
38-
* `B` [Priority Queue](src/data-structures/priority-queue)
39-
* `A` [Trie](src/data-structures/trie)
40-
* `A` [Tree](src/data-structures/tree)
41-
* `A` [Binary Search Tree](src/data-structures/tree/binary-search-tree)
42-
* `A` [AVL Tree](src/data-structures/tree/avl-tree)
43-
* `A` [Red-Black Tree](src/data-structures/tree/red-black-tree)
44-
* `A` [Segment Tree](src/data-structures/tree/segment-tree) - com exemplos de consultas min / max / sum range
45-
* `A` [Fenwick Tree](src/data-structures/tree/fenwick-tree) (Árvore indexada binária)
46-
* `A` [Graph](src/data-structures/graph) (ambos dirigidos e não direcionados)
47-
* `A` [Disjoint Set](src/data-structures/disjoint-set)
48-
* `A` [Bloom Filter](src/data-structures/bloom-filter)
32+
* `B` [Lista Encadeada (Linked List)](src/data-structures/linked-list.pt-BR)
33+
* `B` [Lista Duplamente Ligada (Doubly Linked List)](src/data-structures/doubly-linked-list.pt-BR)
34+
* `B` [Fila (Queue)](src/data-structures/queue.pt-BR)
35+
* `B` [Stack](src/data-structures/stack.pt-BR)
36+
* `B` [Tabela de Hash (Hash Table)](src/data-structures/hash-table.pt-BR)
37+
* `B` [Heap](src/data-structures/heap.pt-BR)
38+
* `B` [Fila de Prioridade (Priority Queue)](src/data-structures/priority-queue.pt-BR)
39+
* `A` [Trie](src/data-structures/trie.pt-BR)
40+
* `A` [Árvore (Tree)](src/data-structures/tree.pt-BR)
41+
* `A` [Árvore de Pesquisa Binária (Binary Search Tree)](src/data-structures/tree/binary-search-tree.pt-BR)
42+
* `A` [Árvore AVL (AVL Tree)](src/data-structures/tree/avl-tree.pt-BR)
43+
* `A` [Árvore Vermelha-Preta (Red-Black Tree)](src/data-structures/tree/red-black-tree.pt-BR)
44+
* `A` [Árvore de Segmento (Segment Tree)](src/data-structures/tree/segment-tree.pt-BR) - com exemplos de consultas min / max / sum range
45+
* `A` [Árvore Fenwick (Fenwick Tree)](src/data-structures/tree/fenwick-tree.pt-BR) (Árvore indexada binária)
46+
* `A` [Gráfico (Graph)](src/data-structures/graph.pt-BR) (ambos dirigidos e não direcionados)
47+
* `A` [Conjunto Disjuntor (Disjoint Set)](src/data-structures/disjoint-set.pt-BR)
48+
* `A` [Filtro Bloom (Bloom Filter)](src/data-structures/bloom-filter.pt-BR)
4949

5050
## Algoritmos
5151

‎src/data-structures/bloom-filter/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Bloom Filter
22

33
_Read this in other languages:_
4-
[_Русский_](README.ru-RU.md)
4+
[_Русский_](README.ru-RU.md) | [_Português_](README.pt-BR.md)
55

66
A **bloom filter** is a space-efficient probabilistic
77
data structure designed to test whether an element
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Filtro Bloom (Bloom Filter)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_Русский_](README.ru-RU.md)
5+
6+
O **bloom filter** é uma estrutura de dados probabilística
7+
espaço-eficiente designada para testar se um elemento está
8+
ou não presente em um conjunto de dados. Foi projetado para ser
9+
incrivelmente rápido e utilizar o mínimo de memória ao
10+
potencial custo de um falso-positivo. Correspondências
11+
_falsas positivas_ são possíveis, contudo _falsos negativos_
12+
não são - em outras palavras, a consulta retorna
13+
"possivelmente no conjunto" ou "definitivamente não no conjunto".
14+
15+
Bloom propôs a técnica para aplicações onde a quantidade
16+
de entrada de dados exigiria uma alocação de memória
17+
impraticavelmente grande se as "convencionais" técnicas
18+
error-free hashing fossem aplicado.
19+
20+
## Descrição do algoritmo
21+
22+
Um filtro Bloom vazio é um _bit array_ de `m` bits, todos
23+
definidos como `0`. Também deverá haver diferentes funções
24+
de hash `k` definidas, cada um dos quais mapeia e produz hash
25+
para um dos elementos definidos em uma das posições `m` da
26+
_array_, gerando uma distribuição aleatória e uniforme.
27+
Normalmente, `k` é uma constante, muito menor do que `m`,
28+
pelo qual é proporcional ao número de elements a ser adicionado;
29+
a escolha precisa de `k` e a constante de proporcionalidade de `m`
30+
são determinadas pela taxa de falsos positivos planejado do filtro.
31+
32+
Aqui está um exemplo de um filtro Bloom, representando o
33+
conjunto `{x, y, z}`. As flechas coloridas demonstram as
34+
posições no _bit array_ em que cada elemento é mapeado.
35+
O elemento `w` não está definido dentro de `{x, y, z}`,
36+
porque este produz hash para uma posição de array de bits
37+
contendo `0`. Para esta imagem: `m = 18` e `k = 3`.
38+
39+
![Bloom Filter](https://upload.wikimedia.org/wikipedia/commons/a/ac/Bloom_filter.svg)
40+
41+
## Operações
42+
43+
Existem duas operações principais que o filtro Bloom pode operar:
44+
_inserção_ e _pesquisa_. A pesquisa pode resultar em falsos
45+
positivos. Remoção não é possível.
46+
47+
Em outras palavras, o filtro pode receber itens. Quando
48+
vamos verificar se um item já foi anteriormente
49+
inserido, ele poderá nos dizer "não" ou "talvez".
50+
51+
Ambas as inserções e pesquisas são operações `O(1)`.
52+
53+
## Criando o filtro
54+
55+
Um filtro Bloom é criado ao alocar um certo tamanho.
56+
No nosso exemplo, nós utilizamos `100` como tamanho padrão.
57+
Todas as posições são initializadas como `false`.
58+
59+
### Inserção
60+
61+
Durante a inserção, um número de função hash, no nosso caso `3`
62+
funções de hash, são utilizadas para criar hashes de uma entrada.
63+
Estas funções de hash emitem saída de índices. A cada índice
64+
recebido, nós simplismente trocamos o valor de nosso filtro
65+
Bloom para `true`.
66+
67+
### Pesquisa
68+
69+
Durante a pesquisa, a mesma função de hash é chamada
70+
e usada para emitir hash da entrada. Depois nós checamos
71+
se _todos_ os indices recebidos possuem o valor `true`
72+
dentro de nosso filtro Bloom. Caso _todos_ possuam o valor
73+
`true`, nós sabemos que o filtro Bloom pode ter tido
74+
o valor inserido anteriormente.
75+
76+
Contudo, isto não é certeza, porque é possível que outros
77+
valores anteriormente inseridos trocaram o valor para `true`.
78+
Os valores não são necessariamente `true` devido ao ítem
79+
atualmente sendo pesquisado. A certeza absoluta é impossível,
80+
a não ser que apenas um item foi inserido anteriormente.
81+
82+
Durante a checagem do filtro Bloom para índices retornados
83+
pela nossa função de hash, mesmo que apenas um deles possua
84+
valor como `false`, nós definitivamente sabemos que o ítem
85+
não foi anteriormente inserido.
86+
87+
## Falso Positivos
88+
89+
A probabilidade de falso positivos é determinado por
90+
três fatores: o tamanho do filtro de Bloom, o número de
91+
funções de hash que utilizados, e o número de itens que
92+
foram inseridos dentro do filtro.
93+
94+
A formula para calcular a probabilidade de um falso positivo é:
95+
96+
( 1 - e <sup>-kn/m</sup> ) <sup>k</sup>
97+
98+
`k` = número de funções de hash
99+
100+
`m` = tamanho do filtro
101+
102+
`n` = número de itens inserido
103+
104+
Estas variáveis, `k`, `m` e `n`, devem ser escolhidas baseado
105+
em quanto aceitável são os falsos positivos. Se os valores
106+
escolhidos resultam em uma probabilidade muito alta, então
107+
os valores devem ser ajustados e a probabilidade recalculada.
108+
109+
## Aplicações
110+
111+
Um filtro Bloom pode ser utilizado em uma página de Blog.
112+
Se o objetivo é mostrar aos leitores somente os artigos
113+
em que eles nunca viram, então o filtro Bloom é perfeito
114+
para isso. Ele pode armazenar hashes baseados nos artigos.
115+
Depois que um usuário lê alguns artigos, eles podem ser
116+
inseridos dentro do filtro. Na próxima vez que o usuário
117+
visitar o Blog, aqueles artigos poderão ser filtrados (eliminados)
118+
do resultado.
119+
120+
Alguns artigos serão inevitavelmente filtrados (eliminados)
121+
por engano, mas o custo é aceitável. Tudo bem se um usuário nunca
122+
ver alguns poucos artigos, desde que tenham outros novos
123+
para ver toda vez que eles visitam o site.
124+
125+
126+
## Referências
127+
128+
- [Wikipedia](https://en.wikipedia.org/wiki/Bloom_filter)
129+
- [Bloom Filters by Example](http://llimllib.github.io/bloomfilter-tutorial/)
130+
- [Calculating False Positive Probability](https://hur.st/bloomfilter/?n=4&p=&m=18&k=3)
131+
- [Bloom Filters on Medium](https://blog.medium.com/what-are-bloom-filters-1ec2a50c68ff)
132+
- [Bloom Filters on YouTube](https://www.youtube.com/watch?v=bEmBh1HtYrw)

‎src/data-structures/disjoint-set/README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Disjoint Set
22

33
_Read this in other languages:_
4-
[_Русский_](README.ru-RU.md)
4+
[_Русский_](README.ru-RU.md) | [_Português_](README.pt-BR.md)
5+
56

67
**Disjoint-set** data structure (also called a union–find data structure or merge–find set) is a data
78
structure that tracks a set of elements partitioned into a number of disjoint (non-overlapping) subsets.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Conjunto Disjuntor (Disjoint Set)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_Русский_](README.ru-RU.md)
5+
6+
**Conjunto Disjuntor**
7+
8+
**Conjunto Disjuntor** é uma estrutura de dados (também chamado de
9+
estrutura de dados de union–find ou merge–find) é uma estrutura de dados
10+
que rastreia um conjunto de elementos particionados em um número de
11+
subconjuntos separados (sem sobreposição).
12+
Ele fornece operações de tempo quase constante (limitadas pela função
13+
inversa de Ackermann) para *adicionar novos conjuntos*, para
14+
*mesclar/fundir conjuntos existentes* e para *determinar se os elementos
15+
estão no mesmo conjunto*.
16+
Além de muitos outros usos (veja a seção Applications), conjunto disjuntor
17+
desempenham um papel fundamental no algoritmo de Kruskal para encontrar a
18+
árvore geradora mínima de um gráfico (graph).
19+
20+
21+
![disjoint set](https://upload.wikimedia.org/wikipedia/commons/6/67/Dsu_disjoint_sets_init.svg)
22+
23+
*MakeSet* cria 8 singletons.
24+
25+
![disjoint set](https://upload.wikimedia.org/wikipedia/commons/a/ac/Dsu_disjoint_sets_final.svg)
26+
27+
Depois de algumas operações de *Uniões*, alguns conjuntos são agrupados juntos.
28+
29+
## Referências
30+
31+
- [Wikipedia](https://en.wikipedia.org/wiki/Disjoint-set_data_structure)
32+
- [By Abdul Bari on YouTube](https://www.youtube.com/watch?v=wU6udHRIkcc&index=14&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

‎src/data-structures/doubly-linked-list/README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Doubly Linked List
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md),
6-
[_日本語_](README.ja-JP.md)
4+
[_Русский_](README.ru-RU.md) | [_简体中文_](README.zh-CN.md) | [_日本語_](README.ja-JP.md) | [_Português_](README.pt-BR.md)
75

86
In computer science, a **doubly linked list** is a linked data structure that
97
consists of a set of sequentially linked records called nodes. Each node contains
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# Lista Duplamente Ligada (Doubly Linked List)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, uma **lista duplamente conectada** é uma estrutura
7+
de dados vinculada que se consistem em um conjunto de registros
8+
sequencialmente vinculados chamados de nós (nodes). Em cada nó contém dois
9+
campos, chamados de ligações, que são referenciados ao nó anterior e posterior
10+
de uma sequência de nós. O começo e o fim dos nós anteriormente e posteiormente
11+
ligados, respectiviamente, apontam para algum tipo de terminação, normalmente
12+
um nó sentinela ou nulo, para facilitar a travessia da lista. Se existe
13+
somente um nó sentinela, então a lista é ligada circularmente através do nó
14+
sentinela. Ela pode ser conceitualizada como duas listas individualmente ligadas
15+
e formadas a partir dos mesmos itens, mas em ordem sequencial opostas.
16+
17+
![Doubly Linked List](https://upload.wikimedia.org/wikipedia/commons/5/5e/Doubly-linked-list.svg)
18+
19+
Os dois nós ligados permitem a travessia da lista em qualquer direção.
20+
Enquanto adicionar ou remover um nó de uma lista duplamente vinculada requer
21+
alterar mais ligações (conexões) do que em uma lista encadeada individualmente
22+
(singly linked list), as operações são mais simples e potencialmente mais
23+
eficientes (para nós que não sejam nós iniciais) porque não há necessidade
24+
de se manter rastreamento do nó anterior durante a travessia ou não há
25+
necessidade de percorrer a lista para encontrar o nó anterior, para que
26+
então sua ligação/conexão possa ser modificada.
27+
28+
## Pseudocódigo para Operações Básicas
29+
30+
### Inserir
31+
32+
```text
33+
Add(value)
34+
Pre: value is the value to add to the list
35+
Post: value has been placed at the tail of the list
36+
n ← node(value)
37+
if head = ø
38+
head ← n
39+
tail ← n
40+
else
41+
n.previous ← tail
42+
tail.next ← n
43+
tail ← n
44+
end if
45+
end Add
46+
```
47+
48+
### Deletar
49+
50+
```text
51+
Remove(head, value)
52+
Pre: head is the head node in the list
53+
value is the value to remove from the list
54+
Post: value is removed from the list, true; otherwise false
55+
if head = ø
56+
return false
57+
end if
58+
if value = head.value
59+
if head = tail
60+
head ← ø
61+
tail ← ø
62+
else
63+
head ← head.next
64+
head.previous ← ø
65+
end if
66+
return true
67+
end if
68+
n ← head.next
69+
while n = ø and value !== n.value
70+
n ← n.next
71+
end while
72+
if n = tail
73+
tail ← tail.previous
74+
tail.next ← ø
75+
return true
76+
else if n = ø
77+
n.previous.next ← n.next
78+
n.next.previous ← n.previous
79+
return true
80+
end if
81+
return false
82+
end Remove
83+
```
84+
85+
### Travessia reversa
86+
87+
```text
88+
ReverseTraversal(tail)
89+
Pre: tail is the node of the list to traverse
90+
Post: the list has been traversed in reverse order
91+
n ← tail
92+
while n = ø
93+
yield n.value
94+
n ← n.previous
95+
end while
96+
end Reverse Traversal
97+
```
98+
99+
## Complexidades
100+
101+
## Complexidade de Tempo
102+
103+
| Acesso | Pesquisa | Inserção | Remoção |
104+
| :-------: | :---------: | :------: | :------: |
105+
| O(n) | O(n) | O(1) | O(n) |
106+
107+
### Complexidade de Espaço
108+
109+
O(n)
110+
111+
## Referências
112+
113+
- [Wikipedia](https://en.wikipedia.org/wiki/Doubly_linked_list)
114+
- [YouTube](https://www.youtube.com/watch?v=JdQeNxWCguQ&t=7s&index=72&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

‎src/data-structures/graph/README.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
# Graph
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md)
4+
[_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md) | [_Português_](README.pt-BR.md)
65

76
In computer science, a **graph** is an abstract data type
87
that is meant to implement the undirected graph and
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Gráfico (Graph)
2+
3+
_Read this in other languages:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, um **gráfico** é uma abstração de estrutura
7+
de dados que se destina a implementar os conceitos da matemática de
8+
gráficos direcionados e não direcionados, especificamente o campo da
9+
teoria dos gráficos.
10+
11+
Uma estrutura de dados gráficos consiste em um finito (e possivelmente
12+
mutável) conjunto de vértices, nós ou pontos, juntos com um
13+
conjunto de pares não ordenados desses vértices para um gráfico não
14+
direcionado ou para um conjunto de pares ordenados para um gráfico
15+
direcionado. Esses pares são conhecidos como arestas, arcos
16+
ou linhas diretas para um gráfico não direcionado e como setas,
17+
arestas direcionadas, arcos direcionados ou linhas direcionadas
18+
para um gráfico direcionado.
19+
20+
Os vértices podem fazer parte a estrutura do gráfico, ou podem
21+
ser entidades externas representadas por índices inteiros ou referências.
22+
23+
![Graph](https://www.tutorialspoint.com/data_structures_algorithms/images/graph.jpg)
24+
25+
## Referências
26+
27+
- [Wikipedia](https://en.wikipedia.org/wiki/Graph_(abstract_data_type))
28+
- [Introduction to Graphs on YouTube](https://www.youtube.com/watch?v=gXgEDyodOJU&index=9&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)
29+
- [Graphs representation on YouTube](https://www.youtube.com/watch?v=k1wraWzqtvQ&index=10&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

‎src/data-structures/hash-table/README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Hash Table
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md),
6-
[_日本語_](README.ja-JP.md)
4+
[_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md) | [_日本語_](README.ja-JP.md) | [_Português_](README.pt-BR.md)
75

86
In computing, a **hash table** (hash map) is a data
97
structure which implements an *associative array*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Tabela de Hash (Hash Table)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, uma **tabela de hash** (hash map) é uma
7+
estrutura de dados pela qual implementa um tipo de dado abstrado de
8+
*array associativo*, uma estrutura que pode *mapear chaves para valores*.
9+
Uma tabela de hash utiliza uma *função de hash* para calcular um índice
10+
em um _array_ de buckets ou slots, a partir do qual o valor desejado
11+
pode ser encontrado.
12+
13+
Idealmente, a função de hash irá atribuir a cada chave a um bucket único,
14+
mas a maioria dos designs de tabela de hash emprega uma função de hash
15+
imperfeita, pela qual poderá causar colisões de hashes onde a função de hash
16+
gera o mesmo índice para mais de uma chave.Tais colisões devem ser
17+
acomodados de alguma forma.
18+
19+
![Hash Table](https://upload.wikimedia.org/wikipedia/commons/7/7d/Hash_table_3_1_1_0_1_0_0_SP.svg)
20+
21+
Colisão de hash resolvida por encadeamento separado.
22+
23+
![Hash Collision](https://upload.wikimedia.org/wikipedia/commons/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg)
24+
25+
## Referências
26+
27+
- [Wikipedia](https://en.wikipedia.org/wiki/Hash_table)
28+
- [YouTube](https://www.youtube.com/watch?v=shs0KM3wKv8&index=4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

‎src/data-structures/heap/README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Heap (data-structure)
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md),
6-
[_日本語_](README.ja-JP.md)
4+
[_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md) | [_日本語_](README.ja-JP.md) | [_Português_](README.pt-BR.md)
75

86
In computer science, a **heap** is a specialized tree-based
97
data structure that satisfies the heap property described
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Heap (estrutura de dados)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, um **heap** é uma estrutura de dados
7+
baseada em uma árvore especializada que satisfaz a propriedade _heap_ descrita abaixo.
8+
9+
Em um *heap mínimo* (min heap), caso `P` é um nó pai de `C`, então a chave
10+
(o valor) de `P` é menor ou igual a chave de `C`.
11+
12+
![MinHeap](https://upload.wikimedia.org/wikipedia/commons/6/69/Min-heap.png)
13+
14+
Em uma *heap máximo* (max heap), a chave de `P` é maior ou igual
15+
a chave de `C`.
16+
17+
![Heap](https://upload.wikimedia.org/wikipedia/commons/3/38/Max-Heap.svg)
18+
19+
O nó no "topo" do _heap_, cujo não possui pais, é chamado de nó raiz.
20+
21+
## References
22+
23+
- [Wikipedia](https://en.wikipedia.org/wiki/Heap_(data_structure))
24+
- [YouTube](https://www.youtube.com/watch?v=t0Cq6tVNRBA&index=5&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

‎src/data-structures/linked-list/README.md

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
# Linked List
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md),
6-
[_Português_](README.pt-BR.md),
7-
[_日本語_](README.ja-JP.md)
4+
[_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md) | [_日本語_](README.ja-JP.md) | [_Português_](README.pt-BR.md)
85

96
In computer science, a **linked list** is a linear collection
107
of data elements, in which linear order is not given by

‎src/data-structures/linked-list/README.pt-BR.md

+34-18
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
1-
# Lista encadeada
2-
3-
Em ciência da computação, uma **lista encadeada** é uma coleção linear
4-
de elementos de dados, em que a ordem linear não é fornecida pelo seu
5-
posicionamento físico na memória. Em vez disso, cada elemento aponta para o próximo.
6-
É uma estrutura de dados consistente de um grupo de nós que juntos
7-
representam uma sequência. De forma simples, cada nó é composto de dado
8-
e uma referência (em outras palavras, um link) para o próximo nó na sequência.
9-
Essa estrutura permite uma inserção eficiente ou uma remoção de elementos
10-
apartir de qualquer posição na sequência durante a iteração. Variantes
11-
mais complexas adicionam links adicionais, permitindo inserção eficiente ou remoção
12-
arbitrária de referências do elemento. Uma desvantagem da lista encadeada é que o tempo de acesso é linear (e dificulta para pipeline) Acesso rápido, assim como acesso randômico, não é viável. Arrays têm um melhor cache de localidade quando comparado com listas encadeadas.
1+
# Lista Encadeada (Linked List)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, uma **lista encadeada** é uma coleção linear de
7+
elementos de dado, em que a ordem linear não é dada por sua locação
8+
física na memória. Em vez disso, cada elemento aponta para o próximo.
9+
É uma estrutura de dados consistindo em um grupo de nós
10+
que juntos representam uma sequência. Sob a forma mais simples,
11+
cada nó é composto de dados e uma referência (em outras palavras,
12+
uma ligação/conexão) para o próximo nó na sequência. Esta estrutua
13+
permite uma eficiente inserção e remoção de elementos de qualquer
14+
posição na sequência durante a iteração.
15+
16+
Variantes mais complexas adicionam ligações adicionais, permitindo
17+
uma inserção ou remoção mais eficiente a partir de referências
18+
de elementos arbitrárias. Uma desvantagem das listas vinculadas
19+
é que o tempo de acesso é linear (e difícil de inserir em uma
20+
pipeline). Acessos mais rápidos, como acesso aleatório, não é viável.
21+
Arrays possuem uma melhor localização de cache em comparação
22+
com lista encadeada (linked list).
1323

1424
![Linked List](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg)
1525

@@ -45,7 +55,7 @@ Prepend(value)
4555
end Prepend
4656
```
4757

48-
### Busca
58+
### Pesquisa
4959

5060
```text
5161
Contains(head, value)
@@ -63,7 +73,7 @@ Contains(head, value)
6373
end Contains
6474
```
6575

66-
### Deleção
76+
### Remoção
6777

6878
```text
6979
Remove(head, value)
@@ -97,7 +107,7 @@ Remove(head, value)
97107
end Remove
98108
```
99109

100-
### Traverse
110+
### Travessia
101111

102112
```text
103113
Traverse(head)
@@ -111,7 +121,7 @@ Traverse(head)
111121
end Traverse
112122
```
113123

114-
### Traverse in Reverse
124+
### Travessia Reversa
115125

116126
```text
117127
ReverseTraversal(head, tail)
@@ -134,13 +144,19 @@ end ReverseTraversal
134144

135145
## Complexidades
136146

137-
### Tempo de complexidade
147+
### Complexidade de Tempo
138148

149+
<<<<<<< HEAD
139150
| Acesso | Busca | Inserção | Deleção |
140151
| :----: | :---: | :------: | :-----: |
141152
| O(n) | O(n) | O(1) | O(n) |
153+
=======
154+
| Acesso | Pesquisa | Inserção | Remoção |
155+
| :----: | :------: | :------: | :-----: |
156+
| O(n) | O(n) | O(1) | O(n) |
157+
>>>>>>> create portuguese translations
142158
143-
### Spaço de complexidade
159+
### Complexidade de Espaçø
144160

145161
O(n)
146162

‎src/data-structures/priority-queue/README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Priority Queue
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md),
6-
[_日本語_](README.ja-JP.md)
4+
[_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md) | [_日本語_](README.ja-JP.md) | [_Português_](README.pt-BR.md)
75

86
In computer science, a **priority queue** is an abstract data type
97
which is like a regular queue or stack data structure, but where
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Fila de Prioridade (Priority Queue)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, uma **fila de prioridade** é um tipo de dados
7+
abastrato que é como uma fila regular (regular queue) ou estrutura de
8+
dados de pilha (stack), mas adicionalmente cada elemento possui uma
9+
"prioridade" associada.
10+
11+
Em uma fila de prioridade, um elemento com uma prioridade alta é servido
12+
antes de um elemento com baixa prioridade. Caso dois elementos posusam a
13+
mesma prioridade, eles serão servidos de acordo com sua ordem na fila.
14+
15+
Enquanto as filas de prioridade são frequentemente implementadas com
16+
pilhas (heaps), elas são conceitualmente distintas das pilhas (heaps).
17+
A fila de prioridade é um conceito abstrato como uma "lista" (list) ou
18+
um "mapa" (map); assim como uma lista pode ser implementada com uma
19+
lista encadeada (liked list) ou um array, a fila de prioridade pode ser
20+
implementada com uma pilha (heap) ou com uima variedade de outros métodos,
21+
como um array não ordenado (unordered array).
22+
23+
## Referências
24+
25+
- [Wikipedia](https://en.wikipedia.org/wiki/Priority_queue)
26+
- [YouTube](https://www.youtube.com/watch?v=wptevk0bshY&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=6)

‎src/data-structures/queue/README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Queue
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md),
6-
[_日本語_](README.ja-JP.md)
4+
[_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md) | [_日本語_](README.ja-JP.md) | [_Português_](README.pt-BR.md)
75

86
In computer science, a **queue** is a particular kind of abstract data
97
type or collection in which the entities in the collection are
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Fila (Queue)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, uma **fila** é um tipo particular de abstração
7+
de tipo de dado ou coleção em que as entidades na coleção são mantidas em
8+
ordem e a causa primária (ou única) de operações na coleção são a
9+
adição de entidades à posição final da coleção, conhecido como enfileiramento
10+
(enqueue) e a remoção de entidades do posição inicial, conhecida como desenfileirar
11+
(dequeue).Isto torna a fila uma estrutura de dados tipo First-In-First-Out (FIFO).
12+
13+
Em uma estrutura de dados FIFO, o primeiro elemento adicionado a fila
14+
será o primeiro a ser removido. Isso é equivalente ao requisito em que uma vez
15+
que um novo elemento é adicionado, todos os elementos que foram adicionados
16+
anteriormente devem ser removidos antes que o novo elemento possa ser removido.
17+
18+
Muitas vezes uma espiada (peek) ou uma operação de frente é iniciada,
19+
retornando o valor do elemento da frente, sem desenfileira-lo. Uma lista é
20+
um exemplo de uma estrutura de dados linear, ou mais abstratamente uma
21+
coleção seqüencial.
22+
23+
24+
Representação de uma file FIFO (first in, first out)
25+
26+
![Queue](https://upload.wikimedia.org/wikipedia/commons/5/52/Data_Queue.svg)
27+
28+
## References
29+
30+
- [Wikipedia](https://en.wikipedia.org/wiki/Queue_(abstract_data_type))
31+
- [YouTube](https://www.youtube.com/watch?v=wjI1WNcIntg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=3&)

‎src/data-structures/stack/README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Stack
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md),
6-
[_日本語_](README.ja-JP.md)
4+
[_简体中文_](README.zh-CN.md), | [_Русский_](README.ru-RU.md) | [_日本語_](README.ja-JP.md) | [_Português_](README.pt-BR.md)
75

86
In computer science, a **stack** is an abstract data type that serves
97
as a collection of elements, with two principal operations:
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Stack
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, um **stack** é uma estrutura de dados abstrata
7+
que serve como uma coleção de elementos com duas operações principais:
8+
9+
* **push**, pela qual adiciona um elemento à coleção, e
10+
* **pop**, pela qual remove o último elemento adicionado.
11+
12+
A ordem em que os elementos saem de um _stack_ dá origem ao seu
13+
nome alternativo, LIFO (last in, first out). Adicionalmente, uma
14+
espiar a operação pode dar acesso ao topo sem modificar o _stack_.
15+
O nome "stack" para este tipo de estrutura vem da analogia de
16+
um conjunto de itens físicos empilhados uns sobre os outros,
17+
o que facilita retirar um item do topo da pilha, enquanto para chegar a
18+
um item mais profundo na pilha pode exigir a retirada de
19+
vários outros itens primeiro.
20+
21+
Representação simples de um tempo de execução de pilha com operações
22+
_push_ e _pop_.
23+
24+
![Stack](https://upload.wikimedia.org/wikipedia/commons/b/b4/Lifo_stack.png)
25+
26+
## Referências
27+
28+
- [Wikipedia](https://en.wikipedia.org/wiki/Stack_(abstract_data_type))
29+
- [YouTube](https://www.youtube.com/watch?v=wjI1WNcIntg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=3&)

‎src/data-structures/tree/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Tree
22

3+
_Read this in other languages:_
4+
[_简体中文_](README.zh-CN.md) | [_Português_](README.pt-BR.md)
5+
36
* [Binary Search Tree](binary-search-tree)
47
* [AVL Tree](avl-tree)
58
* [Red-Black Tree](red-black-tree)
+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Árvore (Tree)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md)
5+
6+
* [Árvore de Pesquisa Binária (Binary Search Tree)](binary-search-tree/README.pt-BR.md)
7+
* [Árvore AVL (AVL Tree)](avl-tree/README.pt-BR.md)
8+
* [Árvore Vermelha-Preta (Red-Black Tree)](red-black-tree/README.pt-BR.md)
9+
* [Árvore de Segmento (Segment Tree)](segment-tree/README.pt-BR.md) - com exemplos de consulta de intervalores min/max/sum
10+
* [Árvorem Fenwick (Fenwick Tree)](fenwick-tree/README.pt-BR.md) (Árvore Binária Indexada / Binary Indexed Tree)
11+
12+
Na ciência da computação, uma **árvore** é uma estrutura de dados
13+
abstrada (ADT) amplamente utilizada - ou uma estrutura de dados
14+
implementando este ADT que simula uma estrutura hierarquica de árvore,
15+
com valor raíz e sub-árvores de filhos com um nó pai, representado
16+
como um conjunto de nós conectados.
17+
18+
Uma estrutura de dados em árvore pode ser definida recursivamente como
19+
(localmente) uma coleção de nós (começando no nó raíz), aonde cada nó
20+
é uma estrutura de dados consistindo de um valor, junto com uma lista
21+
de referências aos nós (os "filhos"), com as restrições de que nenhuma
22+
referência é duplicada e nenhuma aponta para a raiz.
23+
24+
Uma árvore não ordenada simples; neste diagrama, o nó rotulado como `7`
25+
possui dois filhos, rotulados como `2` e `6`, e um pai, rotulado como `2`.
26+
O nó raíz, no topo, não possui nenhum pai.
27+
28+
![Tree](https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_tree.svg)
29+
30+
## Referências
31+
32+
- [Wikipedia](https://en.wikipedia.org/wiki/Tree_(data_structure))
33+
- [YouTube](https://www.youtube.com/watch?v=oSWTXtMglKE&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=8)

‎src/data-structures/tree/avl-tree/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# AVL Tree
22

3+
_Read this in other languages:_
4+
[_Português_](README.pt-BR.md)
5+
36
In computer science, an **AVL tree** (named after inventors
47
Adelson-Velsky and Landis) is a self-balancing binary search
58
tree. It was the first such data structure to be invented.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Árvore AVL (AVL Tree)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md)
5+
6+
Na ciência da computação, uma **árvore AVL** (em homenagem aos
7+
inventores Adelson-Velsky e Landis) é uma árvore de pesquisa
8+
binária auto balanceada. Foi a primeira estrutura de dados a
9+
ser inventada.
10+
Em uma árvore AVL, as alturas de duas sub-árvores filhas
11+
de qualquer nó diferem no máximo em um; se a qualquer momento
12+
diferirem por em mais de um, um rebalanceamento é feito para
13+
restaurar esta propriedade.
14+
Pesquisa, inserção e exclusão possuem tempo `O(log n)` tanto na
15+
média quanto nos piores casos, onde `n` é o número de nós na
16+
árvore antes da operação. Inserções e exclusões podem exigir
17+
que a árvore seja reequilibrada por uma ou mais rotações.
18+
19+
20+
Animação mostrando a inserção de vários elementos em uma árvore AVL.
21+
Inclui as rotações de esquerda, direita, esquerda-direita e direita-esquerda.
22+
23+
![AVL Tree](https://upload.wikimedia.org/wikipedia/commons/f/fd/AVL_Tree_Example.gif)
24+
25+
Árvore AVL com fatores de equilíbrio (verde)
26+
27+
![AVL Tree](https://upload.wikimedia.org/wikipedia/commons/a/ad/AVL-tree-wBalance_K.svg)
28+
29+
### Rotações de Árvores AVL
30+
31+
**Rotação Esquerda-Esquerda**
32+
33+
![Left-Left Rotation](http://btechsmartclass.com/data_structures/ds_images/LL%20Rotation.png)
34+
35+
**Rotação direita-direita**
36+
37+
![Right-Right Rotation](http://btechsmartclass.com/data_structures/ds_images/RR%20Rotation.png)
38+
39+
**Rotação Esquerda-Direita**
40+
41+
![Left-Right Rotation](http://btechsmartclass.com/data_structures/ds_images/LR%20Rotation.png)
42+
43+
**Rotação Direita-Esquerda**
44+
45+
![Right-Right Rotation](http://btechsmartclass.com/data_structures/ds_images/RL%20Rotation.png)
46+
47+
## Referências
48+
49+
* [Wikipedia](https://en.wikipedia.org/wiki/AVL_tree)
50+
* [Tutorials Point](https://www.tutorialspoint.com/data_structures_algorithms/avl_tree_algorithm.htm)
51+
* [BTech](http://btechsmartclass.com/data_structures/avl-trees.html)
52+
* [AVL Tree Insertion on YouTube](https://www.youtube.com/watch?v=rbg7Qf8GkQ4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=12&)
53+
* [AVL Tree Interactive Visualisations](https://www.cs.usfca.edu/~galles/visualization/AVLtree.html)

‎src/data-structures/tree/binary-search-tree/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Binary Search Tree
22

3+
_Read this in other languages:_
4+
[_Português_](README.pt-BR.md)
5+
36
In computer science, **binary search trees** (BST), sometimes called
47
ordered or sorted binary trees, are a particular type of container:
58
data structures that store "items" (such as numbers, names etc.)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
# Árvore de Pesquisa Binária (Binary Search Tree)
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md)
5+
6+
Na ciência da computação **binary search trees** (BST), algumas vezes
7+
chamadas de árvores binárias ordenadas (_ordered or sorted binary trees_),
8+
é um tipo particular de container: estruturas de dados que armazenam
9+
"itens" (como números, nomes, etc.) na memória. Permite pesquisa rápida,
10+
adição e remoção de itens além de poder ser utilizado para implementar
11+
tanto conjuntos dinâmicos de itens ou, consultar tabelas que permitem
12+
encontrar um item por seu valor chave. E.g. encontrar o número de
13+
telefone de uma pessoa pelo seu nome.
14+
15+
Árvore de Pesquisa Binária mantem seus valores chaves ordenados, para
16+
que uma pesquisa e outras operações possam usar o princípio da pesquisa
17+
binária: quando pesquisando por um valor chave na árvore (ou um lugar
18+
para inserir uma nova chave), eles atravessam a árvore da raiz para a folha,
19+
fazendo comparações com chaves armazenadas nos nós da árvore e decidindo então,
20+
com base nas comparações, continuar pesquisando nas sub-árvores a direita ou
21+
a esquerda. Em média isto significa que cara comparação permite as operações
22+
pular metade da árvore, para que então, cada pesquisa, inserção ou remoção
23+
consuma tempo proporcional ao logaritmo do número de itens armazenados na
24+
árvore. Isto é muito melhor do que um tempo linear necessário para encontrar
25+
itens por seu valor chave em um array (desorndenado - _unsorted_), mas muito
26+
mais lento do que operações similares em tableas de hash (_hash tables_).
27+
28+
Uma pesquisa de árvore binária de tamanho 9 e profundidade 3, com valor 8
29+
na raíz.
30+
As folhas não foram desenhadas.
31+
32+
33+
![Binary Search Tree](https://upload.wikimedia.org/wikipedia/commons/d/da/Binary_search_tree.svg)
34+
35+
## Pseudocódigo para Operações Básicas
36+
37+
### Inserção
38+
39+
```text
40+
insert(value)
41+
Pre: value has passed custom type checks for type T
42+
Post: value has been placed in the correct location in the tree
43+
if root = ø
44+
root ← node(value)
45+
else
46+
insertNode(root, value)
47+
end if
48+
end insert
49+
```
50+
51+
```text
52+
insertNode(current, value)
53+
Pre: current is the node to start from
54+
Post: value has been placed in the correct location in the tree
55+
if value < current.value
56+
if current.left = ø
57+
current.left ← node(value)
58+
else
59+
InsertNode(current.left, value)
60+
end if
61+
else
62+
if current.right = ø
63+
current.right ← node(value)
64+
else
65+
InsertNode(current.right, value)
66+
end if
67+
end if
68+
end insertNode
69+
```
70+
71+
### Pesquisa
72+
73+
```text
74+
contains(root, value)
75+
Pre: root is the root node of the tree, value is what we would like to locate
76+
Post: value is either located or not
77+
if root = ø
78+
return false
79+
end if
80+
if root.value = value
81+
return true
82+
else if value < root.value
83+
return contains(root.left, value)
84+
else
85+
return contains(root.right, value)
86+
end if
87+
end contains
88+
```
89+
90+
91+
### Remoção
92+
93+
```text
94+
remove(value)
95+
Pre: value is the value of the node to remove, root is the node of the BST
96+
count is the number of items in the BST
97+
Post: node with value is removed if found in which case yields true, otherwise false
98+
nodeToRemove ← findNode(value)
99+
if nodeToRemove = ø
100+
return false
101+
end if
102+
parent ← findParent(value)
103+
if count = 1
104+
root ← ø
105+
else if nodeToRemove.left = ø and nodeToRemove.right = ø
106+
if nodeToRemove.value < parent.value
107+
parent.left ← nodeToRemove.right
108+
else
109+
parent.right ← nodeToRemove.right
110+
end if
111+
else if nodeToRemove.left != ø and nodeToRemove.right != ø
112+
next ← nodeToRemove.right
113+
while next.left != ø
114+
next ← next.left
115+
end while
116+
if next != nodeToRemove.right
117+
remove(next.value)
118+
nodeToRemove.value ← next.value
119+
else
120+
nodeToRemove.value ← next.value
121+
nodeToRemove.right ← nodeToRemove.right.right
122+
end if
123+
else
124+
if nodeToRemove.left = ø
125+
next ← nodeToRemove.right
126+
else
127+
next ← nodeToRemove.left
128+
end if
129+
if root = nodeToRemove
130+
root = next
131+
else if parent.left = nodeToRemove
132+
parent.left = next
133+
else if parent.right = nodeToRemove
134+
parent.right = next
135+
end if
136+
end if
137+
count ← count - 1
138+
return true
139+
end remove
140+
```
141+
142+
### Encontrar o Nó Pai
143+
144+
```text
145+
findParent(value, root)
146+
Pre: value is the value of the node we want to find the parent of
147+
root is the root node of the BST and is != ø
148+
Post: a reference to the prent node of value if found; otherwise ø
149+
if value = root.value
150+
return ø
151+
end if
152+
if value < root.value
153+
if root.left = ø
154+
return ø
155+
else if root.left.value = value
156+
return root
157+
else
158+
return findParent(value, root.left)
159+
end if
160+
else
161+
if root.right = ø
162+
return ø
163+
else if root.right.value = value
164+
return root
165+
else
166+
return findParent(value, root.right)
167+
end if
168+
end if
169+
end findParent
170+
```
171+
172+
### Encontrar um Nó
173+
174+
```text
175+
findNode(root, value)
176+
Pre: value is the value of the node we want to find the parent of
177+
root is the root node of the BST
178+
Post: a reference to the node of value if found; otherwise ø
179+
if root = ø
180+
return ø
181+
end if
182+
if root.value = value
183+
return root
184+
else if value < root.value
185+
return findNode(root.left, value)
186+
else
187+
return findNode(root.right, value)
188+
end if
189+
end findNode
190+
```
191+
192+
### Encontrar Mínimo
193+
194+
```text
195+
findMin(root)
196+
Pre: root is the root node of the BST
197+
root = ø
198+
Post: the smallest value in the BST is located
199+
if root.left = ø
200+
return root.value
201+
end if
202+
findMin(root.left)
203+
end findMin
204+
```
205+
206+
### Encontrar Máximo
207+
208+
```text
209+
findMax(root)
210+
Pre: root is the root node of the BST
211+
root = ø
212+
Post: the largest value in the BST is located
213+
if root.right = ø
214+
return root.value
215+
end if
216+
findMax(root.right)
217+
end findMax
218+
```
219+
220+
### Traversal
221+
222+
#### Na Ordem Traversal (InOrder Traversal)
223+
224+
```text
225+
inorder(root)
226+
Pre: root is the root node of the BST
227+
Post: the nodes in the BST have been visited in inorder
228+
if root = ø
229+
inorder(root.left)
230+
yield root.value
231+
inorder(root.right)
232+
end if
233+
end inorder
234+
```
235+
236+
#### Pré Ordem Traversal (PreOrder Traversal)
237+
238+
```text
239+
preorder(root)
240+
Pre: root is the root node of the BST
241+
Post: the nodes in the BST have been visited in preorder
242+
if root = ø
243+
yield root.value
244+
preorder(root.left)
245+
preorder(root.right)
246+
end if
247+
end preorder
248+
```
249+
250+
#### Pós Ordem Traversal (PostOrder Traversal)
251+
252+
```text
253+
postorder(root)
254+
Pre: root is the root node of the BST
255+
Post: the nodes in the BST have been visited in postorder
256+
if root = ø
257+
postorder(root.left)
258+
postorder(root.right)
259+
yield root.value
260+
end if
261+
end postorder
262+
```
263+
264+
## Complexidades
265+
266+
### Complexidade de Tempo
267+
268+
| Access | Search | Insertion | Deletion |
269+
| :-------: | :-------: | :-------: | :-------: |
270+
| O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) |
271+
272+
### Complexidade de Espaço
273+
274+
O(n)
275+
276+
## Referências
277+
278+
- [Wikipedia](https://en.wikipedia.org/wiki/Binary_search_tree)
279+
- [Inserting to BST on YouTube](https://www.youtube.com/watch?v=wcIRPqTR3Kc&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=9&t=0s)
280+
- [BST Interactive Visualisations](https://www.cs.usfca.edu/~galles/visualization/BST.html)

‎src/data-structures/tree/fenwick-tree/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Fenwick Tree / Binary Indexed Tree
22

3+
_Leia em outro idioma:_
4+
[_English_](README.pt-BR.md)
5+
36
A **Fenwick tree** or **binary indexed tree** is a data
47
structure that can efficiently update elements and
58
calculate prefix sums in a table of numbers.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Árvore Fenwick / Árvore Binária Indexada (Fenwick Tree / Binary Indexed Tree)
2+
3+
_Read this in other languages:_
4+
[_Português_](README.md)
5+
6+
Uma **árvore Fenwick** ou **árvore binária indexada** é um tipo de
7+
estrutura de dados que consegue eficiemente atualizar elementos e
8+
calcular soma dos prefixos em uma tabela de números.
9+
10+
Quando comparado com um _flat array_ de números, a árvore Fenwick
11+
alcança um balanceamento muito melhor entre duas operações: atualização
12+
(_update_) do elemento e cálculo da soma do prefíxo. Em uma _flar array_
13+
de `n` números, você pode tanto armazenar elementos quando a soma dos
14+
prefixos. Em ambos os casos, computar a soma dos prefixos requer ou
15+
atualizar um array de elementos também requerem um tempo linear, contudo,
16+
a demais operações podem ser realizadas com tempo constante.
17+
A árvore Fenwick permite ambas as operações serem realizadas com tempo
18+
`O(log n)`.
19+
20+
Isto é possível devido a representação dos números como uma árvore, aonde
21+
os valores de cada nó é a soma dos números naquela sub-árvore. A estrutura
22+
de árvore permite operações a serem realizadas consumindo somente acessos
23+
a nós em `O(log n)`.
24+
25+
## Implementação de Nós
26+
27+
Árvore Binária Indexada é representada como um _array_. Em cada nó da Árvore
28+
Binária Indexada armazena a soma de alguns dos elementos de uma _array_
29+
fornecida. O tamanho da Árvore Binária Indexada é igual a `n` aonde `n` é o
30+
tamanho do _array_ de entrada. Na presente implementação nós utilizados o
31+
tamanho `n+1` para uma implementação fácil. Todos os índices são baseados em 1.
32+
33+
![Binary Indexed Tree](https://www.geeksforgeeks.org/wp-content/uploads/BITSum.png)
34+
35+
Na imagem abaixo você pode ver o exemplo animado da criação de uma árvore
36+
binária indexada para o _array_ `[1, 2, 3, 4, 5]`, sendo inseridos um após
37+
o outro.
38+
39+
![Fenwick Tree](https://upload.wikimedia.org/wikipedia/commons/d/dc/BITDemo.gif)
40+
41+
## Referências
42+
43+
- [Wikipedia](https://en.wikipedia.org/wiki/Fenwick_tree)
44+
- [GeeksForGeeks](https://www.geeksforgeeks.org/binary-indexed-tree-or-fenwick-tree-2/)
45+
- [YouTube](https://www.youtube.com/watch?v=CWDQJGaN1gY&index=18&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

‎src/data-structures/tree/red-black-tree/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Red–Black Tree
22

3+
_Leia em outro idioma:_
4+
[_English_](README.pt-BR.md)
5+
36
A **red–black tree** is a kind of self-balancing binary search
47
tree in computer science. Each node of the binary tree has
58
an extra bit, and that bit is often interpreted as the
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# Árvore Vermelha-Preta (Red-Black Tree)
2+
3+
_Read this in other languages:_
4+
[_Português_](README.md)
5+
6+
Uma **árvore vermelha-preta** é um tipo de árvore de pesquisa
7+
binária auto balanceada na ciência da computação. Cada nó da
8+
árvore binária possui um _bit_ extra, e este _bit_ é frequentemente
9+
interpretado com a cor (vermelho ou preto) do nó. Estas cores de _bits_
10+
são utilizadas para garantir que a árvore permanece aproximadamente
11+
equilibrada durante as operações de inserções e remoções.
12+
13+
O equilíbrio é preservado através da pintura de cada nó da árvore com
14+
uma das duas cores, de maneira que satisfaça certas propriedades, das
15+
quais restringe nos piores dos casos, o quão desequilibrada a árvore
16+
pode se tornar. Quando a árvore é modificada, a nova árvore é
17+
subsequentemente reorganizada e repintada para restaurar as
18+
propriedades de coloração. As propriedades são designadas de tal modo que
19+
esta reorganização e nova pintura podem ser realizadas eficientemente.
20+
21+
O balanceamento de uma árvore não é perfeito, mas é suficientemente bom
22+
para permitir e garantir uma pesquisa no tempo `O(log n)`, aonde `n` é o
23+
número total de elementos na árvore.
24+
Operações de inserções e remoções, juntamente com a reorganização e
25+
repintura da árvore, também são executados no tempo `O (log n)`.
26+
27+
Um exemplo de uma árvore vermalha-preta:
28+
29+
![red-black tree](https://upload.wikimedia.org/wikipedia/commons/6/66/Red-black_tree_example.svg)
30+
31+
## Propriedades
32+
33+
Em adição aos requerimentos impostos pela árvore de pesquisa binária,
34+
as seguintes condições devem ser satisfeitas pela árvore vermelha-preta:
35+
36+
- Cada nó é tanto vermelho ou preto.
37+
- O nó raíz é preto. Esta regra algumas vezes é omitida.
38+
Tendo em vista que a raíz pode sempre ser alterada de vermelho para preto,
39+
mas não de preto para vermelho, esta regra tem pouco efeito na análise.
40+
- Todas as folhas (Nulo/NIL) são pretas.
41+
- Caso um nó é vermelho, então seus filhos serão pretos.
42+
- Cada caminho de um determinado nó para qualquer um dos seus nós nulos (NIL)
43+
descendentes contém o mesmo número de nós pretos.
44+
45+
Algumas definições: o número de nós pretos da raiz até um nó é a
46+
**profundidade preta**(_black depth_) do nó; o número uniforme de nós pretos
47+
em todos os caminhos da raíz até as folhas são chamados de **altura negra**
48+
(_black-height_) da árvore vermelha-preta.
49+
50+
Essas restrições impõem uma propriedade crítica de árvores vermelhas e pretas:
51+
_o caminho da raiz até a folha mais distante não possui mais que o dobro do
52+
comprimento do caminho da raiz até a folha mais próxima_.
53+
O resultado é que a árvore é grosseiramente balanceada na altura.
54+
55+
Tendo em vista que operações como inserções, remoção e pesquisa de valores
56+
requerem nos piores dos casos um tempo proporcional a altura da ávore,
57+
este limite superior teórico na altura permite que as árvores vermelha-preta
58+
sejam eficientes no pior dos casos, ao contrário das árvores de busca binária
59+
comuns.
60+
61+
## Balanceamento durante a inserção
62+
63+
### Se o tio é VERMELHO
64+
![Red Black Tree Balancing](https://www.geeksforgeeks.org/wp-content/uploads/redBlackCase2.png)
65+
66+
### Se o tio é PRETO
67+
68+
- Caso Esquerda Esquerda (`p` é o filho a esquerda de `g` e `x`, é o filho a esquerda de `p`)
69+
- Caso Esquerda Direita (`p` é o filho a esquerda de `g` e `x`, é o filho a direita de `p`)
70+
- Caso Direita Direita (`p` é o filho a direita de `g` e `x`, é o filho da direita de `p`)
71+
- Caso Direita Esqueda (`p` é o filho a direita de `g` e `x`, é o filho a esquerda de `p`)
72+
73+
#### Caso Esquerda Esquerda (Veja g, p e x)
74+
75+
![Red Black Tree Balancing](https://www.geeksforgeeks.org/wp-content/uploads/redBlackCase3a1.png)
76+
77+
#### Caso Esquerda Direita (Veja g, p e x)
78+
79+
![Red Black Tree Balancing](https://www.geeksforgeeks.org/wp-content/uploads/redBlackCase3b.png)
80+
81+
#### Caso Direita Direita (Veja g, p e x)
82+
83+
![Red Black Tree Balancing](https://www.geeksforgeeks.org/wp-content/uploads/redBlackCase3c.png)
84+
85+
#### Caso Direita Esquerda (Veja g, p e x)
86+
87+
![Red Black Tree Balancing](https://www.geeksforgeeks.org/wp-content/uploads/redBlackCase3d.png)
88+
89+
## Referências
90+
91+
- [Wikipedia](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
92+
- [Red Black Tree Insertion by Tushar Roy (YouTube)](https://www.youtube.com/watch?v=UaLIHuR1t8Q&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=63)
93+
- [Red Black Tree Deletion by Tushar Roy (YouTube)](https://www.youtube.com/watch?v=CTvfzU_uNKE&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=64)
94+
- [Red Black Tree Insertion on GeeksForGeeks](https://www.geeksforgeeks.org/red-black-tree-set-2-insert/)
95+
- [Red Black Tree Interactive Visualisations](https://www.cs.usfca.edu/~galles/visualization/RedBlack.html)

‎src/data-structures/tree/segment-tree/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Segment Tree
22

3+
_Leia em outro idioma:_
4+
[_English_](README.pt-BR.md)
5+
36
In computer science, a **segment tree** also known as a statistic tree
47
is a tree data structure used for storing information about intervals,
58
or segments. It allows querying which of the stored segments contain
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Árvore de Segmento (Segment Tree)
2+
3+
_Read this in other languages:_
4+
[_Português_](README.md)
5+
6+
Na ciência da computação, uma **árvore de segmento** também conhecida como
7+
árvore estatística é uma árvore de estrutura de dados utilizadas para
8+
armazenar informações sobre intervalores ou segmentos. Ela permite pesquisas
9+
no qual os segmentos armazenados contém um ponto fornecido. Isto é,
10+
em princípio, uma estrutura estática; ou seja, é uma estrutura que não pode
11+
ser modificada depois de inicializada. Uma estrutura de dados similar é a
12+
árvore de intervalos.
13+
14+
Uma árvore de segmento é uma árvore binária. A raíz da árvore representa a
15+
_array_ inteira. Os dois filhos da raíz representam a primeira e a segunda
16+
metade da _array_. Similarmente, os filhos de cada nó correspondem ao número
17+
das duas metadas da _array_ correspondente do nó.
18+
19+
Nós construímos a árvore debaixo para cima, com o valor de cada nó sendo o
20+
"mínimo" (ou qualquer outra função) dos valores de seus filhos. Isto consumirá
21+
tempo `O(n log n)`. O número de oprações realizadas é equivalente a altura da
22+
árvore, pela qual consome tempo `O(log n)`. Para fazer consultas de intervalos,
23+
cada nó divide a consulta em duas partes, sendo uma sub consulta para cada filho.
24+
Se uma pesquisa contém todo o _subarray_ de um nó, nós podemos utilizar do valor
25+
pré-calculado do nó. Utilizando esta otimização, nós podemos provar que somente
26+
operações mínimas `O(log n)` são realizadas.
27+
28+
![Min Segment Tree](https://www.geeksforgeeks.org/wp-content/uploads/RangeMinimumQuery.png)
29+
30+
![Sum Segment Tree](https://www.geeksforgeeks.org/wp-content/uploads/segment-tree1.png)
31+
32+
## Aplicação
33+
34+
Uma árvore de segmento é uma estrutura de dados designada a realizar
35+
certas operações de _array_ eficientemente, especialmente aquelas envolvendo
36+
consultas de intervalos.
37+
38+
Aplicações da árvore de segmentos são nas áreas de computação geométrica e
39+
sistemas de informação geográficos.
40+
41+
A implementação atual da Árvore de Segmentos implica que você pode passar
42+
qualquer função binária (com dois parâmetros de entradas) e então, você
43+
será capaz de realizar consultas de intervalos para uma variedade de funções.
44+
Nos testes você poderá encontrar exemplos realizando `min`, `max` e consultas de
45+
intervalo `sam` na árvore segmentada (SegmentTree).
46+
47+
## Referências
48+
49+
- [Wikipedia](https://en.wikipedia.org/wiki/Segment_tree)
50+
- [YouTube](https://www.youtube.com/watch?v=ZBHKZF5w4YU&index=65&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)
51+
- [GeeksForGeeks](https://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/)

‎src/data-structures/trie/README.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
# Trie
22

33
_Read this in other languages:_
4-
[_简体中文_](README.zh-CN.md),
5-
[_Русский_](README.ru-RU.md)
4+
[_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md) | [_Português_](README.pt-BR.md)
65

76
In computer science, a **trie**, also called digital tree and sometimes
87
radix tree or prefix tree (as they can be searched by prefixes),
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Trie
2+
3+
_Leia em outro idioma:_
4+
[_English_](README.md) | [_简体中文_](README.zh-CN.md) | [_Русский_](README.ru-RU.md)
5+
6+
Na ciência da computação, uma **trie**, também chamada de árvore digital (digital tree)
7+
e algumas vezes de _radix tree_ ou _prefix tree_ (tendo em vista que eles
8+
podem ser pesquisados por prefixos), é um tipo de árvore de pesquisa, uma
9+
uma estrutura de dados de árvore ordenada que é usado para armazenar um
10+
conjunto dinâmico ou matriz associativa onde as chaves são geralmente _strings_.
11+
Ao contrário de uma árvore de pesquisa binária (binary search tree),
12+
nenhum nó na árvore armazena a chave associada a esse nó; em vez disso,
13+
sua posição na árvore define a chave com a qual ela está associada.
14+
Todos os descendentes de um nó possuem em comum o prefixo de uma _string_
15+
associada com aquele nó, e a raiz é associada com uma _string_ vazia.
16+
Valores não são necessariamente associados a todos nós. Em vez disso,
17+
os valores tendem a ser associados apenas a folhas e com alguns nós
18+
internos que correspondem a chaves de interesse.
19+
20+
Para a apresentação otimizada do espaço da árvore de prefixo (_prefix tree_),
21+
veja árvore de prefixo compacto.
22+
23+
![Trie](https://upload.wikimedia.org/wikipedia/commons/b/be/Trie_example.svg)
24+
25+
## Referências
26+
27+
- [Wikipedia](https://en.wikipedia.org/wiki/Trie)
28+
- [YouTube](https://www.youtube.com/watch?v=zIjfhVPRZCg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=7&t=0s)

0 commit comments

Comments
 (0)
Please sign in to comment.