CIC 110 Análise e Projeto de Algoritmos I

Tamanho: px
Começar a partir da página:

Download "CIC 110 Análise e Projeto de Algoritmos I"

Transcrição

1 CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá

2 AULA 09 Consultas de Intervalo

3 Consulta de Intervalo Neste capítulo, discutimos estruturas de dados que nos permitem processar eficientemente consultas de alcance. Em uma consulta de intervalo, nossa tarefa é calcular um valor com base em um subarray de um vetor. As consultas de alcance típico são: sum q (a, b): calcula a soma dos valores no intervalo [a, b]; min q (a, b): encontre o valor mínimo no intervalo [a, b] max q (a, b): encontre o valor máximo no intervalo [a, b] Por exemplo, considere o intervalo [3, 6] no seguinte vetor:

4 Consulta de Intervalo Neste caso, soma q(3, 6) = 14, min q(3, 6) = 1 e max q(3, 6) = 6. Uma maneira simples de processar consultas de intervalo é usar um loop que passa por todos os valores do vetor no intervalo. Por exemplo, a seguinte função pode ser usada para processar consultas de soma em um vetor: int sum(int a, int b) { int s = 0; for (int i = a; i <= b; i++) { s += A[i]; return s;

5 Consulta de Intervalo Esta função funciona no tempo O(n), onde n é o tamanho do vetor. Assim, podemos processar q consultas no tempo O(nq) usando a função. No entanto, se ambos n e q são grandes, essa abordagem é lenta. Felizmente, verifica-se que existem maneiras de processar consultas de alcance muito mais eficientemente.

6 Consultas de vetor estático Primeiro nos concentramos em uma situação em que o vetor é estático, ou seja, os valores do vetor nunca são atualizados entre as consultas. Neste caso, basta construir uma estrutura de dados estática que nos diga a resposta para qualquer consulta possível.

7 Soma de Intervalo Podemos processar facilmente consultas de soma em um vetor estático construindo um vetor de soma de prefixo. Cada valor no vetor de soma de prefixo é igual a soma dos valores no vetor original até essa posição, isto é, o valor na posição k é soma q(0, k). O vetor de soma de prefixo pode ser construído em tempo de O(n). Por exemplo, considere a seguinte vetor: O vetor de soma de prefixo correspondente é o seguinte:

8 Soma de Intervalo Uma vez que o vetor da soma do prefixo contém todos os valores da soma q(0, k), podemos calcular qualquer valor da soma q(a, b) no tempo O(1) da seguinte maneira: sum q ( a, b ) = sum q (0, b ) sum q (0, a 1) Ao definir a soma q(0, -1) = 0, a fórmula acima também se mantém quando a = 0. Por exemplo, considere o intervalo [3, 6]:

9 Soma de Intervalo Neste caso, soma q(3, 6) = = 15. Esta soma pode ser calculada a partir de dois valores do vetor de som de prefixo: Assim, sum q (3, 6) = sum q (0, 6) sum q (0, 2) = = 15. Também é possível generalizar essa ideia para maiores dimensões. Por exemplo, podemos construir uma matriz de soma de prefixo bidimensional que pode ser usada para calcular a soma de qualquer subarray retangular em tempo de O(1). Cada soma dessa matriz corresponde a um subarray que começa no canto superior esquerdo da matriz.

10 Soma de Intervalo A seguinte imagem ilustra a ideia: D C B A A soma da submatriz pode ser calculada usando a fórmula: S ( A ) S ( B ) S ( C ) + S ( D ), aqui S (X) denota a soma de valores em um subarray retangular do canto superior esquerdo para a posição de X.

11 Programa de Soma de Intervalo Normal: #include <bits/stdc++.h> #define lli long long using namespace std; vector <lli> A; lli sum(int a, int b) { lli s = 0; for (int i = a; i <= b; i++) { s += A[i]; return s; int main() { int n, a, b; lli X; scanf("%d %d %d", &n, &a, &b); for (int i = 0; i < n; i++) { scanf("%lld", &X); A.push_back(X); X = sum(a,b);

12 Programa de Soma de Intervalo Normal: for (int i = a; i <= b; i++) { if (i < b) { printf("%lld + ", A[i]); else { printf("%lld = %lld\n", A[i], X); return 0;

13 Programa de Soma de Intervalo PD: #include <bits/stdc++.h> #define lli long long using namespace std; vector <lli> A, S; void sum(int a, int b) { lli s = 0; for (int i = a; i <= b; i++) { s += A[i]; S.push_back(s); int main() { int n, a, b; lli X; scanf("%d %d %d", &n, &a, &b); for (int i = 0; i < n; i++) { scanf("%lld", &X); A.push_back(X); sum(0,7); X = S[a-1] + S[b];

14 Programa de Soma de Intervalo PD: for (int i = a; i <= b; i++) { if (i < b) { printf("%lld + ", A[i]); else { printf("%lld = %lld\n", A[i], X); return 0;

15 Menor valor em um intervalo A consulta de menor valor em um intervalo é mais difícil de processar do que as da soma. Ainda assim, existe um método de pré-processamento de tempo O(n log n) bastante simples, após o qual podemos responder qualquer consulta de menor valor em um intervalo em tempo O(1). Observe que, que a consulta de menor valor e/ou de maior valor em um intervalo podem ser processadas de forma semelhante, podemos fazer a consulta de menor valor em um intervalo pois será a mesma coisa para o maior valor. A ideia é precalcular todos os valores de min q (a, b) onde b - a + 1 (o comprimento do alcance) é uma potência de dois.

16 Menor valor em um intervalo Menor valor em um intervalo Por exemplo, para o vetor: os seguintes valores são calculados: a b min q (a,b) a b min q (a,b) a b min q (a,b)

17 Menor valor em um intervalo O número de valores precalculados é O(n log n), porque existem comprimentos de intervalo O(log n) que são potência de dois. Os valores podem ser calculados eficientemente usando a fórmula recursiva min q (a, b) = min( min q (a, a + w 1), min q (a + w, b)), onde b a + 1 é uma potência de dois e w = (b a + 1) / 2. O cálculo de todos esses valores leva o tempo O(n log n).

18 Menor valor em um intervalo Depois disso, qualquer valor de min q (a, b) pode ser calculado em tempo O(1) como menor valor de um intervalo precalculados. Seja k a maior potência de dois que não exceda b a + 1. Podemos calcular o valor de min q (a, b) usando a fórmula: min q (a, b) = min( min q (a, a + k 1), min q (b k + 1, b)). Na fórmula acima, o intervalo [a, b] é representado como a união dos intervalos [a, a + k 1] e [b k + 1, b], ambos de comprimento k.

19 Menor valor em um intervalo Como exemplo, considere o intervalo [1, 6]: O comprimento do intervalo é 6 e a maior potência de dois que não exceda 6 é 4. Assim, o intervalo [1, 6] é a união das faixas [1, 4] e [3, 6]: Uma vez que min q (1, 4) = 3 e min q (3, 6) = 1, concluímos que min q (1, 6) = 1.

20 Programa do Menor valor em um intervalo #include <bits/stdc++.h> #define lli long long using namespace std; vector <lli> A; lli MAX = LL; lli menor(int a, int b) { lli s = MAX; for (int i = a; i <= b; i++) { if (s > A[i]) { s = A[i]; return s;

21 Programa do Menor valor em um intervalo int main() { int n, a, b; lli X; scanf("%d %d %d", &n, &a, &b); for (int i = 0; i < n; i++) { scanf("%lld", &X); A.push_back(X); X = menor(a,b); for (int i = a; i <= b; i++) { if (i < b) { printf("%lld, ", A[i]); else { printf("%lld = %lld\n", A[i], X); return 0;

22 Árvore indexada binária Uma árvore indexada binária ou uma árvore Fenwick pode ser vista como uma variação dinâmica de um vetor soma de prefixo. Ela suporta duas operações de tempo O(log n) em um vetor: processando uma consulta de soma de intervalo e atualizando um valor. A vantagem de uma árvore indexada binária é que nos permite atualizar de forma eficiente os valores do vetor entre as consultas da soma. Isso não seria possível usando um vetor soma de prefixo, porque depois de cada atualização, seria necessário criar um vetor soma de prefixo inteiro novamente no tempo O(n). A estrutura de árvore indexada binária foi apresentada por P. M. Fenwick em 1994.

23 Estrutura Mesmo que o nome da estrutura seja uma árvore indexada em binário, geralmente é representado como um vetor. Nesta seção, adotamos que todos os vetores são indexados, porque facilita a implementação. Dado p(k) que denota a maior potência de dois que divide k. Nós armazenamos uma árvore indexada binária como uma árvore de vetor, tal que tree [ k ] = sum q ( k p ( k ) + 1, k ),

24 Estrutura isto é, cada posição k contém a soma de valores em um intervalo do vetor original cujo comprimento é p(k) e que termina na posição k. Por exemplo, uma vez que p(6) = 2, a árvore [6] contém o valor da sum q (5, 6). Por exemplo, considere o seguinte vetor: A árvore indexada binária correspondente é a seguinte:

25 Estrutura A seguinte imagem mostra mais claramente como cada valor na árvore indexada binária corresponde a um intervalo na matriz original:

26 Estrutura Usando uma árvore indexada binária, qualquer valor da sum q (1, k) pode ser calculado no tempo O(log n), porque um intervalo [1, k] sempre pode ser dividido em intervalos O(log n) cujas somas são armazenadas na árvore. Por exemplo, o intervalo [1, 7] consiste nos seguintes intervalos:

27 Estrutura

28 Estrutura Assim, podemos calcular a soma correspondente da seguinte forma: sum q (1, 7) = sum q (1, 4) + sum q (5, 6) + sum q (7, 7) = = 27 Para calcular o valor da sum q (a, b) onde a > 1, podemos usar o mesmo truque que usamos com os vetores de soma de prefixo: sum q (a, b) = sum q (1, b) sum q (1, a 1).

29 Estrutura Uma vez que podemos calcular a sum q (1, b) e a sum q (1, a - 1) no tempo O(log n), a complexidade do tempo total é O(log n). Então, após atualizar um valor no vetor original, vários valores na árvore indexada binária devem ser atualizados. Por exemplo, se o valor na posição 3 mudar, as somas dos seguintes intervalos mudam:

30 Estrutura Uma vez que cada elemento do vetor pertence aos intervalos O(log n) na árvore indexada binária, basta atualizar os valores de O(log n) na árvore.

31 Implementação As operações de uma árvore indexada binária podem ser implementadas de forma eficiente usando operações de bits. O fato fundamental é que podemos calcular qualquer valor de p(k) usando a fórmula: A seguinte função calcula o valor da sum q (1, k): p(k) = k & k. int sumq(int k) { int s = 0; while (k >= 1) { s += tree[k]; k -= k&-k; return s;

32 Implementação A seguinte função aumenta o valor do vetor na posição k por x (x pode ser positivo ou negativo): void add(int k, int x) { while (k <= n) { tree[k] += x; k += k&-k; A complexidade do tempo de ambas as funções é O(log n), porque as funções acessam valores de O(log n) na árvore indexada binária e cada movimento para a próxima posição leva tempo O(1).

33 Árvore de segmentação Uma árvore de segmentação é uma estrutura de dados que suporta duas operações: processando uma consulta de intervalo e atualizando um valor no vetor. As árvores de segmentação podem suportar consultas de soma, consultas mínimas e máximas e muitas outras consultas para que ambas as operações funcionem em tempo de O(log n). Comparado com uma árvore indexada binária, a vantagem de uma árvore de segmentação é que é uma estrutura de dados mais geral. Enquanto as árvores indexadas binárias apenas suportam consultas de soma, as árvores de segmentação também oferecem suporte a outras consultas. Por outro lado, uma árvore de segmentação requer mais memória e é um pouco mais difícil de implementar.

34 Estrutura Uma árvore de segmentação é uma árvore binária, de modo que os nós no nível inferior da árvore correspondem aos elementos do vetor e os outros nós contêm informações necessárias para processar consultas de alcance. Nesta seção, assumimos que o tamanho do vetor é uma potência de dois e a indexação baseada em zero é usada, porque é conveniente criar uma árvore de segmento para esse vetor. Se o tamanho do vetor não for uma potência de dois, sempre podemos acrescentar elementos extras ao vetor.

35 Estrutura Em primeiro lugar, discutiremos árvores de segmentação que suportem consultas da soma. Como exemplo, considere o seguinte vetor: A árvore de segmentação correspondente é a seguinte:

36 Estrutura Cada nó de árvore interno corresponde a uma pedaço do vetor cujo tamanho é uma potência de dois. Na árvore anterior, o valor de cada nó interno é a soma dos valores do vetor correspondentes e pode ser calculado como a soma dos valores de seu nó filho esquerdo e direito. Acontece que qualquer intervalo [a, b] pode ser dividido em intervalos O(log n) cuja os valores são armazenados em nós da árvore. Por exemplo, considere o intervalo [2,7]:

37 Estrutura Aqui, sum q (2, 7) = = 26. Neste caso, os dois nós de árvore a seguir correspondem ao intervalo: Assim, outra maneira de calcular a soma é = 26.

38 Estrutura Quando a soma é calculada usando nós posicionados o mais alto possível na árvore, são necessárias no máximo dois nós em cada nível da árvore. Portanto, o número total de nós é O(log n). Após uma atualização do vetor, devemos atualizar todos os nós cujo valor depende do valor atualizado. Isso pode ser feito atravessando o caminho do elemento do vetor atualizado para o nó superior e atualizando os nós ao longo do caminho.

39 Estrutura A seguinte imagem mostra quais os nós da árvore mudam se o valor da matriz 7 mudar: O caminho de baixo para cima sempre consiste de nós O(log n), portanto, cada atualização altera nós O(log n) na árvore.

40 Implementação Nós armazenamos uma árvore de segmento como um vetor de 2n elementos onde n é o tamanho do vetor original e uma potência de dois. Os nós de árvore são armazenados de cima para baixo: árvore [1] é o nó superior, árvore [2] e árvore [3] são seus filhos, e assim por diante. Finalmente, os valores da árvore [n] para a árvore [2n - 1] correspondem aos valores do vetor original no nível inferior da árvore.

41 Implementação Por exemplo, a árvore de segmentação: Cada nó de árvore interno corresponde a uma gama de matriz cujo tamanho é uma potência de dois. Na árvore acima, o valor de cada nó interno é a soma dos valores do vetor correspondentes e pode ser calculado como a soma dos valores de seu nó filho esquerdo e direito.

42 Implementação está armazenado da seguinte forma: Usando esta representação, o pai da árvore [k] é árvore [ k /2 ], e seus filhos são árvore [2k] e árvore [2k + 1]. Note que isso implica que a posição de um nó é o mesmo que seja um filho esquerdo e diferente se for um filho direito.

43 Implementação A seguinte função calcula o valor da sum q (a, b): int sumq(int a, int b) { a += n; b += n; int s = 0; while (a <= b) { if (a%2 == 1) s += tree[a++]; if (b%2 == 0) s += tree[b--]; a /= 2; b /= 2; return s;

44 Implementação A função mantém um intervalo inicialmente [a + n, b + n]. Então, em cada etapa, o intervalo é movido um nível mais alto na árvore, e antes disso, os valores dos nós que não pertencem ao intervalo mais alto são adicionados à soma. A seguinte função aumenta o valor da matriz na posição k por x: void add(int k, int x) { k += n; tree[k] += x; for (k /= 2; k >= 1; k /= 2) { tree[k] = tree[2*k]+tree[2*k+1];

45 Implementação Primeiro, a função atualiza o valor no nível inferior da árvore. Depois disso, a função atualiza os valores de todos os nós de árvore internos, até chegar ao nó superior da árvore. Ambas as funções acima funcionam no tempo O(log n), uma vez que uma árvore de segmentos de n elementos consiste em níveis de O(log n), e as funções se movem um nível mais alto na árvore em cada etapa.

46 Outras consultas As árvores de segmentação podem suportar todas as consultas de intervalo onde é possível dividir um intervalo em duas partes, calcular a resposta separadamente para ambas as partes e, em seguida, combinar as respostas com eficiência. Exemplos de tais consultas são mínimas e máximas, o maior divisor comum, e operações de bits e, ou e xor.

47 Outras consultas Por exemplo, a seguinte árvore de segmentação suporta consultas mínimas:

48 Outras consultas Nesse caso, cada nó da árvore contém o menor valor no intervalo do vetor correspondente. O nó superior da árvore contém o menor valor em todo o vetor. As operações podem ser implementadas como anteriormente, mas em vez das somas, os mínimos são calculados. A estrutura de uma árvore de segmentação também nos permite usar a pesquisa binária para localizar elementos do vetor. Por exemplo, se a árvore suportar consultas mínimas, podemos encontrar a posição de um elemento com o menor valor no tempo O(log n).

49 Outras consultas Por exemplo, na árvore acima, um elemento com o menor valor 1 pode ser encontrado atravessando um caminho para baixo do nó superior:

50 Técnicas adicionais Compressão do índice Uma limitação nas estruturas de dados que são construídas sobre um vetor é que os elementos são indexados usando números inteiros consecutivos. Dificuldades surgem quando são necessários um tamanho maior dos índices. Por exemplo, se desejarmos usar o índice 10 9, o vetor deve conter 10 9 elementos que exigiriam muita memória. No entanto, muitas vezes podemos ignorar essa limitação usando a compressão de índice, onde os índices originais são substituídos pelos índices 1, 2, 3, etc. Isso pode ser feito se conhecermos todos os índices necessários antes do algoritmo.

51 Técnicas adicionais A ideia é substituir cada índice original x por c(x) onde c é uma função que comprime os índices. Exigimos que a ordem dos índices não mude, então se a < b, então c(a) < c(b). Isso nos permite realizar consultas conveniente, mesmo que os índices sejam compactados. Por exemplo, se os índices originais são 555, 10 9 e 8, os novos índices são: c(8) = 1 c(555) = 2 c(10 9 ) = 3

52 Atualizações de intervalo Até agora, implementamos estruturas de dados que suportam consultas de alcance e atualizações de valores únicos. Consideremos agora uma situação oposta, onde devemos atualizar os intervalos e recuperar valores únicos. Nós nos concentramos em uma operação que aumenta todos os elementos em um intervalo [a, b] por x. Surpreendentemente, podemos usar as estruturas de dados apresentadas neste capítulo também nesta situação. Para fazer isso, nós criamos um vetor de diferenças cujos valores indicam as diferenças entre valores consecutivos no vetor original. Assim, o vetor original é o vetor de fontes de prefixo do vetor de diferenças. Por exemplo, considere a seguinte vetor:

53 Atualizações de intervalo O vetor de diferenças para o vetor acima é o seguinte: Por exemplo, o valor 2 na posição 6 na matriz original corresponde à soma = 2 na matriz de diferenças.

54 Atualizações de intervalo A vantagem do vetor de diferenças é que podemos atualizar um intervalo no vetor original alterando apenas dois elementos no vetor de diferenças. Por exemplo, se quisermos aumentar os valores do vetor original entre as posições 1 e 4 por 5, basta aumentar o valor do vetor de diferença na posição 1 em 5 e diminuir o valor na posição 5 em 5. O resultado é o seguinte:

55 Atualizações de intervalo De forma mais geral, para aumentar os valores no alcance [a, b] por x, aumentamos o valor na posição a por x e diminuímos o valor na posição b + 1 por x. Assim, só é necessário atualizar valores únicos e processar consultas de soma, para que possamos usar uma árvore indexada binária ou uma árvore de segmentação. Um problema mais difícil é suportar tanto as consultas de alcance quanto as atualizações de alcance. Veremos na próxima disciplina de CIC 111.

56 Exercício Você pode fazer eles no no codepit.io CIC senha: unifei

CIC 111 Análise e Projeto de Algoritmos II

CIC 111 Análise e Projeto de Algoritmos II CIC 111 Análise e Projeto de Algoritmos II Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 18 Tree queries Finding ancestors Subtrees and paths Lowest common ancestor Offline

Leia mais

CIC 111 Análise e Projeto de Algoritmos II

CIC 111 Análise e Projeto de Algoritmos II CIC 111 Análise e Projeto de Algoritmos II Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 27 Square root algorithms Combining algorithms Integer partitions Mo s algorithm Square

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá Manipulação de bits AULA 10 Manipulação de bits Todos os dados em programas de computador

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 02 C++ e bibliotecas Vector C++ Os programas que iremos usar vai ser em C++ e ter o

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 07 Programação Dinâmica Programação Dinâmica A programação dinâmica é uma técnica que

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá Algoritmos Gulosos AULA 06 Algoritmos Gulosos Um algoritmo guloso constrói uma solução para

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá sort AULA 02 Ordenação A classificação é um problema de design de algoritmo fundamental.

Leia mais

Aula 08. Estruturas de dados Árvore e Grafo

Aula 08. Estruturas de dados Árvore e Grafo Logo Aula 08 Estruturas de dados Árvore e Grafo 2 Árvore Estruturas estudadas até agora não são \ adequadas para representar dados que devem ser dispostos de maneira hierárquica Ex., hierarquia de pastas

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 0 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA Caminhos mais curtos Caminhos mais curtos Encontrar um caminho mais curto entre dois nós

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá Data structures AULA 04 Estrutura de Dados Uma estrutura de dados é uma maneira de armazenar

Leia mais

CIC 111 Análise e Projeto de Algoritmos II

CIC 111 Análise e Projeto de Algoritmos II CIC 111 Análise e Projeto de Algoritmos II Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 22 Combinatorics Binomial coefficients Catalan numbers Inclusion-exclusion Burnside

Leia mais

Aula 09. Percurso em grafo

Aula 09. Percurso em grafo Logo Aula 09 Percurso em grafo 2 Percurso de grafo Veremos agora a pesquisa em profundidade e pesquisa em largura de um grafo. Ambos os algoritmos recebem um nó inicial no grafo, e eles visitam todos os

Leia mais

CIC 111 Análise e Projeto de Algoritmos II

CIC 111 Análise e Projeto de Algoritmos II CIC 111 Análise e Projeto de Algoritmos II Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 16 Directed graphs Topological sorting Dynamic programming Successor paths Cycle detection

Leia mais

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Ordenação: MergeSort. Prof. Túlio Toffolo  BCC202 Aula 14 Algoritmos e Estruturas de Dados I Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: reifortes@iceb.ufop.br

Leia mais

Aula 18 Algoritmos básicos de busca e classificação

Aula 18 Algoritmos básicos de busca e classificação Aula 18 Algoritmos básicos de busca e classificação Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas e classificação de tabelas estão entre os mais usados. Considere por exemplo

Leia mais

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Aula 13: Ordenação - Heapsort Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de abandonar

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

Estrutura de dados 1. Ponteiros

Estrutura de dados 1. Ponteiros Estrutura de dados 1 Ponteiros Ponteiros Um ponteiro é um endereço de memória O valor de um ponteiro indica onde uma variável está armazenada Um ponteiro proporciona um modo de acesso a uma variável sem

Leia mais

Algoritmos e Estruturas de Dados 2006/2007

Algoritmos e Estruturas de Dados 2006/2007 Filas de prioridade Algoritmos e Estruturas de Dados 2006/2007 Filas de prioridade Uma fila de prioridade permite, pelo menos, duas operações sobre um conjunto de valores comparáveis: inserção de um elemento

Leia mais

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo PMR2300 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó (exceto a

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 05 Pesquisa Completa (Força Bruta) Pesquisa Completa A pesquisa completa é um método

Leia mais

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES Listas de Prioridades! Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade! A prioridade associada a um dado pode

Leia mais

Aula 05. Modularização Função Subrotina Recursividade

Aula 05. Modularização Função Subrotina Recursividade Logo Aula 05 Modularização Função Subrotina Recursividade 2 Modularização A modularização é um processo que aborda os aspectos da decomposição de algoritmos em módulos. Módulo é um grupo de comandos, constituindo

Leia mais

Busca em Regiões Ortogonais

Busca em Regiões Ortogonais Busca em Regiões Ortogonais Claudio Esperança Paulo Roma 1 O problema O problema O problema consiste em recuperar objetos tipicamente pontos que intersectam ou estão contidos numa região simples do espaço

Leia mais

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR HeapSort Filas de Prioridade Heap David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de

Leia mais

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010 Filas de prioridade Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010 Qual a Utilidade das Filas de Prioridade? Trabalhos maiores devem ser executados no fim (mesmo que não tenha sido o último

Leia mais

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

CIC 111 Análise e Projeto de Algoritmos II

CIC 111 Análise e Projeto de Algoritmos II CIC 111 Análise e Projeto de Algoritmos II Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 29 Geometry Complex numbers Points and lines Polygon area Distance functions Geometry

Leia mais

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos ÁRVORES BINÁRIAS DE BUSCA Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REFERÊNCIA Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Cap. 4 INSTITUTO DE COMPUTAÇÃO

Leia mais

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

HeapSort. Estrutura de Dados II Jairo Francisco de Souza HeapSort Estrutura de Dados II Jairo Francisco de Souza HeapSort Algoritmo criado por John Williams (1964) Complexidade O(NlogN) no pior e médio caso Mesmo tendo a mesma complexidade no caso médio que

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos

Leia mais

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Revisão Tipos escalares primitivos Tipos constituídos de uma linguagem Ponteiros Alocação estática versus

Leia mais

AED2 - Aula 04 Vetores ordenados e árvores de busca

AED2 - Aula 04 Vetores ordenados e árvores de busca AED2 - Aula 04 Vetores ordenados e árvores de busca Considere um vetor ordenado v de tamanho n. Ele suporta as seguintes operações: busca - dada uma chave k, devolva um apontador para um objeto com esta

Leia mais

Treinamento Olimpíada Brasileira de Informática

Treinamento Olimpíada Brasileira de Informática Treinamento Olimpíada Brasileira de Informática Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 04 1/2 Estrutura de Repetição Bruno Otávio, George, Gabriel Taets, Gabriel Huhn,Thiago

Leia mais

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Divisão e Conquista Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 27 Divisão e Conquista É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Consiste em 3 passos: Dividir

Leia mais

ESTRUTURA DE DADOS (TCC )

ESTRUTURA DE DADOS (TCC ) ESTRUTURA DE DADOS (TCC-00.319) Listas lineares Cristina Boeres 2 Estrutura de Dados! Listas lineares! estática! dinâmicas! Como manipulá-las:! pilhas! filas Listas Lineares 3! fácil manipulação! agrupa

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

Árvore B. Uma Árvore B de ordem m éumaárvore,talque: Cada nó contém no máximo m

Árvore B. Uma Árvore B de ordem m éumaárvore,talque: Cada nó contém no máximo m Árvore B Uma Árvore B de ordem m éumaárvore,talque: Cada nó contém no máximo m 1valores; Os valores dentro de cada nó estão ordenados; Todos os valores na subárvore esquerda de um valor são menores que

Leia mais

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo tmelo@uea.edu.br www.tiagodemelo.info Observações O conteúdo dessa aula é parcialmente proveniente do Capítulo 11 do livro Fundamentals of

Leia mais

Ponteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço.

Ponteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço. Logo Aula 06 Ponteiros 2 Ponteiros Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço. Um exemplo clássico disto

Leia mais

Análise de complexidade

Análise de complexidade Introdução Algoritmo: sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador) Estratégia: especificar (definir propriedades) arquitectura

Leia mais

Sub-rotinas David Déharbe

Sub-rotinas David Déharbe Sub-rotinas David Déharbe 1 1 Objetivos da aula Os conceitos de sub-rotina, funções e procedimentos; Como usar sub-rotinas em C: parâmetros de sub-rotinas: parâmetros formais e parâmetros efetivos. passagem

Leia mais

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Ordenação: QuickSort. Prof. Túlio Toffolo  BCC202 Aula 15 Algoritmos e Estruturas de Dados I Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2

Leia mais

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. 1.2 Outros 1. Projete

Leia mais

AED2 - Aula 11 Problema da separação e quicksort

AED2 - Aula 11 Problema da separação e quicksort AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos

Leia mais

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária Túlio Toffolo www.decom.ufop.br/toffolo Pesquisa em Memória Primária n Introdução - Conceitos Básicos n Pesquisa Sequencial n Pesquisa Binária n Árvores

Leia mais

O problema do 3*n Otimização

O problema do 3*n Otimização O problema do 3*n + 1 - Otimização Este documento apresenta uma breve descrição e análise comparativa de 12 implementações do problema 3*n+1. Id Nome do Arquivo P3nMais1_.jav a P3nMais1_ursivo.j ava Descrição

Leia mais

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade Gustavo E.A.P.A. Batista 25 de janeiro de 2005 1 Contextualização 2 Caminhos Mínimos Caminhos Mínimos de uma Origem

Leia mais

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma

Leia mais

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Conjuntos disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Desempenho análise complicada Uso problemas de grafos equivalência

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos Prof. Diego Buchinger diego.buchinger@outlook.com diego.buchinger@udesc.br Prof. Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Algoritmos com Inteiros Grandes

Leia mais

Vamos considerar um arquivo de dados que armazena uma lista de alunos. Cada registro é um objeto com um número de matrícula e um nome.

Vamos considerar um arquivo de dados que armazena uma lista de alunos. Cada registro é um objeto com um número de matrícula e um nome. Tabelas de dispersão Vamos considerar um arquivo de dados que armazena uma lista de alunos. Cada registro é um objeto com um número de matrícula e um nome. A tabela está sujeita a dois tipos de operação:

Leia mais

CCO 016 Fundamentos de Programação

CCO 016 Fundamentos de Programação CCO 016 Fundamentos de Programação Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá Aula 05 Entrada de dados Leia scanf ou cin Entrada de Dados Entrada de dados compreende a operação

Leia mais

Ordenação por Intercalação Métodos de Ordenação Parte 4

Ordenação por Intercalação Métodos de Ordenação Parte 4 Ordenação por Intercalação Métodos de Ordenação Parte 4 SCC-601 Introdução à Ciência da Computação II Rosane Minghim 2010 Revisando... Também chamado merge-sort Idéia básica: dividir para conquistar Um

Leia mais

Aula 15 Variáveis Indexadas (vetores)

Aula 15 Variáveis Indexadas (vetores) Aula 15 Variáveis Indexadas (vetores) Além das variáveis normais já conhecidas, podemos ter também variáveis indexadas. Tais variáveis são referenciadas por um nome e um índice. Especialmente úteis para

Leia mais

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência Introdução a Programação Ponteiros e Passagem de Argumentos por Referência Tópicos da Aula Hoje aprenderemos a manipular endereços de memória ou ponteiros Variáveis e Endereços Conceito de Ponteiro Operadores

Leia mais

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II Ordenação: Heapsort Algoritmos e Estruturas de Dados II Introdução Possui o mesmo princípio de funcionamento da ordenação por seleção Selecione o menor item do vetor Troque-o pelo item da primeira posição

Leia mais

Linguagens de Programação Aula 11

Linguagens de Programação Aula 11 Linguagens de Programação Aula 11 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Uma definição de subprograma descreve as ações representadas pelo subprograma Subprogramas podem ser funções

Leia mais

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)

Leia mais

CORREÇÃO DE ALGORITMOS E

CORREÇÃO DE ALGORITMOS E AULA 3 CORREÇÃO DE ALGORITMOS E PROGRAMAS É fato que estamos muito interessados em construir algoritmos e programas eficientes, conforme vimos na aula 2. No entanto, de nada vale um algoritmo eficiente

Leia mais

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo ( Análise de Problemas Recursivos Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Lembrando de Recursividade Procedimento que chama a si mesmo Recursividade permite

Leia mais

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Ordenação: HeapSort. Prof. Túlio Toffolo   BCC202 Aula 17 Algoritmos e Estruturas de Dados I 2014-01 Aula 16 Fila de Prioridade / HeapSort Adaptado por Reinaldo Fortes para o curso de 2014-01 Arquivo original: Aula 17: HeapSort Ordenação: HeapSort Prof. Túlio Toffolo http://www.toffolo.com.br

Leia mais

Métodos de Ordenação Parte I

Métodos de Ordenação Parte I Estrutura de Dados II Métodos de Ordenação Parte I Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais da Prof a Ana Eliza e Prof. Robson Lins Rearranjar

Leia mais

Estruturas de Repetição

Estruturas de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números

Leia mais

Classificação e Pesquisa

Classificação e Pesquisa Classificação e Pesquisa Pesquisa de Dados - Seqüencial - Binária Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Onde Estamos Ementa Pesquisa de Dados Seqüencial Binária

Leia mais

CCO 016 Fundamentos de Programação

CCO 016 Fundamentos de Programação CCO 016 Fundamentos de Programação Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 09 Agregados Homogêneos Variáveis Indexadas Vetores EXEMPLO 1 Um programa deve calcular quem

Leia mais

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira. Algoritmos e Estrutura de Dados II Árvore Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estruturas de dados lineares (pilha, fila) são estruturas que guardam coleções de elementos que são acessados

Leia mais

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Lista Ordenada Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Conteúdo Definição Operações Representações Contígua Encadeada Aplicação Exercícios 2

Leia mais

Algoritmos de Busca em Vetores

Algoritmos de Busca em Vetores Algoritmos de Busca em Vetores INF1005 Programação I Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC 1 busca em vetores tópicos busca linear (sequencial) busca binária referência Capítulo 17 do livro

Leia mais

Aula 04. Agregados Homogêneos. Agregados Heterogêneos. Matrizes

Aula 04. Agregados Homogêneos. Agregados Heterogêneos. Matrizes Logo Aula 04 Agregados Homogêneos Matrizes Agregados Heterogêneos 2 Matriz Da mesma forma que as variáveis indexadas vetoriais, vistas anteriormente, as variáveis indexadas bidimensionais são utilizadas

Leia mais

Algoritmos e Estruturas de Dados 2005/2006

Algoritmos e Estruturas de Dados 2005/2006 Filas de prioridade Algoritmos e Estruturas de Dados 2005/2006 Filas de prioridade Uma fila de prioridade permite, pelo menos, duas operações sobre um conjunto de valores comparáveis: inserção de um elemento

Leia mais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013 Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void

Leia mais

Estruturas Compostas Matriz

Estruturas Compostas Matriz Estruturas Compostas Matriz Profa. Dra. Elisa Yumi Nakagawa 1. Semestre de 2017 Slides inicialmente preparados pela Profa. Dra. Simone Souza 2 Introdução n Como armazenar um nome em um programa? n Uso

Leia mais

Carlos Eduardo Batista. Centro de Informática - UFPB

Carlos Eduardo Batista. Centro de Informática - UFPB Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Aritmética de ponteiros em C (continuação) O que acontece na memória? Ponteiro para ponteiro etc. Métodos de pesquisa

Leia mais

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Medida do Tempo de Execução de um Programa O projeto de algoritmos é fortemente influenciado pelo

Leia mais

Programação científica C++

Programação científica C++ Programação científica C++ NIELSEN CASTELO DAMASCENO Slide 8 Matrizes como argumento de funções O nome de uma matriz (sem os colchetes) representa o endereço onde a matriz está armazenada. Ao passar o

Leia mais

Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP

Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP Programação I Aula 16 Mais exemplos de recursão DCC/FCUP DCC/FCUP 2019 1/ 28 Nesta aula 1 Desenhar árvores 2 Calcular potências 3 Ordenação Quicksort DCC/FCUP 2019 2/ 28 Desenhar árvores Vamos fazer uma

Leia mais

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Análise de Complexidade de Algoritmos. mario alexandre gazziro Análise de Complexidade de Algoritmos mario alexandre gazziro Definição A complexidade de um algoritmo consiste na quantidade de esforço computacional necessária para sua execução. Esse esforço é expresso

Leia mais

Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou

Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou também denominada de tabela hashing com endereçamento aberto.

Leia mais

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões.

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões. UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO MATEMÁTICA COMBINATÓRIA 4 a Lista de Exercícios Gabarito de algumas questões. Este gabarito foi feito direto no computador

Leia mais

Aula 14: Funções Passagem de Parâmetros por Referência

Aula 14: Funções Passagem de Parâmetros por Referência CI208 - Programação de Computadores Aula 14: Funções Passagem de Parâmetros por Referência Prof. MSc. Diego Roberto Antunes diegor@inf.ufpr.br www.inf.ufpr.br/diegor Universidade Federal do Paraná Setor

Leia mais

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior Árvore Binária de Busca (ABB) o valor associado à raiz é sempre maior que o valor associado a qualquer nó da sub-árvore à esquerda

Leia mais

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira SCC-60 Introdução à Ciência da Computação II Ordenação e Complexidade Parte 3 Lucas Antiqueira Ordenação: Utiliza uma estrutura de dados chamada heap para ordenar. Um heap é um vetor (array) que representa

Leia mais

MC102 Algoritmos e Programação de Computadores

MC102 Algoritmos e Programação de Computadores MC102 Algoritmos e Programação de Computadores Instituto de Computação UNICAMP Primeiro Semestre de 2014 Roteiro 1 Maior número 2 Soma de n números 3 Fatorial 4 Máximo Divisor Comum (MDC) 5 Números primos

Leia mais

Aula 3: Algoritmos: Formalização e Construção

Aula 3: Algoritmos: Formalização e Construção Aula 3: Algoritmos: Formalização e Construção Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Algoritmos: Formalização e Pseudo-Código Programação de

Leia mais

LINGUAGEM C: ARRAY: VETORES E MATRIZES

LINGUAGEM C: ARRAY: VETORES E MATRIZES LINGUAGEM C: ARRAY: VETORES E MATRIZES Prof. André Backes POR QUE USAR ARRAY? As variáveis declaradas até agora são capazes de armazenar um único valor por vez. Sempre que tentamos armazenar um novo valor

Leia mais

Teoria dos Grafos Aula 23

Teoria dos Grafos Aula 23 Teoria dos Grafos Aula 23 Aula passada Apresentação de trabalhos Discussão da prova Subset sum Problema da mochila Aula de hoje Caminho mais curto entre todos os pares Algortimo de Floyd Warshall Programação

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.6. Ponteiros 3.6.1. Introdução 3.6.2. Uso

Leia mais

Comparação com Divisão e Conquista

Comparação com Divisão e Conquista Programação Dinâmica Programação Dinâmica Fernando Lobo Algoritmos e Estrutura de Dados II Outra técnica de concepção de algoritmos, tal como Divisão e Conquista ou Estratégias Greedy. O termo Programação

Leia mais

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

CAL ( ) MIEIC/FEUP Estruturas de Dados ( ) Conjuntos Disjuntos R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CPAL, 2010/2011 1 Conjuntos Disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura

Leia mais

Árvores Binárias de Busca

Árvores Binárias de Busca Árvores AVL Árvores Binárias de Busca Altura de uma árvore binária (AB): igual à profundidade, ou nível máximo, de suas folhas A eficiência da busca em árvore depende do seu balanceamento Algoritmos de

Leia mais

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Listas de Prioridade Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Capítulo 6 Prioridade } Algumas aplicações precisam recuperar rapidamente um dado

Leia mais

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio Programação II Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio Árvores Dados organizados de maneira hierárquica Exemplos: arquivos em diretórios, subdivisão de espaço 2D em um

Leia mais