CIC 110 Análise e Projeto de Algoritmos I
|
|
- Anderson Tuschinski Gameiro
- 5 Há anos
- Visualizações:
Transcrição
1 CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá
2 AULA 02 C++ e bibliotecas Vector
3 C++ Os programas que iremos usar vai ser em C++ e ter o seguinte cabeçalho e corpo: #include <bits/stdc++.h> using namespace std; int main() // Aqui você coloca a solução do problema return 0;
4 Ordem do programa Qual a ordem do programa a seguir? Qual o tempo para n = 100? n = 1000? #include <bits/stdc++.h> using namespace std; int main() int n; scanf("%d", &n); for (int i = 1; i <= n; i++) printf("%d\n", i); return 0;
5 Arquivo sh Salve o programa anterior com aula.cpp Escreva o seguinte programa e salve como aula.sh #!/bin/bash g++ aula.cpp time./a.out <entrada.txt >s g++ -O1 aula.cpp time./a.out <entrada.txt >s g++ -O2 aula.cpp time./a.out <entrada.txt >s g++ -O3 aula.cpp time./a.out <entrada.txt >s
6 Tempo com n = 100 Vá ao terminal e rode o./aula.sh O que significa os tempos: real user sys 0m0.006s 0m0.001s 0m0.005s real user sys 0m0.010s 0m0.002s 0m0.004s real user sys 0m0.011s 0m0.002s 0m0.005s real user sys 0m0.007s 0m0.003s 0m0.003s
7 Tempo com n = 1000 Tempo com n = 1000 E agora? Como fica o tempo? Será que tem diferença com n = 10000?
8 Programa 2 Repita o procedimento para o programa. #include <bits/stdc++.h> using namespace std; int main() int n; scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) printf("%d\n", i); return 0;
9 Ordem da magnitude Repita o procedimento para os programas. #include <bits/stdc++.h> using namespace std; int main() int n; scanf("%d", &n); for (int i = 1; i <= 3*n; i++) printf("%d\n", i); return 0; #include <bits/stdc++.h> using namespace std; int main() int n; scanf("%d", &n); for (int i = 1; i <= n + 5; i++) printf("%d\n", i); return 0;
10 Ordem da magnitude Repita o procedimento para os programas. #include <bits/stdc++.h> using namespace std; int main() int n; scanf("%d", &n); for (int i = 1; i <= n; i+=2) printf("%d\n", i); return 0;
11 Fase Repita o procedimento para o programa. #include <bits/stdc++.h> using namespace std; int main() int n; scanf("%d", &n); for (int i = 1; i <= n; i+=2) printf("%d\n", i); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) printf("%d\n", i); for (int i = 1; i <= 3*n; i++) printf("%d\n", i); return 0;
12 Varias variáveis Repita o procedimento para o programa. #include <bits/stdc++.h> using namespace std; int main() int n, m; scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) printf("%d\n", i); return 0;
13 Recursão Repita o procedimento para o programa. #include <bits/stdc++.h> using namespace std; int f(int n) if (n == 1) return 1; f(n-1); int main() int n; scanf("%d", &n); printf("%d\n", f(n)); return 0;
14 Recursão Repare que a função f do programa anterior é de ordem O(1). Contudo, a função recursiva chama o programa n vezes, tendo um tempo total de O(n).
15 Recursão Repita o procedimento para o programa. #include <bits/stdc++.h> using namespace std; int g(int n) if (n == 1) return 1; g(n-1); g(n-1); int main() int n; scanf("%d", &n); printf("%d\n", g(n)); return 0;
16 Recursão Neste caso, cada chamada de função gera duas outras chamadas, exceto n = 1. Vamos ver o que acontece quando g é chamado com o parâmetro n. A tabela a seguir mostra as chamadas de função produzidas por esta única chamada: função chamada número de chamadas g(n) 1 g(n-1) 2 g(n-2) 4 Com base nisso, a complexidade do tempo é g(1) 2 n n 1 =2 n 1=O(2 n )
17 paper Estude o assunto anterior, os programas e escreva um paper que explique os resultados. Não esqueça de que o paper não pode ter copia de texto. Deve ter no mínimo 2 ou 3 páginas. Procure o professor se for o caso.
18 Vector A classe vector é uma alternativa à representação de array primitivo. vector<int> v; Alguns métodos: v.size(); // retorna tamanho do vetor v v.empty(); // determina se vetor v está vazio vx.resize(novo_tamanho); // redimensiona vetor v v2 = v; // cópia v em v2
19 Vector A classe vector é uma alternativa à representação de array primitivo. vector<int> v; Alguns métodos: v.size(); // retorna tamanho do vetor v v.empty(); // determina se vetor v está vazio vx.resize(novo_tamanho); // redimensiona vetor v v2 = v; // cópia v em v2 v.push_back(x); // inserir elemento no vector v.pop_back(x); // retira o ultimo elemento do vector v.erase(v.begin(), v.end()); // limpa o vetor sort(v.begin(),v.end()); //ordena o vetor
20 Iterator É o mecanismo usado para "andar", elemento por elemento, por uma coleção de dados. É uma forma abstrata e genérica de tratar o avanço entre os elementos dessa coleção. Esse avanço pode se dar de várias formas, inclusive ao contrário. O funcionamento exato depende de cada tipo de dado, o importante é que se um tipo possui um iterador em conformidade com a linguagem toda operação que iteração poderá ser feita com aquele objeto. Não importa para ele a complexidade da operação, nem como ela deverá ser feita. É uma forma independente da implementação de acessar os dados da coleção. Ele possui os métodos begin() e end() pra indicar onde começa e onde termina a iteração.
21 Iterator #include <bits/stdc++.h> using namespace std; int main() int n, x; vector <int> v; vector <int>:: iterator it; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &x); v.push_back(x); for (it = v.begin(); it!= v.end(); ++it) printf("%d ", *it); printf("\n"); return 0;
22 Problema Dado um vetor com números inteiros positivos e negativos, encontre a sublista contígua de maior soma a partir de uma lista de números. Por exemplo, dado o vetor V a seguir: V A sublista contígua de maior soma é: V
23 Histórico O problema de encontrar a sublista contígua de maior soma a partir de uma lista de números teve origem numa versão bidimensional mais complexa de um problema de emparelhamento de padrões inicialmente apresentado por Ulf Grenander, da Brown University. Ao perceber que o algoritmo cúbico era impraticável para a resolução da versão unidimensional mais simples do problema de identificação de sequências contínuas de maior soma, Grenander desenvolveu a versão quadrática do algoritmo. Posteriormente, Michael Shamos, da atual Carnegie-Mellon University, desenvolveu em 1977 a versão subquadrática do algoritmo por divisão e conquista.
24 Histórico Por fim, o estatístico J. (Jay) B. Kadane, da mesma Universidade de Shamos, desenvolveu dias depois a versão linear do algoritmo para o problema da sublista contígua de maior soma. Esse algoritmo permanece até os dias atuais como a versão mais eficiente e a melhor solução possível, pois qualquer algoritmo que pretenda resolver o problema em estudo deve necessariamente percorrer os N elementos da lista dada como entrada.
25 Kadane O algoritmo é chamado de Algoritmo de Kadane.
26 Solução 1 Uma maneira direta de resolver o problema é passar por todos os subarray possíveis, calcular a soma dos valores em cada subarray e manter a soma máxima. No programa a seguir, as variáveis i e j variam o primeiro e último índice do subarray e a soma dos valores é calculada para a variável soma. A variável melhor contém a soma máxima encontrada durante a pesquisa. A complexidade do tempo do algoritmo é O(n 3 ), porque consiste em três loops aninhados.
27 Solução de ordem 3 #include <bits/stdc++.h> using namespace std; int main() int n, soma_maior = 0, x; vector <int> v; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &x); v.push_back(x); for (int i = 0; i < n; i++) for (int j = i; j < n; j++)
28 Solução de ordem 3 int soma = 0; for (int k = i; k <= j; k++) soma += v[k]; soma_maior = max(soma_maior, soma); printf("a soma maior da sublista eh: %d\n", soma_maior); return 0;
29 Solução 2 É fácil tornar o Algoritmo anterior mais eficiente, basta remover um loop dele. Isto é possível calculando a soma da extremidade a direta conforme o subarray vai sendo movido. Após essa mudança, a complexidade do tempo é O(n 2 ).
30 Solução de ordem 2 #include <bits/stdc++.h> using namespace std; int main() int n, soma_maior = 0, x; vector <int> v; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &x); v.push_back(x);
31 Solução de ordem 2 for (int i = 0; i < n; i++) int soma = 0; for (int j = i; j < n; j++) soma += v[j]; soma_maior = max(soma_maior, soma); printf("a soma maior da sublista eh: %d\n", soma_maior); return 0;
32 Solução 3 Outra estratégia é a de Divisão e Conquista Para resolver um problema de tamanho N, resolva recursivamente 'b' problemas de tamanho aproximado N/b e combine suas soluções para obter a resposta da versão completa do problema. Inicialmente, a lista de tamanho N é divida em dois subproblemas de tamanho aproximado N/2, os quais serão chamados, respectivamente, de A e B. Depois, recursivamente o algoritmo vai encontrar a maior sublista contígua em A (max_a) e a maior sublista contígua em B (max_b).
33 Solução 3 No entanto, a maior sublista contígua também pode estar parte em A e parte em B, o que será computado pela variável max_c. Para a computação de max_c, é utilizado o fato de que sua maior parte em A deve começar exatamente na extremidade direita de A (a qual faz fronteira com B) e avançar para dentro da parte A e da mesma forma a maior parte em B deve começar na extremidade de B que faz fronteira com A e avançar para dentro da parte B. Assim, max_c corresponderá à soma dessas duas maiores partes definidas anteriormente. sucessivas divisões por 2 do problema inicial e dos subproblemas gerados a cada chamada recursiva.
34 Solução 3 No caso base do algoritmo, é tratado o caso da menor sublista possível, a qual corresponde à de apenas um elemento e nesse caso a maior soma é o próprio elemento ou zero se o mesmo for negativo. Ainda no caso base, também é dado o tratamento para o caso da lista vazia, ou seja, com nenhum elemento. Nesse caso, a saída é definida como zero.
35 Solução 3 O tempo de execução do algoritmo de divisão e conquista é O(n log n), significativamente mais rápido que o algoritmo quadrático anteriormente apresentado. Esse tempo de execução advém do fato de que o algoritmo faz O(n) operações a cada nível das chamadas recursivas e o número de níveis corresponde a O(log n), a altura de uma árvore binária completa resultante das sucessivas divisões por 2 do problema inicial e dos subproblemas gerados a cada chamada recursiva.
36 Solução de ordem n log n #include <bits/stdc++.h> using namespace std; int divisao_conquista(vector <int> v, int a, int b) int c, max_a, max_b, max_c, soma; if (a == b) return max(0, v[a]); c = (a + b) / 2; max_a = divisao_conquista(v, a, c); max_b = divisao_conquista(v, c + 1, b); max_a = soma = v[c]; for (int i = c - 1; i >= a; --i) soma += v[i]; max_a = max(max_a, soma);
37 Solução de ordem n log n max_b = soma = v[c + 1]; for (int i = c + 2; i <= b; ++i) soma += v[i]; max_b = max(max_b, soma); max_c = max_a + max_b; max_c = max(max_a, max_c); return max(max_c, max_b);
38 Solução de ordem n log n int main() int n, soma_maior, x; vector <int> v; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &x); v.push_back(x); soma_maior = divisao_conquista(v, 0, n); printf("a soma maior da sublista eh: %d\n", soma_maior); return 0;
39 Solução 4 Surpreendentemente, é possível resolver o problema em O(n), o que significa que apenas um loop é suficiente. A ideia é calcular, para cada posição da matriz, a soma máxima de um subarray que termina nessa posição. Depois disso, a resposta para o problema é o máximo dessas somas. Considere o subproblema de encontrar o subarray da soma máxima que termina na posição i. Existem duas possibilidades: 1.O subarray apenas contém o elemento na posição i. 2.O subarray consiste em um subarray que termina na posição i - 1, seguido do elemento na posição i.
40 Solução 4 No último caso, uma vez que queremos encontrar um subarray com soma máxima, o subarray que termina na posição i - 1 também deve ter a soma máxima. Assim, podemos resolver o problema de forma eficiente ao calcular a soma de subarray máxima para cada posição final da esquerda para a direita. O algoritmo contém apenas um loop, de modo que a complexidade do tempo é O(n). Esta é também a melhor complexidade de tempo possível, porque qualquer algoritmo para o problema tem que examinar todos os elementos da matriz pelo menos uma vez.
41 Solução de ordem 1 Solução de ordem 1 #include <bits/stdc++.h> using namespace std; int main() int n, soma_maior, soma, x; vector <int> v; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &x); v.push_back(x); soma_maior = soma = 0; for (int i = 0; i < n; i++) soma = max(v[i], soma + v[i]); soma_maior = max(soma_maior, soma); printf("a soma maior da sublista eh: %d\n", soma_maior); return 0;
42 Exercício Timus 1146 UVA 108 UVA UVA UVA 507 UVA UVA Codeforces 327 A Codeforces 279 B URI 1310 URI 1932 SPOJ BAPOSTAS SPOJ SALDO Você pode fazer eles no no codepit.io CIC senha: unifei
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 maisCIC 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 maisCIC 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 09 Consultas de Intervalo Consulta de Intervalo Neste capítulo, discutimos estruturas
Leia maisCIC 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 maisAula 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 maisCIC 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 maisCIC 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 maisAula 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 maisAula 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 maisAná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 maisAula 16: Laços aninhados e desvios
Aula 16: Laços aninhados e desvios Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aula Anterior Comandos de Repetição (Parte
Leia maisPonteiros. 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 maisAula 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 maisAula 03. Agregados Homogêneos Vetores String
Logo Aula 03 Agregados Homogêneos Vetores String 2 Agregados Homogêneos São as variáveis que agregam informações de tipos iguais. O conceito que fundamenta o uso de tais variáveis agregadas baseia-se no
Leia maisTreinamento 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 maisCCO 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 maisCIC 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 maisMAC2166 Introdução à Computação para Engenharia Escola Politécnica Terceira Prova 20 de junho de 2011
MAC2166 Introdução à Computação para Engenharia Escola Politécnica Terceira Prova 20 de junho de 2011 Nome: Assinatura: N ō USP: Turma: Professor: Instruções: 1. Não destaque as folhas deste caderno. 2.
Leia maisLista 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 maisBCC202 - 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 maisAlgoritmos e Estruturas de Dados I Linguagem C
Algoritmos e Estruturas de Dados I (DCC/003) Algoritmos e Estruturas de Dados I Linguagem C Aula Tópico 11 Recursividade 1 Recursão Na linguagem C, uma função pode chamar outra função. A função main()
Leia maisLista de exercícios sobre contagem de operações Prof. João B. Oliveira
Lista de exercícios sobre contagem de operações Prof. João B. Oliveira 1. metodo m ( Vetor V ) int i, res = 0; para i de 1 a V.size res = res + V[i]; return res; Soma de elementos de um vetor, O( ). 2.
Leia maisTreinamento Olimpíada Brasileira de Informática
Treinamento Olimpíada Brasileira de Informática Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 01 Introdução Estrutura do programa Prof. Roberto Affonso da Costa Junior rcosta62br@gmail.com
Leia maisProgramação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Leia maisAula 01. Programação Condicional Programação repetitiva
Logo Aula 01 Programação Condicional Programação repetitiva 2 Programação Condicional Uma programação condicional, como o próprio nome já diz, permite que determinadas instruções sejam executadas ou não,
Leia maisAlgoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema
Vectores: Algoritmos de Pesquisa Algoritmos e Estruturas de Dados 2005/2006 Introdução Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema noção de algoritmo muito
Leia maisEstruturas 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 maisMAC 2166 Introdução à Computação para Engenharia
MAC 2166 Introdução à Computação para Engenharia PROVA 2 QUESTÃO 1. Simule a execução do programa abaixo, destacando a sua saída. A saída do programa consiste de tudo que resulta dos comandos printf. int
Leia maisLinguagem de Programação I. Aula 08 Linguagem C: Arrays
Linguagem de Programação I Aula 08 Linguagem C: Arrays Da Aula Anterior Tipos de dados básicos em C Modificadores de tipo Declaração de Variáveis Operadores em C Estruturas de Controle Nesta Aula Arrays
Leia maisProgramaçã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 maisTreinamento Olimpíada Brasileira de Informática
Treinamento Olimpíada Brasileira de Informática Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 03 1/2 Estrutura Condicionais Linguagem de Programação C Bruno Otávio, George,
Leia maisDivisã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 maisSuponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?
Funções Suponha um conjunto habitacional, com várias famílias...... imagina se todas elas morassem em uma única casa? Funções Introdução à Computação 1 de 28 Funções Na Programação, funções são conjuntos
Leia maisAnálise de Complexidade para algoritmos iterativos e recursivos
Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa Análise de Complexidade para algoritmos iterativos e recursivos Algoritmos iterativos - complexidade expressa através de somatórios. Algoritmos
Leia maisDURAÇÃO DA PROVA: 2 horas
MAC2166 Introdução à Computação Escola Politécnica Primeira Prova 07 de abril de 2015 Nome: Assinatura: N ō USP: Turma: Professor: Instruções: 1. Não destaque as folhas deste caderno. 2. A prova contém
Leia maisAula 15: Repetição (Parte 3)
Aula 15: Repetição (Parte 3) Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aula Anterior Breve Revisão Comandos de Decisão
Leia maisAula 07. Estruturas de dados Lista, Pilha, Fila Pair, Map, Set e Bitset
Logo Aula 07 Estruturas de dados Lista, Pilha, Fila Pair, Map, Set e Bitset 2 Estrutura de Dados Estrutura de dados já foi vista em vetores, que foi uma maneira de manipular várias informações (variáveis
Leia maisAnálise e Complexidade de Algoritmos
Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação
Leia maisOrdenação. Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho BCC402 Aula 04 Algoritmos e Programação Avançada
Ordenação Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho http://www.toffolo.com.br BCC402 Aula 04 Algoritmos e Programação Avançada Aplicações Como testar se todos os elementos de um conjunto
Leia maisLinguagens de Programação I
Linguagens de Programação I Tema # 7 Vetores ou Matrizes Unidimensionais Matrices Multidimencionais Susana M Iglesias 1 INTRODUÇÃO Um vetor geralmente é associado a uma lista ou conjunto de elementos similares,
Leia maisDesafios de Programação
Desafios de Programação 2018.1 Programação Dinâmica É um método de projeto de algoritmos que utiliza a memorização para melhorar a eficiência de um algoritmo. Método parecido com o de divisão e conquista
Leia maisDURAÇÃO DA PROVA: 2 horas
MAC2166 Introdução à Computação para Engenharia Escola Politécnica Primeira Prova 09 de abril de 2012 Nome: Assinatura: N ō USP: Turma: Instruções: Professor: 1. Não destaque as folhas deste caderno. 2.
Leia maisAula 10: Manipulação do fluxo de laços
Aula 10: Manipulação do fluxo de laços Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2018/2 Departamento de Computação UFOP Aula Anterior Laços aninhados Exemplos
Leia maisMC-102 Aula 08 Comandos Repetitivos
MC-102 Aula 08 Comandos Repetitivos Instituto de Computação Unicamp 13 de Setembro de 2016 Roteiro 1 Exemplos com laços Menu de Escolhas Representação Binário-Decimal Representação Decimal-Binário 2 Laços
Leia maisREVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento
Leia maisOrdenaçã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 maisLaboratório de programação II
Laboratório de programação II Standard Template Library (STL) Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Standard Template Library Biblioteca padronizada de funções Oferece um
Leia maisAnálise e Complexidade de Algoritmos
Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Algoritmos Divisão e Conquista Construção incremental Resolver o problema para um sub-conjunto dos elementos de entrada; Então, adicionar
Leia maisCCO 016 / COM 110 Fundamentos de Programação
CCO 016 / COM 110 Fundamentos de Programação Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 06 Operações matemáticas Comandos Sequenciais Comandos Sequenciais na Linguagem de
Leia maisRoteiro Prático Nº 13 Recursividade
UNIVERSIDADE FEDERAL DE ITAJUBÁ UNIFEI CAMPUS ITABIRA BAC004 TÉCNICAS DE PROGRAMAÇÃO Professores: Claudia, Denílson, Fabiana, Fernando, Juliano, Natália, Raquel, Rodrigo, Sandro e Walter Roteiro Prático
Leia maisMC102 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 maisEstruturas de Dados Homogêneas (Vetores e Matrizes) e Ponteiros em C
Estruturas de Dados Homogêneas (Vetores e Matrizes) e Ponteiros em C 2015/1 Programação Básica de Computadores (INF 09325) Archimedes Detoni www.inf.ufes.br/~archimedesdetoni archimedesdetoni@inf.ufes.br
Leia maisMC-102 Aula 06 Comandos Repetitivos
MC-102 Aula 06 Comandos Repetitivos Instituto de Computação Unicamp 2 de Setembro de 2016 Roteiro 1 Comandos Repetitivos 2 Comando while 3 Comando do-while 4 O comando for 5 Exemplos com Laços Variável
Leia maisRecursão David Déharbe
Recursão David Déharbe 1 1 Objetivos da aula O conceito de recursão. Exemplos. Programação em C. 2 2 Roteiro da aula Revisão de funções; Motivação; Definição; Dois exemplos básicos; Recursão mútua; Dois
Leia maisAlgoritmos 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 maisAED2 - 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 mais1. Para cada pergunta selecione uma opção. Resposta correta +2, incorreta -1. [12 pontos]
* Universidade Federal do ABC Avaliação: Prova 01 (40 pontos) Disciplina: MCTA028 - Programação Estruturada Turma: Noturno A1 e A2 Professor: Jesús P. Mena-Chalco Data: 25/10/2016 Nome completo: RA: Instruções:
Leia mais5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)
5. Análise de Complexidade de Algoritmos João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog 2-2006/2007 Introdução Algoritmo: conjunto
Leia maisInstituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I
LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I Prof. Bruno E. G. Gomes Uma variável em um algoritmo pode ser vista como uma gaveta. A declaração de uma variável reserva uma gaveta (posição) de um certo
Leia maisDivisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder
Divisão e Conquista Norton T. Roman Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Construção incremental Ex: Consiste em, inicialmente, resolver
Leia maisCCO 016 / COM 110 Fundamentos de Programação
CCO 016 / COM 110 Fundamentos de Programação Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 12 Agregados Homogêneos Variáveis Indexadas matrizes Variáveis Indexadas bi dimensionais
Leia maisAula 17: Funções (Parte III) e Introdução a Vetores
Aula 17: Funções (Parte III) e Introdução a Vetores Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2018/2 Departamento de Computação UFOP Aula de Hoje 1 Exemplos
Leia maisCIC 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 maisSuponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?
Funções Suponha um conjunto habitacional, com várias famílias...... imagina se todas elas morassem em uma única casa? Funções Programação de Computadores 1 de 28 Funções Na Programação, funções são conjuntos
Leia maisProgramaçã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 maisRecursividade UFOP 1/48
BCC 201 - Introdução à Programação I Recursividade Guillermo Cámara-Chávez UFOP 1/48 Introdução I Recursividade: é um método de programação no qual uma função pode chamar a si mesma Muitas estruturas têm
Leia maisCentro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional
Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional Disciplina: Algoritmos e Estruturas de Dados Professor: Flávio Cardeal Lista de
Leia maisAnálise de Complexidade de Algoritmos
Análise de Complexidade de Algoritmos Algoritmos e Estruturas de Dados 2009/2010 Introdução Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema Análise de algoritmos:
Leia maisALGORITMOS I. Procedimentos e Funções
Procedimentos e Funções Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 1 MÓDULOS São blocos de instruções que realizam tarefas específicas. Carregado uma vez e pode ser executado quantas vezes
Leia maisEstruturas 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 maisCIC 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 maisTreinamento Olimpíada Brasileira de Informática
Treinamento Olimpíada Brasileira de Informática Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 02 Entrada e Saída de Dados Exercícios Saída de dados Saída de dados compreende
Leia maisRecursividade. Objetivos do módulo. O que é recursividade
Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade
Leia mais3. Vectores: Algoritmos de Pesquisa. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006)
3. Vectores: Algoritmos de Pesquisa João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog2-2006/2007 Introdução Algoritmo: conjunto
Leia maisFundamentos de Programação
Fundamentos de Programação Linguagem C++: arrays - aula I Bruno Emerson Gurgel Gomes 1 1 Instituto Federal de Educação, Ciência e Tecnologia do RN (IFRN) 2012 Bruno Gomes (IFRN) Fundamentos de Programação
Leia maisÁrvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira
Árvores SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Listas e árvores Listas lineares Um nó após o outro, adjacentes Nó sucessor e antecessor Diversas aplicações necessitam de estruturas
Leia maisIntrodução a Linguagem C (Parte I) UFPA Sistemas de Informação. Roberto Araujo 2013
Introdução a Linguagem C (Parte I) UFPA Sistemas de Informação Roberto Araujo 2013 Meu primeiro programa em C #include main() { printf( Primeiro Programa \n ); Biblioteca padrão Função principal
Leia maisComplexidade de algoritmos Notação Big-O
Complexidade de algoritmos Notação Big-O Prof. Byron Leite Prof. Tiago Massoni Engenharia da Computação Poli - UPE Motivação O projeto de algoritmos é influenciado pelo estudo de seus comportamentos Problema
Leia maisÁrvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich
Árvores Binárias SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista. Figuras editadas por Isadora Maria Mendes http://www.icmc.usp.br/~paulovic
Leia maisÉ interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser
É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número
Leia maisListas 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 maisAula 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 maisPermite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.
222222222222222222222222222 8 - FUNÇÕES 81 - Características básicas É um trecho independente de código, com objetivos bem definidos Programas em C, geralmente consistem em várias pequenas funções, ao
Leia maisFigura 1: Uma matriz contem elementos de um mesmo tipo, com início em (0,0). 30 é o número de colunas!
22 Matrizes Ronaldo F Hashimoto e Carlos H Morimoto Oobjetivodestaaulaéintroduzirotipomatriz Aofinaldessaaulavocêdeverásaber: descrever o que são matrizes em C Declarar matrizes Como acessar elementos
Leia maisAula 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 maisFundamentos de Programação
Fundamentos de Programação CP41F Aula 11 Prof. Daniel Cavalcanti Jeronymo Vetores (arrays). Vetores de caracteres (strings). Busca em vetores. Matrizes (arrays bidimensionais e multidimensionais). Universidade
Leia maisSub-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 mais1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.
Segunda lista de exercícios v100 Engenharia Elétrica - Eletrônica 2º Semestre de 2015 Prof: Daniel Rodrigo Ferraz Bonetti SSC0300 Linguagem de Programação e Aplicações 1 Faça um programa que leia uma string
Leia maisOrdenaçã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 maisProgramação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante
Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante Introdução Soma máxima de uma subsequência contígua Problema do troco Quantidade de formas de dar troco Problema da
Leia maisPuca Huachi Vaz Penna / José Américo T. Messias
BCC201 Introdução à Computação Turmas 61, 62, 63, 64, 65 e 66 Puca Huachi Vaz Penna / José Américo T. Messias Departamento de Computação Universidade Federal de Ouro Preto http://www.decom.ufop.br/puca
Leia maisClasses, Herança e Interfaces
Escola de Artes, Ciências e Humanidades EACH-USP ACH2002 Introdução à Ciência da Computação II Professor: Delano Medeiros Beder revisada pelo professor: Luciano Digiampietri EACH Segundo Semestre de 2011
Leia maisESTRUTURAS COMPOSTAS
ESTRUTURAS COMPOSTAS Variáveis Compostas Unidimensionais VETOR Clique para adicionar texto Profa. Dra. Elisa Yumi Nakagawa 1. Semestre de 2017 Slides inicialmente preparados pela Profa. Rosely Sanches
Leia maisProf. Marco Antonio M. Carvalho
Prof. Marco Antonio M. Carvalho Lembretes Lista de discussão Endereço: programaacao@googlegroups.com Solicitem acesso: http://groups.google.com/group/programaacao Página com material dos treinamentos http://www.decom.ufop.br/marco/extensao/obi/
Leia maisModularidade - Funções e Procedimentos
Modularidade - Funções e Procedimentos José Gustavo de Souza Paiva Problema Em diversas situações, é preciso executar uma tarefa específica diversas vezes em um programa, variando apenas os dados de entrada
Leia maisESTRUTURA 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 maisAula 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 maisQuantas variáveis para armazenar as notas e as médias são necessárias para resolver este problema?
Matrizes Problema: Ler as 5 notas de 7 alunos (identificados por um número entre e 6), calcular a média de cada aluno, e após imprimir as notas e médias dos alunos, classificados pela média. Quantas variáveis
Leia maisLista 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