Universidade de São Paulo - USP. Instituto de Física de São Carlos - IFSC. Programação de Alto Desempenho. Prática 1. André de Freitas Smaira
|
|
- Iasmin Marques Ribas
- 6 Há anos
- Visualizações:
Transcrição
1 Universidade de São Paulo - USP Instituto de Física de São Carlos - IFSC Programação de Alto Desempenho Prática 1 Aluno: André de Freitas Smaira
2 1 Otimização pelo Compilador Atualmente, os compiladores tem otimização própria, ajudando os programadores a melhorar consideravelmente o tempo de execução e o gasto de memória de seus programas sem se preocuparem, necessariamente, muito com isso. O compilador utilizado nesse curso (g++) tem várias opções de otimização [1], sendo que a mais simples delas é a opção -O, em que o compilador tenta reduzir o tamanho e o tempo de execução do programa sem utilizar nenhuma otimização que faça com que a compilação demore muito mais que o normal. Abaixo estão as linhas de comando que compilam o arquivo prog.cpp no programa prog sem e com otimização respectivamente: g++ prog.cpp -o prog g++ -O prog.cpp -o prog Os objetivos dessa primeira parte da prática são: Complexidade de Algoritmos: Mostrar a diferença de desempenho entre algoritmos de complexidades diferentes, exemplicados aqui pelos algoritmos de ordenação conhecidos como Bubble Sort, que está entre os algoritmos de mais fácil compreensão mas de maior tempo de execução, com complexidade O (n 2 ) no pior caso e no caso médio e O (n) no melhor caso, e Quicksort, que é mais difícil de se compreender, mas é o algoritmo de ordenação de menor tempo de execução possível para o caso médio e o melhor caso, com complexidade O (n log n), apesar de o pior caso ter complexidade O (n 2 ). Existem algoritmos de ordenação em que a complexidade de todos os casos são Θ (n log n), mas esse não é o objetivo desse trabalho. Otimização de Algoritmos: Mostrar a diferença de desempenho entre dois executáveis provenientes de um mesmo algoritmo diferenciados pela presença ou ausência da otimização explicada acima. Aqui serão comparados em relação ao tempo de execução cada um dos algoritmos com e sem a otimização. Apesar do gasto de memória também ser otimizado por essa opção, esse não é o objetivo desse trabalho. 1
3 Antes de começarmos, vale explicitar que a sessão 3 exibe as congurações do computador utilizado na execução desse trabalho, em que durante a execução dos programas nada mais era executado pelo usuário do computador e que cada programa foi executado para 15 vetores, ou, em termos das variáveis do programa, M = 15. Vamos iniciar nosso estudo comparando os tempos de execução dos dois algoritmos tratados sem a utilização da otimização descrita (gura 1). No primeiro gráco, percebemos claramente a melhor eciência do Quicksort em relação ao Bubble sort, sendo que a razão entre os tempos de execução do primeiro e do segundo, ou seja, a razão entre as velocidades de execução dos dois algoritmos para o maior valor de N é r = T BS T QS = v QS v BS = 2509,6623. Podemos agora fazer algumas contas para comprovar a complexidade teórica desses algoritmos: T BS = α BS n 2 e T QS = α QS n log n. Se igualarmos a razão entre essas duas expressões à razão obtida no gráco, obtemos n = , que é aproximadamente igual aos elementos reais no programa, o que mostra claramente que a complexidade de um programa para altos valores de N indica muito bem como esse programa se comporta em relação a outros. Essa diferença de 1% é referente a aproximações nas contas e à inclusão dos pontos de menores valores de N na determinação dos parâmetros do ajuste dos grácos. Figura 1: Comparação entre os tempos de execução dos algoritmos de ordenação Bubble sort e Quicksort sem otimização. Sendo T BS = (8, ) n 2 e T QS = (3, ) n log n. O primeiro gráco é exibido na escala linear e segundo na escala logarítmica 2
4 Analisando agora o gráco em escala logarítmica e deixando claro que o ajuste foi feito para todos os dados obtidos pelo programa (o que justica 3 dos 5 pontos do gráco estarem acima da curva), podemos adicionar que esses pontos fora da curva mostram que para pequenos valores de N (até 10000), o Quicksort, apesar de ainda ser cerca de 15 vezes mais rápido que o Bubble sort, tem eciência menor que o ajuste dos pontos para N bem maiores. Isso vai car claro, quando o gráco que exibe todos os pontos for utilizado para a demonstração da otimização. Esse é o comportamento normal da Quicksort para poucos elementos e, por isso, as implementações utilizadas para o Quicksort costumam utilizar outros métodos de ordenação, como o Insertion sort, que para pequenos vetores passa a ser mais eciente que o Quicksort. Mesmo o Bubble sort se torna mais eciente que o Quicksort para pequenos valores de N. Executando novamente os algoritmos para valores de N menores que 20, podemos encontrar o limite para o qual isso passa a ocorrer: N lim 8 (gura 2). Figura 2: Demonstração de que para certos valores de N, a eciência do Quicksort é menor até que o Bubble sort. Para essa experiência foram utilizados 1 N 19 e M = Podemos agora estudar como a otimização inuencia cada um dos métodos separadamente. Primeiro vamos ver na gura 3 essa inuência em relação ao algoritmo Bubble sort. Pelo resultado do programa e pelo gráco, podemos obter uma melhora média de desempenho do Bubble sort de 4,7 vezes. Além disso, percebemos no segundo gráco que a otimização desse algoritmo faz com que ele se torne mais eciente que a curva de ajuste do restante dos pontos para pequenos valores de N, em que a otimização o torna 5,8 vezes mais rápido. Podemos agora fazer o mesmo para o algoritmo de Quicksort, cuja comparação é indicada 3
5 Figura 3: Comparação entre o algoritmo Bubble sort otimizado e não otimizado. Sendo T n opt = (8, ) n 2 e T opt = (1, ) n 2. O primeiro gráco é exibido na escala linear e segundo na escala logarítmica na gura 4. Pelo resultado do programa e pelo gráco, podemos obter uma melhora média de desempenho do Quicksort de 3,7 vezes. Além disso, percebemos no segundo gráco que a otimização desse algoritmo faz com que ele se torne menos eciente que a curva de ajuste do restante dos pontos para pequenos valores de N, em que a otimização o torna 2,9 vezes mais rápido. Para essas duas últimas comparações, percebemos que o Bubble sort é melhor otimizado que o Quicksort. Isso ocorre pois o Quicksort está mais próximo do limite de desempenho para um algoritmo de ordenação, O (n log n), fazendo com que que mais difícil a melhora de desempenho através de qualquer tipo de otimização. Mesmo no Quicksort há uma melhora signicativa (de meia ordem de grandeza), mostrando a importância da otimização, mesmo que simples, como a otimização padrão do compilador, para um programa que se deseja rodar mais ecientemente. Passemos agora para a mesma comparação inicial (entre os dois algoritmos), mas para as versões otimizadas (gura 5). No primeiro gráco, novamente, percebemos a melhor eciência do Quicksort em relação ao Bubble sort, sendo que a razão entre os tempos de execução do primeiro e do segundo para o maior valor de N é r = T BS T QS 4 = v QS v BS = 1985,2863. Essa diminuição
6 Figura 4: Comparação entre o algoritmo Quicksort otimizado e não otimizado. Sendo T n opt = (3, ) n log n e T opt = (8, ) log n. O primeiro gráco é exibido na escala linear e segundo na escala logarítmica de eciência relativa se deve ao que já foi discutido sobre ser mais complicado otimizar um algoritmo que já esteja próximo do limiar de eciência, como é o caso do Quicksort. Figura 5: Comparação entre os tempos de execução dos algoritmos de ordenação Bubble sort e Quicksort com otimização. Sendo T BS = (1, ) n 2 e T QS = (8, ) n log n. O primeiro gráco é exibido na escala linear e segundo na escala logarítmica 5
7 Como na primeira vez, vamos analisar o gráco em escala logarítmica. Como já explicado, o Bubble sort se torna mais eciente que o Quicksort para pequenos valores de N. Podemos ver melhor essa tendência nesse gráo, já que a otimização aproxima essas duas curvas mais do que o normal nessa região. Executando novamente os algoritmos para valores de N menores que 20, podemos encontrar o limite para o qual isso passa a ocorrer: N lim 10,5 (gura 6). Podemos perceber que para o algoritmo otimizado, esse cruzamento ocorre para N lim um pouco maior, já que a otimização aproxima a eciência dos dois algoritmos para pequenos valores de N. Figura 6: Demonstração de que para certos valores de N, a eciência do Quicksort é menor até que o Bubble sort e que no caso otimizado esse valor de N é maior que no caso normal. Para essa experiência foram utilizados 1 N 19 e M = Finalmente podemos chegar à conclusão de que para altos valores de N, a complexidade de um algoritmo inuencia muito mais na eciência de um programa que uma possível otimização. Portanto, quanto quisermos um programa eciente, antes de tudo devemos pensar muito bem em como vamos tratar o problema para que a complexidade seja a menor possível e só depois procurar possíveis otimizações (caso seja necessário). Para pequenos valores de N (ordem de unidades), no entanto, podemos nos preocupar mais com otimizações, pois as complexidades não inuenciarão mais que um fator de algumas unidades. 2 Proles O termo inglês proling se refere a uma forma de análise de software dinâmica capaz de determinar o quanto de recurso computacional é consumido por cada parte do código [2], com 6
8 o objetivo de facilitar a otimização do programa por parte do programador. O objetivo dessa segunda parte da prática é justamente esse: analisar o consumo de recursos de um determinado programa. Para isso usaremos o aplicativo gprof da GNU. O programa que utilizaremos tem por objetivo calcular as trajetórias de um cavalo de jogo de xadrez em um tabuleiro quadrado, o que é uma tarefa bem custosa. Primeiro temos que compilar o programa com informações de depuração: g++ -g -pg cavalo1.cpp -o cavalo Em seguida, executamos o programa com seus três argumentos:./cavalo sendo estes, respectivamente, o tamanho do tabuleiro, a autorização de exibição das soluções possíveis e a profundidade do cálculo executado e das mensagens mostradas. Depois, basta-nos utilizar o gprof. Vamos fazer essa análise separando o programa de duas formas diferentes: por função e por linha. Para cada um deles, serão estudados os três maiores gastos de recursos. As duas linhas abaixo mostram as chamadas do gprof para os dois objetivos anteriores na ordem em que foram citados: gprof cavalo gprof -l cavalo Por função A tabela abaixo mostra quais as funções que mais tomam tempo, qual é esse tempo, qual a porcentagem desse tempo em relação ao total do programa e qual o número de vezes que cada uma delas é chamada. 7
9 Função Tempo (s) Porcentagem Número de Chamadas vizinhos(casa, Casa*, int&) const 4,32 32, Casa(int, int) 3,28 24, posicionacavalo(tabuleiro&, Casa, int) 1,65 12,56 25 Para resumir a tabela, em seguida é dito a que classe pertence cada função. Em negrito estão indicadas as classes e em seguida estão listados os componentes da mesma. Tabuleiro: vizinhos() Tabuleiro::Casa: Casa() Observamos na tabela que a terceira função, apesar de ter um percentual de consumo de tempo da mesma ordem de grandeza das outras, é chamada um número de vezes 7 ( sete) ordens de grandeza menor que a segunda. Isso indica que para ter um ganho de desempenho deste programa em relação a essas 3 funções deve-se diminuir o número de chamadas das duas primeiras ou diminuir a complexidade da terceira, já que dessas três a que gasta mais tempo por chamada à função é a terceira com 66,02ms/chamada contra um tempo desprezível por chamada das outras duas. Essa complexidade é relativamente tão alta pois essa é a função principal do programa, executando todos os possíveis movimentos dos cavalos, além de ser recursiva, o que acarreta em um aumento considerável de tempo de execução. As outras são apenas função auxiliar (vizinhos) e função construtora de uma classe auxiliar (Casa), que são inclusive chamadas inúmeras vezes dentro da própria posicionacavalo. Uma possibilidade de diminuição de tempo de execução para essa função é torná-la iterativa, já que toda função recursiva pode ser transformada em uma função iterativa. O problema dessa implementação é a diculdade. Geralmente a implementação recursiva de uma função é muito mais fácil de se entender e de se implementar que uma equivalente no formato iterativo. Por linha Analogamente à analise por funções, abaixo é mostrada a tabela indicando a linha, o tempo total de execução e a porcentagem em relação ao tempo total de execução do programa. Em 8
10 seguida vamos analisar cada uma delas. Linha Tempo (s) Porcentagem 24 2,76 21, ,55 19, ,23 9,33 Agora vamos analisar cada uma dessas linhas: 24: // Abaixo: classe auxiliar para representar os indicies de uma casa. class Casa { public: Casa(int const a=0, int const b=0) : i(a), j(b) {} int i, j; }; A linha 24 é a : i(a), j(b) {} Ela tem tanto gasto de tempo pois está dentro da função construtora da classe Casa, que como já visto na análise por função é a função que segundo gasta mais tempo e a função que é chamada mais vezes no programa. A função que gasta mais tempo tem muito mais linhas que esta. Por isto é que, apesar de a função ser a segunda função que mais gasta, tem a linha que mais gasta em seu interior. 119 e 121: // Metodo para calcular as vizinhas de uma casa dada no tabuleiro // Devolve apenas as vizinhas validas. 9
11 // Vizinhas sao as casas que podem ser alcancadas por um pulo de // cavalo da casa de partida. void Tabuleiro::vizinhos(Casa const c, Casa v[], int &M) const { // Array padrao guarda as posicoes relativas de todos os vizinhos static int padrao[maxviz][2] = { { -1, -2}, { -1, 2}, { 1, -2}, { 1, 2}, { -2, -1}, { -2, 1}, { 2, -1}, { 2, 1} }; Casa vizinha; M = 0; for (int i = 0; i < MAXVIZ; i++) { // Calcula vizinho de acordo com padrao vizinha = Casa(c.i + padrao[i][0], c.j + padrao[i][1]); // Se casa valida, aceita. Senao o proximo escreve sobre este. if (valida(vizinha)) { v[m] = vizinha; M++; } } } As linhas abaixo indicam as linhas descritas na tabela: vizinha = Casa(c.i + padrao[i][0], c.j + padrao[i][1]); if (valida(vizinha)) { v[m] = vizinha; M++; } Além de essas duas linhas estarem dentro da função que mais gasta tempo, elas estão dentro de um for de 8 elementos, o que faz elas serem acessadas 8 vezes dentro de cada chamada à função. A linha 119 gasta mais tempo pois a chamada à função Casa() gasta mais tempo que a chamada à função valida(), além de a primeira ter que fazer várias 10
12 contas para obter os parâmetros que serão enviados à função Casa(). 3 Especicações do Computador Para essa prática, foi utilizado um notebook da marca Toshiba com o sistema operacional Ubuntu 12.04, com as seguintes congurações: Processador Memória RAM Intel R Core TM i5-2410m CPU 2,30Ghz 2,30Ghz 6,00 GB 11
13 Referências [1] Optimize Options - Using the GNU Compiler Collection (GCC) Disponível em: Acessado em: 02/08/2012 [2] Gprof - Wikipedia Disponível em: Acessado em: 03/08/2012 [3] Proling (computer programming) - Wikipedia Disponível em: Acessado em: 03/08/
Distâncias entre vértces em um grafo. Implementação sequencial
Distâncias entre vértces em um grafo Implementação sequencial André de Freitas Smaira 16 de outubro de 2013 1 1 Introdução Nesse projeto, temos por objetivo a determinação das distâncias mínimas entre
Leia maisAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação Mario E. Matiusso Jr. (11028407) Bacharelado em Ciências da Computação Universidade Federal do ABC (UFABC) Santo André, SP Brasil mario3001[a]ig.com.br Resumo:
Leia maisAnálise e Projeto de Algoritmos
Análise e Projeto de Algoritmos Profa. Sheila Morais de Almeida DAINF-UTFPR-PG junho - 2018 Sheila Almeida (DAINF-UTFPR-PG) Análise e Projeto de Algoritmos junho - 2018 1 / 40 Este material é preparado
Leia maisCURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI
CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI O QUE SÃO ALGORITMOS DE ORDENAÇÃO? São algoritmos que organizam
Leia maisAnálise de Algoritmos Estrutura de Dados II
Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Análise de Algoritmos Estrutura de Dados II COM10078 - Estrutura de Dados II Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br
Leia maisA IMPORTÂNCIA DE THREADS NO DESEMPENHO DE APLICAÇÕES
A IMPORTÂNCIA DE THREADS NO DESEMPENHO DE APLICAÇÕES Euzébio da Costa Silva 1, Victor Pereira Ribeiro 2, Susana Brunoro Costa de Oliveira 3 1 29520-000, euzebioprogramacao@gmail.com 2 29520-000, victor3ifes@gmail.com
Leia maisAULA 23. Prof. Coelho
AULA 23 Prof. Coelho Ordenação: algoritmo Quicksort PF 11 http://www.ime.usp.br/ pf/algoritmos/aulas/quick.html Problema da separação Problema: Rearranjar um dado vetor v[p.. r] e devolver um índice q,
Leia maisAlgoritmos de Ordenação
Algoritmos de Ordenação ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material baseado em
Leia maisConstrução de Algoritmos II Aula 06
exatasfepi.com.br Construção de Algoritmos II Aula 06 André Luís Duarte Porque mil anos são aos teus olhos como o dia de ontem que passou, e como a vigília da noite. Salmos 90:4 Recursividade e complexidade
Leia maisComplexidade de Tempo e Espaço
Complexidade de Tempo e Espaço Profa. Sheila Morais de Almeida DAINF-UTFPR-PG junho - 2018 Sheila Almeida (DAINF-UTFPR-PG) Complexidade de Tempo e Espaço junho - 2018 1 / 43 Este material é preparado usando
Leia maisTécnicas de Projeto de Algoritmos
UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação Técnicas de Projeto de Algoritmos Material disponível para download em: www.profvaniacristina.com Profa. Vânia Cristina de Souza Pereira 03 _ Material
Leia maisMedida 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 maisALGORITMOS AVANÇADOS Lista de Exercícios 01. Luiz Leão
Lista de Exercícios 01 Luiz Leão luizleao@gmail.com http://www.luizleao.com Exercício 01 Qual a importância de estudarmos a complexidade dos algoritmos? Exercício 01 Resposta Qual a importância de estudarmos
Leia maisALGORITMOS DE ORDENAÇÃO
ALGORITMOS DE ORDENAÇÃO Prof. André Backes Conceitos básicos 2 Ordenação Ato de colocar um conjunto de dados em uma determinada ordem predefinida Fora de ordem 5, 2, 1, 3, 4 Ordenado 1, 2, 3, 4, 5 OU 5,
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 maisDisciplina de Algoritmos e Programação
Disciplina de Algoritmos e Programação Aula Passada 1º Programa: olamundo.c #include // biblioteca padrão de E/S /* Programa Olá Mundo */ int main(void) { printf( Olá mundo\n ); //exibe Olá mundo
Leia maisAnálise de Algoritmos
Análise de Algoritmos Parte 1 Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 04 Algoritmos e Estruturas de Dados I Qual a diferença entre um algoritmo e um programa? Como escolher o algoritmo
Leia maisINF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática
Leia mais4 O conceito de variável
4 O conceito de variável Para resolver problemas no computador é necessário manipular dados, sejam números ou caracteres. Se alguém precisa calcular o resultado de uma única conta provavelmente o melhor
Leia maisMedida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP
Medida do Tempo de Execução de um Programa Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Medida do Tempo de Execução de um Programa O projeto de algoritmos é fortemente influenciado pelo estudo
Leia maisALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão
Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 1.1 - Algoritmo 1.2 - Estrutura de Dados 1.2.1 - Revisão de Programas em C++ envolvendo Vetores, Matrizes, Ponteiros, Registros
Leia maisMétodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)
Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Hebert Coelho e Nádia Félix Ordenação É a operação de rearranjar os dados em uma determinada ordem. Problema da ordenação - Definição formal
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 maisLab. de Programação Concorrente em Física Primeira Prática
Lab. de Programação Concorrente em Física Primeira Prática Paulo Matias 5626309 24 de agosto de 2009 1 Introdução Nesta prática, avaliaremos a importância de se utilizar bons algoritmos e de otimizar o
Leia maisLinguagens de Programação Classificação
Classificação Classificação A proximidade que a linguagem de programação tem com a humana determina sua classe (o nível): Linguagem de máquina (primeira geração) Linguagem assembly - de montagem (segunda
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 maisVariáveis Compostas. Vanessa Braganholo
Variáveis Compostas Vanessa Braganholo vanessa@ic.uff.br Aula de hoje } Veremos os diferentes tipos de variáveis compostas (arrays) } Com uma dimensão (vetores) } Com duas ou mais dimensões (matrizes)
Leia maisProjeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 09 Algoritmos de Ordenação Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída: conjunto de itens
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Leia maisOrdenaçã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 mais1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.
Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica
Leia maisDESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES
DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES João Ricardo Kohler Abramoski (PAIC/FUNDAÇÃO ARAUCÁRIA), Sandra Mara Guse Scós Venske (Orientadora), e-mail: ssvenske@unicentro.br
Leia maisAULA 19 AULA 20. Ordenação: algoritmo Quicksort. Resumo. Melhores momentos
Melhores momentos Resumo AULA 19 função consumo de observação tempo bubble O(n 2 ) todos os casos insercao O(n 2 ) pior caso O(n) melhor caso insercaobinaria O(n 2 ) pior caso O(n lg n) melhor caso selecao
Leia maisSimulador didático de testes de algoritmos de ordenação
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA Simulador didático de testes de algoritmos de ordenação Nomes: Bruno Silva Guedes (159033) Matheus de Carvalho Proença (160184) Turma:
Leia maisInformática Parte 17 Prof. Márcio Hunecke
Escriturário Informática Parte 17 Prof. Márcio Hunecke Informática BUSCA SEQUENCIAL E BUSCA BINÁRIA SOBRE ARRAYS Busca sequencial em vetores não ordenados O termo busca sequencial (ou busca linear) expressa
Leia maisInfraestrutura de Hardware. Desempenho
Infraestrutura de Hardware Desempenho Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido e executado pelo HW? Qual é a interface entre
Leia maisMétodos de Ordenação Parte 3
Estrutura de Dados II Métodos de Ordenação Parte 3 Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais do Prof. Robson Lins Classificação em Memória Primária
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 maisAluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER
COMPARAÇÃO DE DESEMPENHO NA PROGRAMAÇÃO PARALELA HÍBRIDA (MPI + OPENMP) NA BUSCA DE TEXTO EM ARQUIVOS 1 COMPARISON OF PERFORMANCE IN HYBRID PARALLEL PROGRAMMING (MPI + OPENMP) IN SEARCH OF TEXT IN FILES
Leia maisQuick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.
Quick Sort Considerações Sobre Algoritmos de Ordenação Estagiário PAE: Jesimar da S. Arantes Professor: Claudio F. M. Toledo 27 de Setembro de 2017 Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick
Leia maisDesenvolvimento de Aplicações Desktop
Desenvolvimento de Aplicações Desktop Conceitos Básicos de Programação Professor: Charles Leite O Desenvolvimento de Programas A programação consiste em indicar como o computador (hardware) deve trabalhar
Leia maisBenchmarks. 1. Introdução
Benchmarks 1. Introdução Um Benchmark é um programa de teste de desempenho que analisa as características de processamento e de movimentação de dados de um sistema de computação com o objetivo de medir
Leia maisANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa
ANÁLISE DE ALGORITMOS: PARTE 1 Prof. André Backes Algoritmos 2 Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa Precisamos escrever o seu algoritmo Um algoritmo
Leia maisTécnicas de Programação III Análise de Algoritmos (Continuação)
Técnicas de Programação III Análise de Algoritmos (Continuação) Aula ministrada em: 23/08/2007 Prof. Mauro L. C. Silva 1/10 Objetivos da Aula Entender a Análise e a Complexidade de Algoritmos 2/10 Avaliação
Leia maisQuick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.
Quick Sort Considerações Sobre Algoritmos de Ordenação Professor: Claudio F. M. Toledo 26 de Outubro de 2016 Professor: Claudio Quick F. M. Sort Toledo 26 de Outubro de 2016 1 / 14 Quicksort: Escolha do
Leia maisAULA 13. Algoritmos p.526/582
AULA 13 Algoritmos p.526/582 Ordenação em tempo linear CLRS 8.2 8.3 Algoritmos p.527/582 Ordenação por contagem Recebe vetores A[1.. n] e B[1.. n] e devolve no vetor B[1.. n] os elementos de A[1.. n] em
Leia maisMCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade
MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade Prof. Jesús P. Mena-Chalco 3Q-2017 1 0 A = n-1... 2 0 A = n-1... - O programa funciona (está correto)? - Como medir/mensurar
Leia maisProjeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 01 Complexidade de Algoritmos Edirlei Soares de Lima O que é um algoritmo? Um conjunto de instruções executáveis para resolver um problema (são
Leia maisOrdenação. Prof. Jonas Potros
Ordenação Prof. Jonas Potros Conceitos Básicos Ordenar: processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. A ordenação visa facilitar a recuperação posterior de itens
Leia maisPROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Leia maisDGPAPP Tutorial. Introdução. Daniel Centeno Einloft Vinicius Meirelles Pereira. 20 May 2014
DGPAPP Tutorial Daniel Centeno Einloft Vinicius Meirelles Pereira 20 May 2014 Qualquer um tem o direito de copiar, modicar e distribuir cópias deste documento, sob os termos da GNU Free Documentation License
Leia maisProjeto e Análise de Algoritmos
Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter
Leia maisComputadores podem ser úteis em problemas que envolvem: Grande número de dados. Grande número de cálculos. Complexidade. Precisão.
O uso do computador Computadores podem ser úteis em problemas que envolvem: Grande número de dados. Grande número de cálculos. Complexidade. Precisão. Exemplos: Modelos meteorológicos. Cálculo estrutural.
Leia mais4 Testes e experimentos realizados 4.1. Implementação e banco de dados
32 4 Testes e experimentos realizados 4.1. Implementação e banco de dados Devido à própria natureza dos sites de redes sociais, é normal que a maior parte deles possua uma grande quantidade de usuários
Leia maisPreliminares. Profa. Sheila Morais de Almeida. agosto
Preliminares Profa. Sheila Morais de Almeida DAINF-UTFPR-PG agosto - 2016 Algoritmos Definição - Skiena Algoritmo é a ideia por trás dos programas de computador. É aquilo que permanece igual se o programa
Leia maisAlgoritmos e Estruturas de Dados II. Trabalho Prático 3
Algoritmos e Estruturas de Dados II Trabalho Prático 3 Entrega: 03/11/09 Devolução: 24/11/09 O trabalho pode ser feito em grupo de dois alunos. Este trabalho consiste em analisar o desempenho de diferentes
Leia maisCES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.
CES-11 Noções de complexidade de algoritmos Complexidade de algoritmos Avaliação do tempo de execução Razão de crescimento desse tempo Notação O Exercícios COMPLEXIDADE DE ALGORITMOS Importância de análise
Leia maisESTRUTURA DE DADOS I AULA I
ESTRUTURA DE DADOS I AULA I PROF. ME. HÉLIO ESPERIDIÃO O que é um dado? Dado pode ser definido como a matéria-prima originalmente obtida de uma ou mais fontes (etapa de coleta). o que é a informação A
Leia maisheapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;
heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i0 && x[f]
Leia maisMedida 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 Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então
Leia maisProjeto e Análise de Algoritmos Estruturas de Dados Básicas em C
Universidade Federal de Ouro Preto Departamento de Computação Projeto e Análise de Algoritmos Estruturas de Dados Básicas em C Prof. Haroldo Gambini Santos Por que C? Baixo nível: força contato com detalhes
Leia maisClassificação por Seleção - selection sort
Classificação por Seleção - selection sort Outro método também simples de ordenação é a ordenação por seleção. Princípio de funcionamento: 1. Selecione o menor item do vetor (ou o maior). 2. Troque-o com
Leia maisVariáveis Compostas. Leonardo Gresta Paulino Murta.
Variáveis Compostas Leonardo Gresta Paulino Murta leomurta@ic.uff.br Aula de hoje Veremos os diferentes tipos de variáveis compostas (arrays) Com uma dimensão (vetores) Com duas ou mais dimensões (matrizes)
Leia maisCRIVO QUADRÁTICO: IMPLEMENTAÇÃO DA OBTENÇÃO DE UM CONJUNTO DE NÚMEROS COMPLETAMENTE FATORADOS SOBRE UMA BASE DE FATORES
CRIVO QUADRÁTICO: IMPLEMENTAÇÃO DA OBTENÇÃO DE UM CONJUNTO DE NÚMEROS COMPLETAMENTE FATORADOS SOBRE UMA BASE DE FATORES Alex Zanella Zaccaron1; Adriana Betânia de Paula Molgora2 1Estudante do Curso de
Leia maisRefinamentos sucessivos
Refinamentos sucessivos Objetivos: Estudar a técnica de refinamentos sucessivos Jogo: 2048 Implementaremos o jogo 2048, com o objetivo de estudar a manipulação dos elementos de uma matriz Utilizaremos
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 maisAnatomia do motor de um programa de xadrez. Hugo Vinicius M. D. Santana Orientador: José Coelho de Pina
Anatomia do motor de um programa de xadrez Hugo Vinicius M. D. Santana Orientador: José Coelho de Pina Conteúdo Objetivo O que é um motor de xadrez? Arquitetura Entrada e saída Representação do tabuleiro
Leia mais03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II
03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir
Leia maisAlgoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira
Algoritmos e Estrutura de Dados Aula 3 Conceitos Básicos de Algoritmos Prof. Tiago A. E. Ferreira Definição de Algoritmo Informalmente... Um Algoritmo é qualquer procedimento computacional bem definido
Leia maisGprof Avaliação de desempenho. Prof: Paulo Maciel Instrutor: Jamilson Dantas
Gprof Avaliação de desempenho Prof: Paulo Maciel prmm@cin.ufpe.br Instrutor: Jamilson Dantas jrd@cin.ufpe.br Agenda Porque medir a eficiência de um Algoritmo? Como Medir O que é o Gprof? Por que usar um
Leia maisEstruturas de Dados Algoritmos
Estruturas de Dados Algoritmos Prof. Eduardo Alchieri Algoritmos (definição) Sequência finita de instruções para executar uma tarefa Bem definidas e não ambíguas Executáveis com uma quantidade de esforço
Leia maisO Que Veremos. Introdução. Introdução. Definindo Desempenho. Definindo Desempenho. Avaliando e Compreendendo o Desempenho
Ciência da Computação Arq. e Org. de Computadores Avaliando e Compreendendo o Desempenho O Que Veremos Avaliando e compreendendo o desempenho: Introdução Definindo desempenho Medindo o desempenho e seus
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 09 Ordenação de Vetores Edirlei Soares de Lima Ordenação de Vetores Problema: Entrada: vetor com os elementos a serem ordenados; Saída: mesmo vetor com
Leia maisAlgoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas
Algoritmos Programação de Computadores Comparando Algoritmos Um algoritmo é um procedimento de passos para cálculos. Este procedimento é composto de instruções que definem uma função Até o momento, vimos
Leia mais15/03/2018. Professor Ariel da Silva Dias Algoritmo e Contagem de Instruções. Prof. Ariel da Silva Dias -
Professor Ariel da Silva Dias Algoritmo e Contagem de Instruções 1 Um algoritmo pode ser visto como uma sequência de ações executáveis para a obtenção de uma solução para um determinado tipo de problema.
Leia maisCT-234. 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 Bibliografia T.H. Cormen, C.E. Leiserson and R.L. Rivest Introduction to algorithms R. Sedgewick
Leia maisAlgoritmos Avançados Análise de Complexidade
CCAE Centro de Ciências Aplicadas e Educação UFPB - Campus IV - Litoral Norte Algoritmos Avançados Análise de Complexidade COMPLEXIDADE DE ALGORITMOS Definição: A Complexidade de um Algoritmo consiste
Leia maisCOMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES. Adão de Melo Neto
COMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES Adão de Melo Neto 1 INTRODUÇÃO Desde 1950, houveram poucas inovações significativas nas áreas de arquitetura e organização de computadores. As principais
Leia maisTrabalho de Análise de Algoritmos. Problema da Mochila
Trabalho de Análise de Algoritmos Problema da Mochila Felipe R. S. Barbosa, Flávio R. J. de Sousa, Leonardo dos Reis Vilela Faculdade de Ciência da Computação Universidade Federal de Uberlândia (UFU) Uberlândia
Leia maisAula 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 maisAnálise e Complexidade de Algoritmos
Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Introdução Apresentação Professor Professor Ariel Dias Apresentação Disciplina O que veremos? www.arieldias.com BlackBoard Apresentação
Leia maisMétodos de Ordenação
Métodos de Ordenação Conceitos básicos sobre ordenação Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem específica. Objetivo da ordenação: facilitar a recuperação posterior
Leia maisUm estudo computacional de dois algoritmos de programação dinâmica com utilização eficiente de cache
Um estudo computacional de dois algoritmos de programação dinâmica com utilização eficiente de cache Guilherme S. Ribeiro 1, Marcus Ritt 1, Luciana S. Buriol 1 1 Instituto de Informática Universidade Federal
Leia maisMAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017
PROVA 1 MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 Nome: Número USP: Instruções: (1 ) Esta prova é individual. (2 ) Não destaque as folhas deste caderno. (3 ) A prova consiste de 6
Leia maisLimite assintótico para a ordenação, Ordenação em tempo linear
Algoritmos e Estruturas de Dados I Limite assintótico para a ordenação, Ordenação em tempo linear Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 1Q-2017 1 Ordenação Ordenar corresponde ao processo
Leia maisProva 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins
Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço. Indique na linha seguinte quatro das cinco questões abaixo que devem
Leia maisEquação de Poisson. Paulo Matias. f (x, y) =
Equação de Poisson Paulo Matias 12 de outubro de 2011 1 Introdução Foi desenvolvido, em linguagem C++, um programa sequencial de alto desempenho para resolver a equação de Poisson: 2 u (x, y) x 2 + 2 u
Leia maisPesquisa e Ordenação
Pesquisa e Ordenação SC121 - Introdução à Programação ICMC - USP - São Carlos Maio de 2009 Algoritmo de Procura Algoritmo de Procura O problema de procurar, pesquisar alguma informação numa tabela ou num
Leia maisAlgoritmos e Introdução à Programação. Lógica e Linguagem de Programação
Algoritmos e Introdução à Programação Lógica e Linguagem de Programação Prof. José Honorato Ferreira Nunes honoratonunes@softwarelivre.org http://softwarelivre.org/zenorato/honoratonunes Linguagem C Prof.
Leia mais7. Introdução à Complexidade de Algoritmos
7. Introdução à Complexidade de Algoritmos Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 7. Introdução à Complexidade de Algoritmos Estruturas de Dados 1 / 1 Análise de Algoritmos
Leia maisAlgoritmos 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 maisInformática I. Aula 14. Aula 14-10/10/2007 1
Informática I Aula 14 http://www.ic.uff.br/~bianca/informatica1/ Aula 14-10/10/2007 1 Ementa Noções Básicas de Computação (Hardware, Software e Internet) HTML e Páginas Web Internet e a Web Javascript
Leia maisUM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1
UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1 Eldair F. Dornelles 2, Henrique A. Richter 3, Miquéias F. M. Trennepohl 4, Taís T. Siqueira
Leia maisTrabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012
Trabalho: Algoritmos de Busca e Ordenação Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos 31 de outubro de 2012 1 Introdução Os algoritmos de busca e de ordenação compreendem um conjunto de
Leia maisOs métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:
ORDENAÇÃO A atividade de ordenação é o processo de rearranjo de um certo conjunto de objetos de acordo com um critério (ordem) específico. O objetivo da ordenação é facilitar a localização dos membros
Leia maisEstrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática
Estrutura de Dados Algoritmos de Ordenação Prof. Othon M. N. Batista Mestre em Informática Roteiro Introdução Ordenação por Inserção Insertion Sort Ordenação por Seleção Selection Sort Ordenação por Bolha
Leia maisProjeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Apresentação da Disciplina Edirlei Soares de Lima Por que Estudar Algoritmos? Razões Práticas e Teóricas: Devemos conhecer um conjunto de algoritmos
Leia maisTeoria da Computação Aula 8 Noções de Complexidade
Teoria da Computação Aula 8 Noções de Complexidade Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Motivação: Por que estudar algoritmos? Perguntas: - Por que estudar algoritmos se os computadores
Leia maisRESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:
RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em: http://www.oxnar.com.br/aulas/java ATIVIDADE ELABORAR O PROGRAMA DE CÁLCULOS DE ÁREAS USANDO
Leia mais