Projeto e Análise de Algoritmos
|
|
|
- Ana Carolina Back Cipriano
- 8 Há anos
- Visualizações:
Transcrição
1 Projeto e Análise de Algoritmos A. G. Silva 04 de agosto de 2017 (rev. 16ago2017)
2 Disciplina INE Projeto e Análise de Algoritmos Professor: Alexandre Gonçalves Silva alexandre.goncalves.silva/ [email protected] Sala INE-506 Carga horária: 60 horas-aula (4 créditos) Curso: Programa de Pós-Graduação em Ciência da Computação Requisitos: não há Período: 2 o semestre de 2017 Materiais: (M/D) Horários: 6 a 08h20-08h50 (4 aulas) - Sala 105 (auditório)
3 Ementa Introdução a análise e projeto de algoritmos; Complexidade; Notação assintótica; Recorrências; Algoritmos de divisão e conquista; Algoritmos Gulosos; Programação Dinâmica; Problemas NP- Completos; Reduções; Técnicas para tratar problemas complexos
4 Objetivos Geral: Compreender o processo de análise de complexidade de algoritmos e conhecer as principais técnicas para o desenvolvimento de algoritmos, aplicações e análises de complexidade. Específicos: Compreender o processo de análise de complexidade de algoritmos Conhecer as principais técnicas para o desenvolvimento de algoritmos e suas análises Compreender a diferença entre complexidade de problemas e complexidade de soluções Conhecer e compreender as classes de complexidade de problemas Conhecer algoritmos para tratar problemas complexos
5 Conteúdo programático Introdução (4 horas/aula) Notação Assintótica e Crescimento de Funções (4 horas/aula) Recorrências (4 horas/aula) Divisão e Conquista (12 horas/aula) Buscas (4 horas/aula) Grafos (4 horas/aula) Algoritmos Gulosos (8 horas aula) Programação Dinâmica (8 horas/aula) NP-Completude e Reduções (6 horas/aula) Algoritmos Aproximados e Busca Heurística (6 horas/aula)
6 Metodologia e avaliação Metodologia: Aulas expositivas, resolução de problemas, leituras extraclasse e trabalho de pesquisa. Avaliação: O aluno será aprovado na disciplina se obtiver Nota Final (NF) igual ou superior a 7,0 e frequência igual ou superior a 75%. A NF será calculada pela fórmula: NF = 0, 6 P 1 + P , 2 L 1 + L , 2T onde P 1 e P 2 são provas, L 1 e L 2 são listas de exercícios, e T é o trabalho de pesquisa, apresentado por meio de um artigo científico
7 Cronograma 04ago Apresentação da disciplina. Introdução. 11ago Prova de proficiência/dispensa. 18ago Notação assintótica. 25ago Recorrências. 01set Divisão e conquista. 08set Dia não letivo. Exercícios. 15set Divisão e conquista. 22set Buscas. Grafos. 29set Primeira avaliação. 06out Algoritmos gulosos. 13out Dia não letivo. Exercícios. 20out Algoritmos gulosos. 27out Programação dinâmica. 03nov Programação dinâmica. 10nov NP-Completude e reduções. 17nov Algoritmos aproximados e busca heurística. 24nov Segunda avaliação. dez Desenvolvimento do trabalho de pesquisa.
8 Bibliografia Básica: T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, Introduction to Algorithms. 3 rd edition, The MIT Press, S. Dasgupta, C.H. Papadimitriou, U.V. Vazirani, Algorithms, 1 st edition, McGraw-Hill, Jon Kleinberg, Éva Tardos, Algorithm Design, 1 st edition, Pearson, 2005.
9 Bibliografia (cont...) Complementar: N.C. Ziviani, Projeto de Algoritmos com Implementações em Java e C++, Thompson Learning, H.R. Lewis, C.H. Papadimitriou, Elementos de Teoria da Computação, 2 a Edição, Bookman, T.A. Sudkamp, Languages and Machines, Addison-Wesley, Artigos selecionados
10 Introdução O que veremos nesta disciplina? Como provar a corretude de um algoritmo Estimar a quantidade de recursos (tempo, memória) de um algoritmo = análise de complexidade Técnicas e idéias gerais de projeto de algoritmos: indução, divisão-e-conquista, programação dinâmica, algoritmos gulosos etc Tema recorrente: natureza recursiva de vários problemas A dificuldade intrínseca de vários problemas: inexistência de soluções eficientes
11 Algoritmos O que é um algoritmo (computacional)? Informalmente, um algoritmo é um procedimento computacional bem definido que: recebe um conjunto de valores como entrada, produz um conjunto de valores como saída, através de uma sequência de passos em um modelo computacional. Equivalentemente, um algoritmo é uma ferramenta para resolver um problema computacional. Este problema define a relação precisa que deve existir entre a entrada e a saída do algoritmo.
12 Exemplos de problemas: teste de primalidade Problema: determinar se um dado número é primo. Exemplo: Entrada: Saída: É primo. Exemplo: Entrada: Saída: Não é primo.
13 Exemplos de problemas: ordenação Definição: um vetor A[1... n] é crescente se A[1]... A[n]. Problema: rearranjar um vetor A[1... n] de modo que fique crescente. Entrada: Saída: 1 n n
14 Instância de um problema Uma instância de um problema é um conjunto de valores que serve de entrada para esse. Exemplo: Os números e são instâncias do problema de primalidade. Exemplo: O vetor 1 n é uma instância do problema de ordenação.
15 A importância dos algoritmos para a computação Onde se encontra aplicações para o uso/desenvolvimento de algoritmos eficientes? projetos de genoma de seres vivos rede mundial de computadores comércio eletrônico planejamento da produção de indústrias logística de distribuição games e filmes... Humm, vamos projetar um novo game neste curso? Não!
16 Dificuldade intrínseca de problemas Infelizmente, existem certos problemas para os quais não se conhece algoritmos eficientes capazes de resolvê-los. Exemplos são os problemas N P-completos. Curiosamente, não foi provado que tais algoritmos não existem! Interprete isso como um desafio para inteligência humana. Esses problemas tem a característica notável de que se um deles admitir um algoritmo eficiente então todos admitem algoritmos eficientes. Por que devo me preocupar com problemas N P-sei-lá-o-quê? Problemas dessa classe surgem em inúmeras situações práticas, como problemas N P-difíceis.
17 Dificuldade intrínseca de problemas Exemplo de problema N P-difícil: calcular as rotas dos caminhões de entrega de uma distribuidora de bebidas em São Paulo, minimizando a distância percorrida. (vehicle routing)
18 Dificuldade intrínseca de problemas Exemplo de problema N P-difícil: calcular o número mínimo de containers para transportar um conjunto de caixas com produtos. (bin packing 3D)
19 Dificuldade intrínseca de problemas Exemplo de problema N P-difícil: calcular a localização e o número mínimo de antenas de celulares para garantir a cobertura de uma certa região geográfica. (facility location) e muito mais... É importante saber indentificar quando estamos lidando com um problema N P-difícil!
20 Algoritmos e tecnologia O Éden: os computadores têm velocidade de processamento e memória infinita. Neste caso, qualquer algoritmo é igualmente bom e esta disciplina é inútil! O mundo real: há computadores com velocidade de processamento na ordem de bilhões de instruções por segundo e trilhões de bytes em memória. Mas ainda assim temos uma limitação na velocidade de processamento e memória dos computadores. Neste caso faz muita diferença ter um bom algoritmo.
21 Algoritmos e tecnologia Exemplo: ordenação de um vetor de n elementos Suponha que os computadores A e B executam 1G e 10M instruções por segundo, respectivamente. Ou seja, A é 100 vezes mais rápido que B. Algoritmo 1: implementado em A por um excelente programador em linguagem de máquina (ultra-rápida). Executa 2n 2 instruções. Algoritmo 2: implementado na máquina B por um programador mediano em linguagem de alto nível dispondo de um compilador meia-boca. Executa 50n log n instruções.
22 Algoritmos e tecnologia O que acontece quando ordenamos um vetor de um milhão de elementos? Qual algoritmo é mais rápido? Algoritmo 1 na máquina A: 2.(10 6 ) 2 instruções 2000 segundos 10 9 instruções/segundo Algoritmo 2 na máquina B: 50.(10 6 log 10 6 ) instruções 100 segundos 10 7 instruções/segundo Entenda log( ) como sendo log 2 ( ) Ou seja, B foi VINTE VEZES mais rápido do que A! Se o vetor tiver 10 milhões de elementos, esta razão será de 2.3 dias para 20 minutos!
23 Algoritmos e tecnologia E se tivermos os tais problemas N P-difíceis? f (n) n = 20 n = 40 n = 60 n = 80 n = 100 n 2, seg 4, seg 6, seg 8, seg 1, seg n 2 4, seg 1, seg 3, seg 6, seg 1, seg n 3 8, seg 6, seg 2, seg 5, seg 1, seg n 5 2, seg 1, seg 7, seg 3, seg 1, seg 2 n 1, seg 1,0seg 13,3dias 1, séc 1, séc 3 n 3, seg 140,7dias 1, séc 1, séc 5, séc Supondo um computador com velocidade de 1 Terahertz (mil vezes mais rápido que um computador de 1 Gigahertz).
24 Algoritmos e tecnologia E se usarmos um super-computador para resolver os problemas N P-difíceis? f (n) Computador atual 100 mais rápido 1000 mais rápido n N 1 100N N 1 n 2 N 2 10N N 2 n 3 N N 3 10N 3 n 5 N 4 2.5N N 4 2 n N 5 N N n N 6 N N Fixando o tempo de execução: Não iremos resolver problemas muito maiores.
25 Algoritmos e tecnologia Conclusões O uso de um algoritmo adequado pode levar a ganhos extraordinários de desempenho. Isso pode ser tão importante quanto o projeto de hardware. A melhora obtida pode ser tão significativa que não poderia ser obtida simplesmente com o avanço da tecnologia. As melhorias nos algoritmos produzem avanços em outras componentes básicas das aplicações (pense nos compiladores, buscadores na internet, etc).
26 Descrição de algoritmos Podemos descrever um algoritmo de várias maneiras: usando uma linguagem de programação de alto nível: C, Pascal, Java etc implementando-o em linguagem de máquina diretamente executável em hardware em português em um pseudo-código de alto nível, como no livro do CLRS Usaremos essencialmente as duas últimas alternativas nesta disciplina.
27 Exemplo de pseudo-código Algoritmo ORDENA-POR-INSERÇÃO: rearranja um vetor A[1... n] de modo que fique crescente. ORDENA-POR-INSERÇÃO(A, n) 1 para j 2 até n faça 2 chave A[j] 3 Insere A[j] no subvetor ordenado A[1... j 1] 4 i j 1 5 enquanto i 1 e A[i] > chave faça 6 A[i + 1] A[i] 7 i i 1 8 A[i + 1] chave
28 Corretude de algoritmos Um algoritmo (que resolve um determinado problema) é determinístico se, para toda instância do problema, ele pára e devolve uma resposta correta. Algoritmos probabilísticos são algoritmos que utilizam passos probabilísticos (como obter um número aleatório). Estes algoritmos podem errar ou gastar muito tempo, mas neste caso, queremos que a probabilidade de errar ou de executar por muito tempo seja muuuuito pequena. O curso será focado principalmente em algoritmos determinísticos, mas veremos alguns exemplos de algoritmos probabilísticos.
29 Complexidade de algoritmos Em geral, não basta saber que um dado algoritmo pára. Se ele for muito leeeeeeeeeeeento terá pouca utilidade. Queremos projetar/desenvolver algoritmos eficientes (rápidos). Mas o que seria uma boa medida de eficiência de um algoritmo? Não estamos interessados em quem programou, em que linguagem foi escrito e nem qual a máquina foi usada! Queremos um critério uniforme para comparar algoritmos.
30 Modelo Computacional Uma possibilidade é definir um modelo computacional de um máquina. O modelo computacional estabelece quais os recursos disponíveis, as instruções básicas e quanto elas custam (= tempo). Dentre desse modelo, podemos estimar através de uma análise matemática o tempo que um algoritmo gasta em função do tamanho da entrada (= análise de complexidade). A análise de complexidade depende sempre do modelo computacional adotado.
31 Máquinas RAM Salvo mencionado o contrário, usaremos o Modelo Abstrato RAM (Random Access Machine): simula máquinas convencionais (de verdade), possui um único processador que executa instruções seqüencialmente, tipos básicos são números inteiros e reais, há um limite no tamanho de cada palavra de memória: se a entrada tem tamanho n, então cada inteiro/real é representado por c log n bits onde c 1 é uma contante. Note que não podemos representar números reais, a menos de aproximações. Assim, não poderemos representar π, 2 etc, de maneira exata. Isto é razoável?
32 Máquinas RAM executa operações aritméticas (soma, subtração, multiplicação, divisão, piso, teto), comparações, movimentação de dados de tipo básico e fluxo de controle (teste if/else, chamada e retorno de rotinas) em tempo constante, Certas operações ficam em uma zona cinza, por exemplo, exponenciação, veja maiores detalhes do modelo RAM no CLRS.
33 Tamanho da entrada Problema: Primalidade Entrada: inteiro n Tamanho: número de bits de n lg n = log 2 n Problema: Ordenação Entrada: vetor A[1... n] Tamanho: n lg U onde U é o maior número em A[1... n]
34 Medida de complexidade e eficiência de algoritmos A complexidade de tempo (= eficiência) de um algoritmo é o número de instruções básicas que ele executa em função do tamanho da entrada. Adota-se uma atitude pessimista e faz-se uma análise de pior caso. Determina-se o tempo máximo necessário para resolver uma instância de um certo tamanho. Além disso, a análise concentra-se no comportamento do algoritmo para entradas de tamanho GRANDE = análise assintótica.
35 Medida de complexidade e eficiência de algoritmos Um algoritmo é chamado eficiente se a função que mede sua complexidade de tempo é limitada por um polinômio no tamanho da entrada. Por exemplo: n, 3n 7, 4n 2, 143n 2 4n + 2, n 5. Mas por que polinômios? Resposta padrão: (polinômios são funções bem comportadas ).
36 Vantagens do método de análise proposto O modelo RAM é robusto e permite prever o comportamento de um algoritmo para instâncias GRANDES. O modelo permite comparar algoritmos que resolvem um mesmo problema. A análise é mais robustas em relação às evoluções tecnológicas.
37 Desvantagens do método de análise proposto Fornece um limite de complexidade pessimista sempre considerando o pior caso. Em uma aplicação real, nem todas as instâncias ocorrem com a mesma freqüência e é possível que as instâncias ruins ocorram raramente. Não fornece nenhuma informação sobre o comportamento do algoritmo no caso médio. A análise de complexidade de algoritmos no caso médio é complicada e depende do conhecimento da distribuição das instâncias.
38 Começando a trabalhar
39 Ordenação Problema: ordenar um vetor em ordem crescente Entrada: um vetor A[1... n] Saída: vetor A[1... n] rearranjado em ordem crescente Vamos começar estudando o algoritmo de ordenação baseado no método de inserção.
40 Inserção em um vetor ordenado 1 j n O subvetor A[1... j 1] está ordenado. Queremos inserir a chave = 38 = A[j] em A[1... j 1] de modo que no final tenhamos: 1 j n Agora A[1... j] está ordenado.
41 Como fazer a inserção chave = 38 1 i j n i j n i j n i j n i j n
42 Ordenação por inserção chave 1 j n chave 1 j n chave 1 j n chave 1 j n
43 Ordenação por inserção chave 1 j n chave 1 j n chave 1 j chave 1 j
44 Ordena-Por-Inserção Pseudo-código ORDENA-POR-INSERÇÃO(A, n) 1 para j 2 até n faça 2 chave A[j] 3 Insere A[j] no subvetor ordenado A[1..j 1] 4 i j 1 5 enquanto i 1 e A[i] > chave faça 6 A[i + 1] A[i] 7 i i 1 8 A[i + 1] chave
45 Análise do algoritmo O que é importante analisar? Finitude: o algoritmo pára? Corretude: o algoritmo faz o que promete? Complexidade de tempo: quantas intruções são necessárias no pior caso para ordenar os n elementos?
46 O algoritmo pára ORDENA-POR-INSERÇÃO(A, n) 1 para j 2 até n faça... 4 i j 1 5 enquanto i 1 e A[i] > chave faça i i No laço enquanto na linha 5 o valor de i diminui a cada iteração e o valor inicial é i = j 1 1. Logo, a sua execução pára em algum momento por causa do teste condicional i 1. O laço na linha 1 evidentemente pára (o contador j atingirá o valor n + 1 após n 1 iterações). Portanto, o algoritmo pára.
47 Ordena-Por-Inserção ORDENA-POR-INSERÇÃO(A, n) 1 para j 2 até n faça 2 chave A[j] 3 Insere A[j] no subvetor ordenado A[1..j 1] 4 i j 1 5 enquanto i 1 e A[i] > chave faça 6 A[i + 1] A[i] 7 i i 1 8 A[i + 1] chave O que falta fazer? Verificar se ele produz uma resposta correta. Analisar sua complexidade de tempo.
48 Invariantes de laço e provas de corretude Definição: um invariante de um laço é uma propriedade que relaciona as variáveis do algoritmo a cada execução completa do laço. Ele deve ser escolhido de modo que, ao término do laço, tenha-se uma propriedade útil para mostrar a corretude do algoritmo. A prova de corretude de um algoritmo requer que sejam encontrados e provados invariantes dos vários laços que o compõem. Em geral, é mais difícil descobrir um invariante apropriado do que mostrar sua validade se ele for dado de bandeja...
49 Exemplo de invariante ORDENA-POR-INSERÇÃO(A, n) 1 para j 2 até n faça 2 chave A[j] 3 Insere A[j] no subvetor ordenado A[1..j 1] 4 i j 1 5 enquanto i 1 e A[i] > chave faça 6 A[i + 1] A[i] 7 i i 1 8 A[i + 1] chave Invariante principal de ORDENA-POR-INSERÇÃO: (i1) No começo de cada iteração do laço para das linha 1 8, o subvetor A[1... j 1] está ordenado.
50 Corretude de algoritmos por invariantes A estratégia típica para mostrar a corretude de um algoritmo iterativo através de invariantes segue os seguintes passos: 1 Mostre que o invariante vale no início da primeira iteração (trivial, em geral) 2 Suponha que o invariante vale no início de uma iteração qualquer e prove que ele vale no ínicio da próxima iteração 3 Conclua que se o algoritmo pára e o invariante vale no ínicio da última iteração, então o algoritmo é correto. Note que (1) e (2) implicam que o invariante vale no início de qualquer iteração do algoritmo. Isto é similar ao método de indução matemática ou indução finita!
51 Corretude da ordenação por inserção Vamos verificar a corretude do algoritmo de ordenação por inserção usando a técnica de prova por invariantes de laços. Invariante principal: (i1) No começo de cada iteração do laço para das linhas 1 8, o subvetor A[1... j 1] está ordenado. 1 j n Suponha que o invariante vale. Então a corretude do algoritmo é evidente. Por quê? No ínicio da última iteração temos j= n + 1. Assim, do invariante segue que o (sub)vetor A[1... n] está ordenado!
52 Melhorando a argumentação ORDENA-POR-INSERÇÃO(A, n) 1 para j 2 até n faça 2 chave A[j] 3 Insere A[j] no subvetor ordenado A[1... j 1] 4 i j 1 5 enquanto i 1 e A[i] > chave faça 6 A[i + 1] A[i] 7 i i 1 8 A[i + 1] chave Um invariante mais preciso: (i1 ) No começo de cada iteração do laço para das linhas 1 8, o subvetor A[1... j 1] é uma permutação ordenada do subvetor original A[1... j 1].
53 Esboço da demonstração de (i1 ) 1 Validade na primeira iteração: neste caso, temos j = 2 e o invariante simplesmente afirma que A[1... 1] está ordenado, o que é evidente. 2 Validade de uma iteração para a seguinte: segue da discussão anterior. O algoritmo empurra os elementos maiores que a chave para seus lugares corretos e ela é colocada no espaço vazio. Uma demonstração mais formal deste fato exige invariantes auxiliares para o laço interno enquanto. 3 Corretude do algoritmo: na última iteração, temos j = n + 1 e logo A[1... n] está ordenado com os elementos originais do vetor. Portanto, o algoritmo é correto.
54 Invariantes auxiliares No início da linha 5 valem os seguintes invariantes: (i2) A[1... i], chave e A[i j] contém os elementos de A[1... j] antes de entrar no laço que começa na linha 5. (i3) A[1... i] e A[i j] são crescentes. (i4) A[1... i] A[i j] (i5) A[i j] > chave. Invariantes (i2) a (i5) +condição de parada na linha 5 +atribuição da linha 7 = invariante (i1 ) Demonstração? Mesma que antes.
55 Complexidade do algoritmo Vamos tentar determinar o tempo de execução (ou complexidade de tempo) de ORDENA-POR-INSERÇÃO em função do tamanho de entrada. Para o problema de Ordenação vamos usar como tamanho de entrada a dimensão do vetor e ignorar o valores dos seus elementos (modelo RAM). A complexidade de tempo de um algoritmo é o número de instruções básicas (operações elementares ou primitivas) que executa a partir de uma entrada. Exemplo: comparação e atribuição entre números ou variáveis numéricas, operações aritméticas, etc.
56 Vamos contar? ORDENA-POR-INSERÇÃO(A, n) Custo # execuções 1 para j 2 até n faça c 1? 2 chave A[j] c 2? 3 Insere A[j] em A[1... j 1] 0? 4 i j 1 c 4? 5 enquanto i 1 e A[i] > chave faça c 5? 6 A[i + 1] A[i] c 6? 7 i i 1 c 7? 8 A[i + 1] chave c 8? A constante c k representa o custo (tempo) de cada execução da linha k. Denote por t j o número de vezes que o teste no laço enquanto na linha 5 é feito para aquele valor de j.
57 Vamos contar? ORDENA-POR-INSERÇÃO(A, n) Custo Vezes 1 para j 2 até n faça c 1 n 2 chave A[j] c 2 n 1 3 Insere A[j] em A[1... j 1] 0 n 1 4 i j 1 c 4 n 1 5 enquanto i 1 e A[i] > chave faça c n 5 j=2 t j 6 A[i + 1] A[i] c n 6 j=2 (t j 1) 7 i i 1 c n 7 j=2 (t j 1) 8 A[i + 1] chave c 8 n 1 A constante c k representa o custo (tempo) de cada execução da linha k. Denote por t j o número de vezes que o teste no laço enquanto na linha 5 é feito para aquele valor de j.
58 Tempo de execução total Logo, o tempo total de execução T (n) de Ordena-Por-Inserção é a soma dos tempos de execução de cada uma das linhas do algoritmo, ou seja: T (n) = c 1 n + c 2 (n 1) + c 4 (n 1) + c n 5 j=2 t j + c n 6 j=2 (t j 1) + c n 7 j=2 (t j 1) + c 8 (n 1) Como se vê, entradas de tamanho igual (i.e., mesmo valor de n), podem apresentar tempos de execução diferentes já que o valor de T (n) depende dos valores dos t j.
59 Melhor caso O melhor caso de Ordena-Por-Inserção ocorre quando o vetor A já está ordenado. Para j = 2,..., n temos A[i] chave na linha 5 quando i = j 1. Assim, t j = 1 para j = 2,..., n. Logo, T (n) = c 1 n + c 2 (n 1) + c 4 (n 1) + c 5 (n 1) + c 8 (n 1) = (c 1 + c 2 + c 4 + c 5 + c 8 )n (c 2 + c 4 + c 5 + c 8 ) Este tempo de execução é da forma an + b para constantes a e b que dependem apenas dos c i. Portanto, no melhor caso, o tempo de execução é uma função linear no tamanho da entrada.
60 Pior Caso Quando o vetor A está em ordem decrescente, ocorre o pior caso para Ordena-Por-Inserção. Para inserir a chave em A[1... j 1], temos que compará-la com todos os elementos neste subvetor. Assim, t j = j para j = 2,..., n. Lembre-se que: e n j = j=2 n (j 1) = j=2 n(n + 1) 2 1 n(n 1). 2
61 Pior caso continuação Temos então que ( n(n + 1) T (n) = c 1 n + c 2 (n 1) + c 4 (n 1) + c 5 2 ( ) ( n(n 1) n(n 1) + c 6 + c ( c5 ) ( = n 2 + c 1 + c 2 + c 4 + c c c 7 2 (c 2 + c 4 + c 5 + c 8 ) ) 1 ) + c 8 (n 1) 2 c 6 2 c c 8 O tempo de execução no pior caso é da forma an 2 + bn + c onde a, b, c são constantes que dependem apenas dos c i. Portanto, no pior caso, o tempo de execução é uma função quadrática no tamanho da entrada. ) n
62 Complexidade assintótica de algoritmos Como dito anteriormente, na maior parte desta disciplina, estaremos nos concentrando na análise de pior caso e no comportamento assintótico dos algoritmos (instâncias de tamanho grande). O algoritmo Ordena-Por-Inserção tem como complexidade (de pior caso) uma função quadrática an 2 + bn + c, onde a, b, c são constantes absolutas que dependem apenas dos custos c i. O estudo assintótico nos permite jogar para debaixo do tapete os valores destas constantes, i.e., aquilo que independe do tamanho da entrada (neste caso os valores de a, b e c). Por que podemos fazer isso?
63 Análise assintótica de funções quadráticas Considere a função quadrática 3n n + 50: n 3n n n Como se vê, 3n 2 é o termo dominante quando n é grande. De um modo geral, podemos nos concentrar nos termos dominantes e esquecer os demais.
64 Notação assintótica Usando notação assintótica, dizemos que o algoritmo Ordena-Por-Inserção tem complexidade de tempo de pior caso Θ(n 2 ). Isto quer dizer duas coisas: a complexidade de tempo é limitada (superiormente) assintoticamente por algum polinômio da forma an 2 para alguma constante a, para todo n suficientemente grande, existe alguma instância de tamanho n que consome tempo pelo menos dn 2, para alguma contante positiva d. Mais adiante discutiremos em detalhes o uso da notação assintótica em análise de algoritmos.
65 Agradecimentos Esses slides são fruto de um trabalho iniciado pelos Profs. Cid C. de Souza e Cândida N. da Silva. Desde então, várias partes foram motificadas, melhoradas ou colocadas ao gosto particular de cada docente. Em particular pelos Profs. Orlando Lee, Pedro J. de Rezende, Flávio K. Miyazawa e, mais recentemente, pelo Prof. Alexandre. G. Silva. Vários outros professores colaboraram direta ou indiretamente para a preparação do material desses slides. Agradecemos, especialmente (em ordem alfabética): Célia P. de Mello, José C. de Pina, Paulo Feofiloff, Ricardo Dahab e Zanoni Dias. Como foram feitas modificações de conteúdo teórico e filosófico, os erros/imprecisões que se encontram nesta versão devem ser comunicados a [email protected].
Algoritmos 2 - Introdução
DAINF - Departamento de Informática Algoritmos 2 - Introdução Prof. Alex Kutzke (http://alex.kutzke.com.br/courses) 19 de Agosto de 2015 Slides adaptados do material produzido pelo Prof. Rodrigo Minetto
CI165 Introdução. André Vignatti. 31 de julho de 2014
Introdução 31 de julho de 2014 Antes de mais nada... Os slides de 6 aulas (introdução, insertion sort, mergesort, quicksort, recorrências e limitantes de ordenação) foram originalmente feitos pelos Profs.
Complexidade de Algoritmos
Complexidade de Algoritmos O que é um algoritmo? Sequência bem definida e finita de cálculos que, para um dado valor de entrada, retorna uma saída desejada/esperada. Na computação: Uma descrição de como
Algoritmos e Estrutura de Dados. Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira
Algoritmos e Estrutura de Dados Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira Ementa e Objetivos Ementa: Análise de Algoritmos: Notação O e Análise Assintótica.
Complexidade Assintótica de Programas Letícia Rodrigues Bueno
Complexidade Assintótica de Programas Letícia Rodrigues Bueno Análise de Algoritmos 1. Introdução; Análise de Algoritmos 1. Introdução; 2. Conceitos básicos; Análise de Algoritmos 1. Introdução; 2. Conceitos
Projeto 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
Análise e Projeto de Algoritmos
Análise e Projeto de Algoritmos Prof. Eduardo Barrére www.ufjf.br/pgcc www.dcc.ufjf.br [email protected] www.barrere.ufjf.br A Disciplina... Lecionada por dois professores: Eduardo Barrére Foco
ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão
Luiz Leão [email protected] 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
Análise e Técnicas de Algoritmos
Análise e Técnicas de Algoritmos Prof. Jorge Figueiredo http://www.dsc.ufcg.edu.br/~abrantes/atal032.html Jorge Figueiredo Aula 1-1 Agenda Apresentação do curso Motivação Introdução informal Jorge Figueiredo
Análise e Projeto de Algoritmos
Análise e Projeto de Algoritmos Mestrado em Ciência da Computação Prof. Dr. Aparecido Nilceu Marana Faculdade de Ciências I think the design of efficient algorithms is somehow the core of computer science.
Aula 1. Teoria da Computação III
Aula 1 Teoria da Computação III Complexidade de Algoritmos Um problema pode ser resolvido através de diversos algoritmos; O fato de um algoritmo resolver um dado problema não significa que seja aceitável
PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos
UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE COMPUTAÇÃO BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos ( X ) SEMESTRAL - ( ) ANUAL CÓDIGO: GBC052 PERÍODO:
CT-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
ANÁLISE DE ALGORITMOS
ANÁLISE DE ALGORITMOS Paulo Feofiloff Instituto de Matemática e Estatística Universidade de São Paulo agosto 2009 Introdução P. Feofiloff (IME-USP) Análise de Algoritmos agosto 2009 2 / 102 Introdução
Teoria da computabilidade Indecidíveis Decidíveis
Bacharelado em Ciência da Computação Disciplina: Algoritmos e Estruturas de Dados I Professor: Mário Luiz Rodrigues Oliveira Teoria da computabilidade Indecidíveis Decidíveis Teoria da complexidade Intratáveis:
TEORIA: 60 LABORATÓRIO: 0
Universidade Federal do ABC Rua Santa Adélia, 166 - Bairro Bangu - Santo André - SP - Brasil CEP 09.210-170 - Telefone/Fax: +55 11 4996-3166 1. CÓDIGO E NOME DA DISCIPLINA: BC1435 - Análise de Algoritmos
Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão
Projeto e Análise de Algoritmos NP Completude Prof. Humberto Brandão [email protected] Universidade Federal de Alfenas versão da aula: 0.4 Introdução Problemas intratáveis ou difíceis são comuns
Análise de algoritmos. Parte I
Análise de algoritmos Parte I 1 Recursos usados por um algoritmo Uma vez que um procedimento está pronto/disponível, é importante determinar os recursos necessários para sua execução Tempo Memória Qual
Teoria da Complexidade Computacional
Teoria da Complexidade Computacional 25 de novembro de 2011 Enquanto a teoria de análise de algoritmos estuda a análise de complexidade de algoritmos, a teoria da complexidade estuda a classificação de
Algoritmos de Ordenação: Tempo Linear
Algoritmos de Ordenação: Tempo Linear 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 [email protected] 10/2008 Material
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
Complexidade 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
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 Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então
5COP096 TeoriadaComputação
Sylvio 1 Barbon Jr [email protected] 5COP096 TeoriadaComputação Aula 13 Prof. Dr. Sylvio Barbon Junior Sumário - Problemas NP-Completo Algoritmos Não-deterministas; Classes NP-Completo e NP-Dificil; Teorema
4º 20/10/2003. ÍNDICE
Universidade Federal de Juiz de Fora UFJF. Departamento de Ciência da Computação DCC. Curso de Ciência da Computação. Análise e Projeto de Algoritmos 4º período. Filippe Jabour. Atualizado em 20/10/2003.
Algoritmos para Automação e Sistemas
Universidade Federal do Amazonas Departamento de Eletrônica e Computação Algoritmos para Automação e Sistemas Lucas Cordeiro [email protected] Notas de Aula Estes slides estão baseados livro do
Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011
Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011 Web site http://www.inf.ufes.br/~pdcosta/ensino/ Profa. Patrícia Dockhorn Costa Email: [email protected] Introdução O que são estruturas
01 Análise de Algoritmos (parte 1) SCC201/501 - Introdução à Ciência de Computação II
01 Análise de Algoritmos (parte 1) 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
Estruturas de Dados 2
Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão
Análise e Projeto de Algoritmos
Análise e Projeto de Algoritmos Prof. Josenildo Silva [email protected] IFMA, Campus Monte Castelo Depto. Academico de Informática 2 o Semestre, 2013 Prof. Josenildo Silva (IFMA) Algoritmos 2 o Semestre,
Projeto e Análise de Algoritmos
Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais [email protected] 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter
Técnicas de projeto de algoritmos: Indução
Técnicas de projeto de algoritmos: Induçã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 [email protected] 08/2008
Algoritmos 3/17/ Algoritmos como área de estudo e investigação
Algoritmos e Complexidade Ana Teresa Freitas INESC-ID/IST ID/IST 3/17/2005 1 O que é um algoritmo? Algoritmos: Sequência de instruções necessárias para a resolução de um problema bem formulado [passíveis
a complexidade no desempenho de algoritmos
capítulo 1 introdução Os algoritmos são o cerne da computação. Este capítulo introdutório procura ressaltar a importância da complexidade e dos métodos de projeto e análise de algoritmos. Partindo da ideia
Mediana. Aula 09. Menor. i-ésimo menor elemento. Algoritmo de Seleção. -ésimo menor elemento. Mediana é o n+1. -ésimo menor ou o n+1
Mediana Aula 09 Algoritmo de Seleção Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Baseado em slides do Prof. Paulo Fiofilof Mediana é o n+1 2 -ésimo menor ou o n+1 2 -ésimo
Ordenação em tempo linear
Ordenação em tempo linear CLRS cap 8 Algoritmos p. 1 Ordenação: limite inferior Problema: Rearranjar um vetor A[1..n] de modo que ele fique em ordem crescente. Existem algoritmos que consomem tempo O(n
Complexidade de Algoritmos
Complexidade de Algoritmos! Uma característica importante de qualquer algoritmo é seu tempo de execução! é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas! é também
ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão
UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão [email protected] http://www.luizleao.com Conteúdo Programático 3.1 - Definição 3.2 - Dividir para conquistar 3.3 - Problema da
Métodos de Ordenação Parte I
Estrutura de Dados II Métodos de Ordenação Parte I Prof a Márcio Bueno [email protected] / [email protected] Material baseado nos materiais da Prof a Ana Eliza e Prof. Robson Lins Rearranjar
Juliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação
Universidade Federal de Santa Maria Disciplina de Teoria da Computação Quais são as capacidades e limitações fundamentais dos computadores? Funções Computáveis Algoritmo: descrição finitade uma computação
Aula 10: Tratabilidade
Teoria da Computação DAINF-UTFPR Aula 10: Tratabilidade Prof. Ricardo Dutra da Silva Na aula anterior discutimos problemas que podem e que não podem ser computados. Nesta aula vamos considerar apenas problemas
Tópicos Avançados em Algoritmos
Tópicos Avançados em Algoritmos Armando Matos 2008 Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto 2 Tópicos Avançados de Algoritmos Armando B. Matos DCC-FC-UP 2009
Estruturas de Dados 2
Estruturas de Dados 2 Análise Empírica de Algoritmos IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/13 Análise da Eficiência de Algoritmos: Velocidade de Execução;
AULA 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
If969 - Algoritmos e Estruturas de Dados
If969 - Algoritmos e Estruturas de Dados Centro de Informá-ca Universidade Federal de Pernambuco Sistemas de Informação Vinicius Cardoso Garcia [email protected] Missão Mo-var, apresentar, exercitar e consolidar
SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.
SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão
Aná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:
ALGORITMOS E ESTRUTURAS DE DADOS I PROF. EDSON IFARRAGUIRRE MORENO
ALGORITMOS E ESTRUTURAS DE DADOS I PROF. EDSON IFARRAGUIRRE MORENO INFORMAÇÕES Horário: 3CD 6CD Créditos: 4 Carga-horária: 60 horas-aula E-mail: [email protected] Material: http://www.inf.pucrs.br/emoreno
FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1
FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO Projeto a Análise de Algoritmos I Lista de Exercícios 1 Prof. Osvaldo. 1. Descreva alguns problemas associados ao emprego de metodologias
Técnicas de projeto de algoritmos: Indução
Técnicas de projeto de algoritmos: Induçã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 [email protected] 08/2008
7. 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
Complexidade de Algoritmos
Complexidade de Algoritmos Prof. Diego Buchinger [email protected] [email protected] Prof. Cristiano Damiani Vasconcellos [email protected] Um pouco de Teoria dos Números
Projeto e Análise de Algoritmos NP Completude Parte 2. Prof. Humberto Brandão
Projeto e Análise de Algoritmos NP Completude Parte 2 Prof. Humberto Brandão [email protected] Universidade Federal de Alfenas Departamento de Ciências Exatas versão da aula: 0.2 Última aula
Té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
BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade
BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade Prof. Jesús P. Mena-Chalco 1Q-2016 1 1995 2015 2 Custo de um algoritmo e funções de complexidade Introdução
Algoritmos de Ordenação
Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca
#Conceituação. Algoritmos. Eliezio Soares
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS SÃO GONÇALO DO AMARANTE Algoritmos #Conceituação Eliezio Soares [email protected] Computadores e Tarefas 1. O computador
Aná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
Quantidade de memória necessária
Tempo de processamento Um algoritmo que realiza uma tarefa em 10 horas é melhor que outro que realiza em 10 dias Quantidade de memória necessária Um algoritmo que usa 1MB de memória RAM é melhor que outro
Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno
Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno UFABC Estruturas de Dados para Conjuntos Disjuntos: Introdução Estruturas de Dados para Conjuntos Disjuntos: Introdução
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/27 4 - INTROD. À ANÁLISE COMBINATÓRIA 4.1) Arranjos
Complexidade computacional
Complexidade computacional CLRS sec 34.1 e 34.2 Algoritmos p. 1 Algumas questões Por que alguns problemas parecem ser (computacionalmente) mais difíceis do que outros? Algoritmos p. 2 Algumas questões
Capítulo 2: Procedimentos e algoritmos
Capítulo 2: Procedimentos e algoritmos Para estudar o processo de computação de um ponto de vista teórico, com a finalidade de caracterizar o que é ou não é computável, é necessário introduzir um modelo
Algoritmos Computacionais
UNIDADE 1 Processador e instruções Memórias Dispositivos de Entrada e Saída Software ARQUITETURA BÁSICA UCP Unidade central de processamento MEM Memória E/S Dispositivos de entrada e saída UCP UNIDADE
Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort
Mergesort Aula 0 Divisão e Conquista- MergeSort Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Mergesort é um algoritmo de ordenação recursivo Ele recursivamente ordena as duas
Algoritmos 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
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 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
Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula
Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Ordenação por bolha (bubble sort)
Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:
Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível: Comparar algoritmos: existem algoritmos que resolvem o mesmo tipo de problema. Determinar se o algoritmo é ótimo :
Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens
Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar
Análise de algoritmos
Análise de algoritmos Ordenação em tempo linear Prof. Flávio Rogério Uber (UEM/DIN) Autor: Prof. Marco Aurélio Lopes Barbosa (UEM/DIN) Conteúdo Limites inferiores para ordenação por comparações Ordenação
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa Livro Projeto de Algoritmos Nívio Ziviani Capítulo 1 Seção 1.3.1 http://www2.dcc.ufmg.br/livros/algoritmos/ Comportamento Assintótico de Funções O parâmetro n
Cálculo Numérico Noções básicas sobre erros
Cálculo Numérico Noções básicas sobre erros Profa. Vanessa Rolnik 1º semestre 2015 Fases da resolução de problemas através de métodos numéricos Problema real Levantamento de Dados Construção do modelo
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: [email protected]
Complexidade de Algoritmos
60 Desempenho 50 40 30 20 Algoritmo1 Algoritmo2 Algoritmo3 10 0 Complexidade de Algoritmos INFORMÁTICA BÁSICA Prof. Demétrios Coutinho C a m p u s P a u d o s F e r r o s D i s c i p l i n a d e A l g
PCC104 - Projeto e Análise de Algoritmos
PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 7 de outubro de 2016 Marco Antonio
FACULDADE PITÁGORAS PRONATEC
FACULDADE PITÁGORAS PRONATEC DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos [email protected] www.oficinadapesquisa.com.br Objetivos Ao final desta apostila,
03 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
CONCEITOS DE ALGORITMOS
CONCEITOS DE ALGORITMOS Fundamentos da Programação de Computadores - 3ª Ed. 2012 Editora Prentice Hall ISBN 9788564574168 Ana Fernanda Gomes Ascênsio Edilene Aparecida Veneruchi de Campos Algoritmos são
UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO PRÓ-REITORIA DE ENSINO DE GRADUAÇÃO
h UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO PRÓ-REITORIA DE ENSINO DE GRADUAÇÃO Rua Dom Manoel de Medeiros, s/n Dois Irmãos 52171-900 Recife-PE Fone: 0xx-81-332060-40 [email protected] PLANO DE ENSINO
O 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
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
CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano
CÁLCULO NUMÉRICO Profa. Dra. Yara de Souza Tadano [email protected] Aulas 5 e 6 03/2014 Erros Aritmética no Computador A aritmética executada por uma calculadora ou computador é diferente daquela
MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2
MÉTODOS DE ORDENAÇÃO Introdução à Programação SI2 2 Conteúdo Conceitos básicos Classificação por troca Classificação por inserção Classificação por seleção 3 Conceitos Básicos Ordenar: processo de rearranjar
