Você está na página 1de 5

Relembre estruturas de dados importantes para qualquer disciplina de

algoritmos.
Para cada item, descreva a estrutura de dados, suas operações, custos
associados e um exemplo de uso:
a. Arranjos (arrays)
O tipo array é uma matriz de valores, tudo do mesmo tipo, seria como se
tivéssemos vários elementos dentro de uma variável, que pode ser apenas de
um tipo.
Deve ser declarado o tipo e o número máximo de elementos que podem caber
dentro de um array, e através de seu índice ele pode ser acessado e
manipulado.
Inserção na Matriz:
Complexidade do tempo:
O(1) para inserir um único elemento
O(N) para inserir todos os elementos de matriz onde N é o tamanho da matriz

Elementos de acesso no Array: O(1)

Pesquisa na matriz: O(N), onde N é o tamanho da matriz.

Usado para implementar outras estruturas de dados como Stacks, Queues,


Heaps, Hash tables, etc.

b. Listas ligadas
Uma lista vinculada é uma estrutura de dados linear, na qual os elementos não
são armazenados em locais de memória contíguos. Os elementos de uma lista
vinculada estão ligados usando ponteiros

Em palavras simples, uma lista vinculada consiste em nós onde cada nó


contém um campo de dados e um link de referência para o próximo nó da lista.

Search O(n) O(n)

Insert O(1) O(1)

Deletion O(1) O(1)


Espaço Auxiliar: O(n)
c. Filas e Pilhas
Como stack, a fila é uma estrutura de dados linear que armazena itens da
maneira First In First Out (FIFO). Com uma fila, o item menos recentemente
adicionado é removido primeiro
• Enqueue: Adiciona um item à fila. Se a fila estiver cheia, então é dito
que é uma condição de estouro – O(1)
• Dequeue: Remove um item da fila. Os itens são estourados na mesma
ordem em que são empurrados. Se a fila estiver vazia, então é dito que
é uma condição de subfluência – O(1)
• Front: Pegue o item frontal na fila – O(1)
• Rear: Obtenha o último item da fila – O(1)
Exemplo seria um sistema que administra diversos computadores ligados a
uma única impressora.
Uma pilha é uma estrutura de dados linear que armazena itens de
forma LIFO ou First-In/Last-Out (FILO). Na pilha, um novo elemento é
adicionado em uma extremidade e um elemento é removido apenas dessa
extremidade. As operações de inserção e exclusão são muitas vezes
chamadas de push and pop.
As funções associadas à pilha são:
vazio() – Retorna se a pilha está vazia – Complexidade do tempo: O(1)
tamanho() – Retorna o tamanho da pilha – Complexidade do tempo: O(1)
topo() / peek() – Retorna uma referência ao elemento mais alto da pilha –
Complexidade do tempo: O(1)
push(a) – Insere o elemento 'a' na parte superior da pilha – Complexidade do
tempo: O(1)
pop() – Exclui o elemento mais alto da pilha – Complexidade do tempo: O(1)

Exemplos de rotinas que utilizam essa lógica são o “desfazer” do Word e o


gerenciamento da execução de funções (de programação), que causa o
conhecido erro de stackoverflow.
d. Filas de prioridades (p.e. Heap)
Priority Queue é um tipo de dados abstratos semelhante a uma fila, e cada
elemento tem algum valor prioritário associado a ele. A prioridade dos
elementos em uma fila prioritária determina a ordem em que os elementos
são atendidos (ou seja, a ordem em que são removidos). Se, em qualquer
caso, os elementos tiverem a mesma prioridade, eles são servidos de acordo
com suas encomendas na fila.
Propriedades da Fila prioritária
Assim, uma fila prioritária é uma extensão da fila com as seguintes
propriedades.
Cada item tem uma prioridade associada a ele.
Um elemento com alta prioridade é dequeuado diante de um elemento com
baixa prioridade.
Se dois elementos têm a mesma prioridade, eles são atendidos de acordo
com sua ordem na fila.
Matrizes
Lista vinculada
Estrutura de dados de pilha
Árvore de busca binária

espiar()
Matrizes enqueue() dequeue() espiar()

Complexidade do
tempo O(1) O(n) O(n)

empurrar() espiar()
Lista vinculada empurrar () pop() pop() espiar()

Complexidade do
tempo O(n) O(1) O(1)

remover() espiar()
Monte Binário inserir() inserir() remover() espiar()

Complexidade do
tempo O(log n) O(log n) O(1)

Árvore de pesquisa
binária espiar() espiar() inserir() inserir() excluir()

Complexidade do
tempo O(1) O(log n) O(log n)

Usado emCompressão de dados no código Huffman

e. Grafos
Um gráfico consiste em um conjunto finito de vértices (ou nós) e um conjunto de
Bordas que conectam um par de nós.
Em grafos temos analises diferentes em relação os nós e as bordas, pq esses
caminhos podem ter um custo variado de cada nó e borda ou pode ser fixo, de
mesmo tamanho. Sendo assim existem diversos algoritmos que tratam os
grafos, (Dijkstra, Floyd-Warshall, Bellman-Ford, Prim, Kruskal, etc...).
Exemplo do Dijkstra
O V^2
Usado nas redes sociais
f. Árvores
A Árvore de Pesquisa Binária é uma estrutura de dados de árvores binárias
baseada em nó que tem as seguintes propriedades:
• O subárvores esquerdo de um nó contém apenas nós com teclas
menores que a chave do nó.
• O subárvores direito de um nó contém apenas nós com teclas
maiores que a chave do nó.
• O subárvores esquerdo e direito cada um também deve ser uma
árvore de busca binária.

search-and-insertion/
A maior complexidade de tempo de operações de pesquisa e inserção é O(h)
onde h é a altura da Árvore de Pesquisa Binária. Na pior das hipóteses, talvez
tenhamos que viajar da raiz para o nó mais profundo da folha. A altura de
uma árvore inclinada pode se tornar n e a complexidade do tempo da
operação de busca e inserção pode se tornar O(n).
Exclusão mesma complexidade
MACHINE LEARNING

g. Conjuntos (sets)
Em Python, um Conjunto é uma coleção não reordenada de, tipos de dados
que é iterável, mutável e não tem elementos duplicados. A ordem dos
elementos em um conjunto é indefinida, embora possa consistir de vários
elementos
2. Prove a seguinte proposição usando indução matemática: “Para todo inteiro
não-negativo n,
Somatorio i=0 -> n, 2i = 2^n+1 – 1
Condidere n=0
2^0=2^{0+1}-1 1=1 correto
n=k+1:

0^2^t=2^n-1 – 1
Sub n por k+1
2^((k+1)+1)

3 Para cada item a seguir, indique a proporção de crescimento da função se o


seu argumento aumentar
quatro vezes:
a. log2 n b.
p
n c. n d. n2 e. n3 f. 2n

4 Imagine que depois de lavar 5 pares distintos de meias, você descobriu que
duas meias ficaram faltando.
Naturalmente, você gostaria de continuar com a maior quantidade de pares
completos possível.
Responda:
a. Qual é o melhor caso?
Tenhamos 4 pares
b. Qual é o pior caso?
Que esteja faltando 2 pares
c. Assumindo que a chance de se perder cada uma das 10 meias é a mesma,
encontre:
(1) a probabilidade do melhor caso;

(2) a probabilidade do pior caso;

(3) o número de pares esperado de pares em média.

Resolva as seguintes somas:


a.
Pn+1
i=3 1 b.
Pn+1
i=3 i

Você também pode gostar