BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

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

Download "BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1"

Transcrição

1 BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

2 Avisos 2

3 Avisos Prova no dia 07 de Junho (em 11 dias). 3

4 Na aula anterior Backtracking. 4

5 Na aula de hoje Programação Dinâmica. 5

6 Programação Dinâmica A Programação Dinâmica é uma ferramenta geral muito poderosa para resolver problemas combinatórios que possuem elementos com uma certa ordenação esquerda-para-direita Como strings. Uma vez compreendida, torna-se relativamente fácil de ser aplicada. Programação Dinâmica parece mágica até que você tenha visto exemplos o suficiente Vamos ver um exemplo clássico de programação dinâmica então! 6

7 Coeficientes Binomiais A mais importante classe de contagem são os coeficientes binomiais (ou binômios de Newton) Em que ( n k ) conta o número de formas em que podemos escolher k itens entre n possibilidades; O que pode ser contado? Comitês; Caminhos em uma grade; Coeficientes de (a-b) n ; O triângulo de Pascal; Etc. 7

8 Coeficientes Binomiais Quantas formas existem para formarmos um comitê com k membros, se temos n pessoas? A resposta é. ) ( n k 8

9 Coeficientes Binomiais Quantas formas existem para nos deslocarmos do canto superior esquerdo de uma grade n m até o canto inferior direito, andando apenas para baixo e para a direita? Cada caminho deve consistir de n+m passos, n para baixo e m para a direita; Cada caminho com um conjunto diferente de passos para baixo é diferente; Então a quantidade de tais conjuntos ou n+ m n caminhos é ( ). 9

10 Coeficientes Binomiais Considere (a+b) n ; Observe que (a+b) 3 =1a 3 +3a 2 b+3ab 2 +1b 3 Qual é o coeficiente do termo a k b n-k? ( n k ) ; Porque esta é a contagem da quantidade de formas que podemos escolher os k termos a dentre as n possibilidades; Ou ainda, podemos interpretar este número como sendo a quantidade de vezes em que cada multiplicação ocorre na expansão da expressão algébrica. 10

11 Coeficientes Binomiais Certamente você já utilizou o triângulo de Pascal no ensino médio Cada número é a soma dos dois números diretamente sobre ele; 11

12 Coeficientes Binomiais Para quê serve o triângulo de Pascal? Calcular coeficientes binomiais! A (n+1)-ésima linha do triângulo nos fornece valores para 0<=i<=n. ( n k ) Ou seja, pode ser encontrado no triângulo na linha n+1 e coluna k Lembrando que a primeira coluna é enumerada 0. A beleza deste recurso é a forma como ele revela identidades interessantes Como por exemplo, a soma de todos os elementos na linha n+1 é igual a 2 n. ( n i ) 12

13 Coeficientes Binomiais Como são computados coeficientes binomiais? n n! ( k ) = ( n k)! k! Este método possui um problema computacional Os cálculos intermediários de fatorial podem causar overflow aritmético mesmo quando o resultado total cabe em um tipo inteiro. 13

14 Coeficientes Binomiais Existe uma maneira mais estável computacionalmente Utilizar a relação de recorrência implícita na construção do triângulo de Pascal, ou seja: ( n k ) = ( n 1 k ) + 1 ( n 1 k ) 14

15 Coeficientes Binomiais Por quê funciona? Considere a possibilidade do n-ésimo elemento aparecer ( n k ) em um dos subconjuntos de k elementos: Se pertencer, podemos completar o subconjunto tomando k-1 elementos dentre os outros n-1; Se não pertencer, devemos tomar todos os k elementos dentre os n-1 restantes; Não há sobreposição entre estes casos, e todas as possibilidades estão inclusas, ou seja, a soma total inclui todos os k-subconjuntos. 15

16 Coeficientes Binomiais Como casos base para esta recorrência, temos: ( m 1 ) = m ( n k 0 ) = 1 ( k k ) = 1 Vejamos como avaliar esta recorrência algoritmicamente. 16

17 Coeficientes Binomiais Pelas propriedades do triângulo, sabemos que: 1. O elemento do topo é 1; 2. Os elementos das extremidades laterais são 1. Vamos construir uma tabela/matriz com esta forma

18 18 Coeficientes Binomiais Pela relação de recorrência, sabemos que: 1.. Ou seja, m[i][j]=m[i-1][j-1]+m[i-1][j]; ) ( ) ( ) ( = n k n k n k

19 Coeficientes Binomiais 19

20 Coeficientes Binomiais Para calcularmos o coeficiente binomial criamos uma tabela quadrada de dimensões n+1; Não calcularmos o coeficiente diretamente, antes disto, calculamos os coeficientes anteriores Construindo a solução gradativamente. Para calcularmos o coeficiente uma linha e coluna à nossa tabela Aproveitando os resultados anteriores. bastaria adicionar O fundamento da programação dinâmica é exatamente este! ( n k ) ( n k ) 20

21 Programação Dinâmica Como visto anteriormente, problemas combinatórios nos pedem que achemos a melhor solução possível, respeitando algumas restrições; O backtracking busca por todas as soluções possíveis e seleciona a melhor Logo, retorna a resposta correta; Para problemas grandes, é inviável. Algoritmos gulosos fazem sempre a melhor escolha em cada ponto de decisão Sem provas de corretude, falham em obter a melhor solução. 21

22 Programação Dinâmica A programação dinâmica nos fornece uma maneira de projetar algoritmos que: Sistematicamente exploram todas as possibilidades (corretude); Armazena resultados a fim de evitar computação redundante (eficiência). Tais algoritmos são definidos por recursividade Definem a solução para o problema em termos da solução de problemas menores; O que pode até lembrar o backtracking de certa forma. 22

23 Programação Dinâmica Um possível defeito em uma busca recursiva é a computação redundante, ou seja, a exploração redundante do espaço de busca Para evitar tal defeito, podemos armazenar informações sobre a busca; Por exemplo, porque a busca em largura é finita? Porque marcarmos vértices já visitados, para que não os visitemos novamente. Porquê o backtracking é ineficiente? Porque explora todas as possibilidades, ao invés de explorar apenas aquelas inéditas. 23

24 Programação Dinâmica A Programação Dinâmica é uma técnica para acelerarmos algoritmos recursivos Armazenando resultados parciais. O macete é perceber que o algoritmo recursivo computa os mesmos subproblemas repetidamente Então, a medida que são computados, armazenamos a resposta, para que, quando surgirem novamente, apenas consultemos o resultado armazenado. Note que apenas depois de certificar-se que o algoritmo recursivo é correto passamos a nos preocupar em acelerá-lo. 24

25 Anteriormente vimos o casamento exato de padrões Dada uma string s e um texto t, verificamos se há alguma ocorrência exata de s em t. Este não é o caso normalmente, o que ocorre na maioria das vezes é o casamento inexato de padrões Uma vez que o casamento é inexato, precisamos definir uma função de custo que nos diga qual é a distância entre duas strings Ou seja, quantas modificações precisam ser feitas para transformarmos uma string na outra. 25

26 Substituições A troca de um caractere do padrão por um caractere diferente contido no texto Por exemplo, calda e cauda. Inserção A inserção de um caractere no padrão para facilitar o casamento Por exemplo, arco e barco. Remoção A remoção de um caractere do padrão para facilitar o casamento Por exemplo, marco e arco. 26

27 Para determinar a similaridade entre strings precisamos atribuir pesos a estas operações de transformação Atribuindo peso 1 a cada operação nos fornece a distância de edição; Embora outros pesos forneçam resultados interessantes. Podemos calcular a distância de edição computacionalmente, através de um algoritmo recursivo; Observemos que: O último caractere de uma string deve ser casado, substituído, inserido ou deletado; Ignorando o caractere envolvido na última computação, nos deixa com um par de strings menores. 27

28 Se efetuarmos as três operações, teremos 3 pares de strings resultantes Se soubéssemos qual é o custo em cada operação, poderíamos simplesmente escolher a mais eficiente, sem efetuar as outras duas; Acontece que podemos aprender este custo, usando a recursividade. Consideremos dois últimos caracteres i e j e seus dois prefixos s e t, respectivamente. 28

29 Consideremos ainda 0: Casamento; 1: Inserção; 2: Remoção; indel(c) é o custo de inserir ou remover o caractere c Valor 1 para ambos. match(c, d) é o custo de transformar o caractere c no caractere d Para a distância de edição, 0 caso c=d, e 1 caso contrário. 29

30 30

31 Este algoritmo guloso é correto, porém, impraticável Incrivelmente lento para algumas dezenas de caracteres; Sua complexidade é exponencial, crescendo a 3 n Claramente são efetuadas computações redundantes; São possíveis s t chamadas recursivas únicas, devido às combinações de parâmetros (i, j); Uma implementação deste algoritmo, acelerado por programação dinâmica utiliza uma tabela bidimensional em que cada uma das s t células contém o custo da solução ótima dos subproblemas Também há uma célula pai, para explicar em que situação se chega a tal célula. 31

32 32

33 A versão utilizando programação dinâmica possui três diferenças básicas em relação à gulosa: 1. Obtém resultados intermediários procurando na tabela, ao invés de fazer sempre chamadas recursivas; 2. Atualiza o campo pai ( parent ) de cada célula, o que permite a reconstrução da sequência posteriormente; 3. É instrumentada, utilizando a função goal_cell() entre outras, ao invés de simplesmente retornar um valor. Isto permite aplicação a outros problemas facilmente. 33

34 Algumas observações: O primeiro caractere de uma string é, de maneira que o primeiro caractere real é armazenado na posição 1 A primeira linha e coluna da tabela armazenam a distância de edição em relação a string vazia; Para uma string de tamanho i, tal custo é o mesmo que i, inserções ou remoções. 34

35 35

36 Abaixo, um exemplo usando thou shalt not e you should not. 36

37 Abaixo, um exemplo usando thou shalt not e you should not. 37

38 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 38

39 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 39

40 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 40

41 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 41

42 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 42

43 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 43

44 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 44

45 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 45

46 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 46

47 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 47

48 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 48

49 Abaixo, um exemplo usando thou shall not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 49

50 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 50

51 Abaixo, um exemplo usando thou shalt not e you should not. Vermelho: Caracteres comparados; Azul: Troca; Verde: Inserção; Preto: Remoção. 51

52 Abaixo, um exemplo usando thou shalt not e you should not. 52

53 Esta implementação nos retorna o valor da solução ótima, porém, não nos retorna a solução em si Podemos converter thou shalt not em you should not em 5 movimentos, mas qual é a sequência de operações de edição? As possíveis soluções são descritas por trajetos na tabela Começando pela posição inicial (0, 0); Até a posição final ( s, t ); A idéia é seguir o trajeto refazendo as operações de cada passo Armazenadas no campo parent de cada célula. 53

54 Para fazermos isto, partimos da posição final ( s, t ), seguindo o conteúdo do campo parent até uma célula anterior Repetimos este processo até chegarmos na posição inicial (0, 0). O campo parent da posição m[i, j] nos diz se a operação em (i, j) foi substituição (M), inserção (I) ou remoção (D); A sequência para o nosso exemplo é DSMMMMMISMSMMMM Significando: Delete o primeiro t ; Substitua h por y ; Case os próximos 5 caracteres; Insira o ; Substitua a por u ; Substitua t por d. 54

55 55

56 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 56

57 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 57

58 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 58

59 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 59

60 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 60

61 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 61

62 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 62

63 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 63

64 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 64

65 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 65

66 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 66

67 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 67

68 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 68

69 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 69

70 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 70

71 Reconstruindo o caminho até o início M: 0 (i-1, j-1); I: 1 (i, j-1);; D: 2 (i-1, j). 71

72 thou shalt not you should not DSMMMMMISMSMMMM Significando: Delete o primeiro t ; Substitua h por y ; Case os próximos 5 caracteres; Insira o ; Substitua a por u ; Substitua t por d ; 72

73 Ok, mas para que precisamos das funções indel(c), match(c, d), goal_cell() e row_init()? Já sabemos que seus valores são 1, 0/1, ( s, t ) e 0. Realmente esta infraestrutura é muito grande para o problema, mas podemos utilizá-la para resolver casos especiais de casamento inexato de padrões Basta alterar o conteúdo destas funções. 73

74 Substring Matching Suponha que desejamos encontrar a melhor ocorrência de um padrão s em um longo texto t O início do casamento pode ser em qualquer posição do texto, não necessariamente no início; Também, a posição final não necessariamente é o final do texto. Por exemplo, queremos encontrar a ocorrência mais semelhante de Skiena em Skienna, Skena, Skina, ; O código anterior não terá sensibilidade suficiente para nos atender. 74

75 Substring Matching 75

76 Maior Subsequência Comum Nesta variante, estamos interessados em obter a maior quantidade de caracteres não necessariamente contíguos mas que aparecem na mesma ordem em duas strings Ex.: democrata e republicano. Para isto, devemos evitar a substituição de caracteres não idênticos Basta tornar o custo de uma substituição maior que uma inserção somada a uma remoção; No fim, as posições em que houver casamento indicam os caracteres envolvidos na maior subsequência comum. 76

77 Maior Subsequência Comum 77

78 Maior Subsequência Monotônica Uma sequência numérica é monotonicamente crescente se o i-ésimo elemento é no mínimo tão grande quando o elemento i-1 O problema de maior sequência monotônica procura pela menor quantidade de caracteres a serem removidos de uma string s tal que o que sobre seja uma subsequência monotonicamente crescente Ex.: produz Na verdade este problema é de maior subsequência comum, em que a segunda string é formada pela ordenação da primeira Ex.: e produzem

79 Como vimos, nosso algoritmo para distância de edição simples pode realizar tarefas mais árduas facilmente A idéia é ter a percepção de que um determinado problema na verdade é um caso especial de casamento inexato de padrões. 79

80 Programação Dinâmica A programação dinâmica é aplicável a problemas que possuam as seguintes propriedades: Subestrutura Ótima O problema pode ser dividido sucessivamente, e a combinação das soluções ótimas dos subproblemas corresponde à solução ótima do problema original. Superposição de Subproblemas O espaço de subproblemas é pequeno, e eles se repetem durante a solução do problema original. Além disso, a programação dinâmica é melhor utilizada em algoritmos recursivos. 80

81 Programação Dinâmica Tópicos de Projeto Ao contrário da estratégia dividir e conquistar, o balanceamento ideal dos subproblemas requer o tamanho deles seja não muito distante do tamanho do problema original De fato, quando eles são menores que o problema original por um fator multiplicativo, a abordagem se encaixa melhor na estratégia dividir e conquistar. A definição da estrutura da tabela em que são armazenadas as soluções é muito importante A pesquisa de uma entrada e a recuperação da solução devem ser eficientes. 81

82 Programação Dinâmica Vantagens: Economizam computação em problemas que possuem superposição de subproblemas Ganho em desempenho. Desvantagens: O número de soluções armazenadas na tabela pode crescer rapidamente caso o espaço de soluções não seja pequeno Exigindo assim muita memória. 82

83 Sumário dos Arquivos binomial.c: computa coeficientes binomiais usando programação dinâmica; bool.h: biblioteca com o tipo bool para C; editbrute.c: calcula a distância de edição usando força bruta; editbrute_exemplo.c: mesmo código anterior, porém, adaptado para a versão básica do problema; editdistance.h: contém a estrutura e constantes utilizadas na distância de edição; editdistance.c: calcula a distância de edição via programação dinâmica; editdistance_exemplo.c: mesmo código anterior, porém, adaptado para a versão básica do problema; 83

84 Outros Exemplos Temos tempo? 84

85 Soma de Subconjuntos Dado um conjunto de n números a i que somam M, e qualquer K<=M, existe um subconjunto destes números tal que somem K? Assumimos n até 1000, mas M ou K menores. Podemos usar uma tabela unidimensional m[0 M], em que m[b] indica se b é um resultado possível da soma para problemas menores. 85

86 Soma de Subconjuntos 86

87 Troco de Moedas Pense agora que os números a i são moedas, e você quer fazer um troco de exatamente K, porém, com o menor número de moedas possível. A estrutura de solução do exemplo anterior não muda, apenas modificamos o significado do vetor m Agora, m[b] não é 0 ou 1, mas sim exatamente o número de moedas necessárias para somar K. Nota: se você quiser especificar quantas moedas de cada tipo (valor) são utilizadas, transforme o vetor m em uma matriz, em que a soma K é descrita. 87

88 Cake Cutting 88

89 Soma Máxima Em Uma Linha Dado um vetor com n números positivos e negativos, encontre o subvetor com um ou mais números consecutivos cuja soma é a maior; O algoritmo intuitivo é O(n 3 ). O algoritmo a seguir é O(n) Seja m[i] a soma máxima de qualquer subvetor que termina no elemento a[i]. Então m[i] é simplesmente max(a[i], m[i-1]+a[i]). 89

90 Perguntas? 90

91 Na próxima aula Práticas. 91

92 FIM 92

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares Programação Dinâmica Prof. Anderson Almeida Ferreira Adaptado do material elaborado por Andrea Iabrudi Tavares Programação Dinâmica 1950, Bellman Evitar recálculos dos subproblemas em comum Menor para

Leia mais

Programação Dinâmica. Prof. Anderson Almeida Ferreira

Programação Dinâmica. Prof. Anderson Almeida Ferreira Programação Dinâmica Prof. Anderson Almeida Ferreira Programação Dinâmica 1950, Bellman Evitar recálculos dos subproblemas em comum Menor para maior (bottom-up) Tabelas ou memorização É uma técnica de

Leia mais

Comparação com Divisão e Conquista

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

Leia mais

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 Na aula anterior Prova 2 Na aula de hoje Técnicas básicas de contagem; Tentativa e Erro; Recursividade.

Leia mais

O termo Programação Dinâmica é um bocado infeliz.

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

Leia mais

Recursividade, Tentativa e Erro

Recursividade, Tentativa e Erro Recursividade, Tentativa e Erro Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com BCC402 Aula 07 Algoritmos e Programação Avançada Na aula anterior Prova 2 Na aula de hoje Técnicas

Leia mais

Aula prática 5. Funções Recursivas

Aula prática 5. Funções Recursivas Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário

Leia mais

Marina Andretta. 10 de outubro de Baseado no livro Introduction to Linear Optimization, de D. Bertsimas e J. N. Tsitsiklis.

Marina Andretta. 10 de outubro de Baseado no livro Introduction to Linear Optimization, de D. Bertsimas e J. N. Tsitsiklis. Solução básica viável inicial Marina Andretta ICMC-USP 10 de outubro de 2016 Baseado no livro Introduction to Linear Optimization, de D. Bertsimas e J. N. Tsitsiklis. Marina Andretta (ICMC-USP) sme0211

Leia mais

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016 MC102 Aula 26 Recursão Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Indução 2 Recursão 3 Fatorial 4 O que acontece na memória 5 Recursão Iteração 6 Soma em um Vetor 7 Números

Leia mais

Paradigmas de Projetos de Algoritmos

Paradigmas de Projetos de Algoritmos Paradigmas de Projetos de Algoritmos Luciana Assis 9 de junho de 2016 Luciana Assis (UFVJM) 9 de junho de 2016 1 / 36 1 Introdução 2 Força Bruta 3 Abordagem Incremental ou Construtiva 4 Recursão 5 Divisão

Leia mais

Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação. Combinatória

Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação. Combinatória Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Combinatória Tópicos Especiais em Programação Site: http://jeiks.net E-mail: jacsonrcsilva@gmail.com

Leia mais

Programaçã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 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 mais

Recursividade Exaustiva e Backtracking

Recursividade Exaustiva e Backtracking Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Recursividade Exaustiva e Tópicos Especiais em Programação Site: http://jeiks.net E-mail: jacsonrcsilva@gmail.com

Leia mais

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista Algoritmos de Ordenação Profº Carlos Alberto T. Batista E-mail: carlos.batista@facape.br carlos36_batista@yahoo.com.br Por que ordenar os dados? Encontrar elementos em uma lista torna-se algo simples e

Leia mais

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista.

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista. Programação Dinâmica Fernando Lobo Algoritmos e Estrutura de Dados 1 / 56 Programação Dinâmica Outra técnica de concepção de algoritmos, tal como Divisão e Conquista. O termo Programação Dinâmica é um

Leia mais

CIC 111 Análise e Projeto de Algoritmos II

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

Leia mais

Desafios de Programação

Desafios 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 mais

MATRIZES - PARTE Definição e Manipulação de Matrizes AULA 21

MATRIZES - PARTE Definição e Manipulação de Matrizes AULA 21 AULA 21 MATRIZES - PARTE 1 21.1 Definição e Manipulação de Matrizes Sabemos como definir variáveis de um novo tipo de dados, denominado vetor, que representam seqüências de valores de um mesmo tipo. Por

Leia mais

Preliminares. Profa. Sheila Morais de Almeida. agosto

Preliminares. 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 mais

Aula 22: Formulações com número exponencial de variáveis

Aula 22: Formulações com número exponencial de variáveis Aula 22: Formulações com número exponencial de variáveis Otimização Linear e Inteira Túlio Toffolo http://www.toffolo.com.br BCC464 / PCC174 2018/2 Departamento de Computação UFOP Aula de Hoje 1 Correção

Leia mais

CIC 111 Análise e Projeto de Algoritmos II

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

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 02 Técnicas de Projeto de Algoritmos (Força Bruta) Edirlei Soares de Lima Tipos Importantes de Problemas Problemas de Ordenação: Reorganizar

Leia mais

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26 AULA 26 MATRIZES - PARTE 2 26. Mais exemplos Nesta aula, veremos mais dois algoritmos envolvendo matrizes. O primeiro deles calcula a matriz resultante da multiplicação de duas matrizes e utiliza três

Leia mais

Aula 5: Conversões Entre Bases Numéricas

Aula 5: Conversões Entre Bases Numéricas Aula 5: Conversões Entre Bases Numéricas Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Conversões Entre Bases Numéricas FAC 1 / 43 Conversão

Leia mais

BCC204 - Teoria dos Grafos

BCC204 - Teoria dos Grafos BCC204 - Teoria dos Grafos Marco Antonio M. Carvalho (baseado nas notas de aula do prof. Haroldo Gambini Santos) Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes Programação Dinâmica A programação dinâmica costuma ser aplicada a problemas de otimização resultando, em geral, em algoritmos mais eficientes que os mais diretos. Esse método é útil quando

Leia mais

PCC104 - Projeto e Análise de Algoritmos

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 11 de agosto de 2017 Marco Antonio

Leia mais

Princípio da Multiplicação Gerando todas as palavras de um alfabeto. > Princípios de Contagem e Enumeração Computacional 0/18

Princípio da Multiplicação Gerando todas as palavras de um alfabeto. > Princípios de Contagem e Enumeração Computacional 0/18 Conteúdo 1 Princípios de Contagem e Enumeração Computacional Princípio da Multiplicação Gerando todas as palavras de um alfabeto Permutações > Princípios de Contagem e Enumeração Computacional 0/18 Objetivos

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Força Bruta IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/36 Técnica de Projeto de Algoritmos por Força

Leia mais

Fundamentos de Arquiteturas de Computadores

Fundamentos de Arquiteturas de Computadores Fundamentos de Arquiteturas de Computadores Cristina Boeres Instituto de Computação (UFF) Conversões Entre Bases Numéricas Material de Fernanda Passos (UFF) Conversões Entre Bases Numéricas FAC 1 / 42

Leia mais

Método Simplex dual. Marina Andretta ICMC-USP. 24 de outubro de 2016

Método Simplex dual. Marina Andretta ICMC-USP. 24 de outubro de 2016 Método Simplex dual Marina Andretta ICMC-USP 24 de outubro de 2016 Baseado no livro Introduction to Linear Optimization, de D. Bertsimas e J. N. Tsitsiklis. Marina Andretta (ICMC-USP) sme0211 - Otimização

Leia mais

Otimização em Grafos

Otimização em Grafos Otimização em Grafos Luidi G. Simonetti PESC/COPPE 2017 Luidi Simonetti (PESC) EEL857 2017 1 / 33 Definição do Problema Dado: um grafo ponderado G = (V, E), orientado ou não, onde d : E R + define as distâncias

Leia mais

Otimização Combinatória - Parte 4

Otimização Combinatória - Parte 4 Graduação em Matemática Industrial Otimização Combinatória - Parte 4 Prof. Thiago Alves de Queiroz Departamento de Matemática - CAC/UFG 2/2014 Thiago Queiroz (DM) Parte 4 2/2014 1 / 33 Complexidade Computacional

Leia mais

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

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

Leia mais

Aprendizado de Máquina

Aprendizado de Máquina Aprendizado de Máquina Template Matching Luiz Eduardo S. Oliveira Universidade Federal do Paraná Departamento de Informática http://lesoliveira.net October 25, 2012 Luiz S. Oliveira (UFPR) Aprendizado

Leia mais

ALGORITMOS DE ORDENAÇÃO

ALGORITMOS 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 mais

CIC 110 Análise e Projeto de Algoritmos I

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

Leia mais

Técnicas de Projeto de Algoritmos

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

Leia mais

Análise Combinatória AULA 1. Métodos Simples de Contagem

Análise Combinatória AULA 1. Métodos Simples de Contagem Análise Combinatória AULA 1 Métodos Simples de Contagem Tales Augusto de Almeida 1. Introdução A primeira ideia que surge no imaginário de qualquer estudante quando ele ouve a palavra contagem seria exatamente

Leia mais

Universidade de São Paulo

Universidade de São Paulo Universidade de São Paulo Instituto de Ciências Matemáticas e Computação SCE5763 - Tipos e Estrutura de Dados - Luis Gustavo Nonato 2 a Lista de Exercícios 1. Seja A um array de inteiros. Escreva algoritmos

Leia mais

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

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

Leia mais

Projeto e Análise de Algoritmos

Projeto 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 mais

Introdução à Ciência da Computação II

Introdução à Ciência da Computação II Introdução à Ciência da Computação II 2semestre/200 Prof Alneu de Andrade Lopes Apresentação com material gentilmente cedido pelas profas Renata Pontin Mattos Fortes http://wwwicmcuspbr/~renata e Graça

Leia mais

Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501)

Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501) Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501) Prof. Moacir P. Ponti Jr. 24 de novembro de 2010 1 Hashing 1. Suponha uma tabela hash de tamanho 10 com endereçamento aberto para

Leia mais

Alinhamento de Sequências e Genômica Comparativa

Alinhamento de Sequências e Genômica Comparativa Encontro França-Brasil de Bioinformática Universidade Estadual de Santa Cruz (UESC) Ilhéus-BA - Brasil Alinhamento de Sequências e Genômica Comparativa Maria Emília M. T. Walter Departamento de Ciência

Leia mais

Otimização Linear. Profª : Adriana Departamento de Matemática. wwwp.fc.unesp.br/~adriana

Otimização Linear. Profª : Adriana Departamento de Matemática. wwwp.fc.unesp.br/~adriana Otimização Linear Profª : Adriana Departamento de Matemática adriana@fc.unesp.br wwwp.fc.unesp.br/~adriana Revisão Método Simplex Solução básica factível: xˆ xˆ, xˆ N em que xˆ N 0 1 xˆ b 0 Solução geral

Leia mais

Aula 01 Microsoft Excel 2016

Aula 01 Microsoft Excel 2016 Aula 01 Microsoft Excel 2016 Prof. Claudio Benossi Prof. Rodrigo Achar Prof. Wagner Tufano São Paulo SP 2018 1 01 Informações sobre a interface Aprender a trabalhar com o Excel pode ser o divisor de águas

Leia mais

Organização de Computadores I

Organização de Computadores I Organização de Computadores I Aula 5 Material: Diego Passos http://www.ic.uff.br/~debora/orgcomp/pdf/parte5.html Organização de Computadores I Aula 5 1/21 Tópicos Representação de números negativos: Sinal-magnitude.

Leia mais

TABELAS DE DISPERSÃO/HASH

TABELAS DE DISPERSÃO/HASH 1/47 TABELAS DE DISPERSÃO/HASH Introdução 2/47 Introdução Motivação - Considerar o problema de pesquisar um determinado valor num vetor: - Se o vetor não está ordenado, a pesquisa requer O(n) de complexidade

Leia mais

Técnicas de Programação

Técnicas de Programação Técnicas de Programação Algoritmos Anderson Gomes Eleutério Lógica A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir

Leia mais

Aula 8: Complemento a Um e Complemento a Dois

Aula 8: Complemento a Um e Complemento a Dois Aula 8: Complemento a Um e Complemento a Dois Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Complemento a Um e Complemento a Dois FAC 1 / 40

Leia mais

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

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

Leia mais

Pesquisa Operacional. Prof. José Luiz

Pesquisa Operacional. Prof. José Luiz Pesquisa Operacional Prof. José Luiz Resolver um problema de Programação Linear significa basicamente resolver sistemas de equações lineares; Esse procedimento, apesar de correto, é bastante trabalhoso,

Leia mais

4 Casamento de Padrões

4 Casamento de Padrões 4 Casamento de Padrões O casamento de padrões é uma técnica que tem por objetivo localizar os elementos constituintes de uma seqüência em um conjunto de outras seqüências. Chamemos de padrão a seqüência

Leia mais

AED2 - Aula 01 Apresentação, estruturas de dados, tabelas de símbolos e hash tables

AED2 - Aula 01 Apresentação, estruturas de dados, tabelas de símbolos e hash tables AED2 - Aula 01 Apresentação, estruturas de dados, tabelas de símbolos e hash tables É esperado de um projetista de algoritmos que ele entenda o problema a resolver e compreenda as ferramentas a sua disposição,

Leia mais

Álgebra Linear Semana 04

Álgebra Linear Semana 04 Álgebra Linear Semana 04 Diego Marcon 17 de Abril de 2017 Conteúdo 1 Produto de matrizes 1 11 Exemplos 2 12 Uma interpretação para resolução de sistemas lineares 3 2 Matriz transposta 4 3 Matriz inversa

Leia mais

Estruturas de Dados 2

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

Leia mais

Introdução à Computação

Introdução à Computação Introdução à Computação Jordana Sarmenghi Salamon jssalamon@inf.ufes.br jordanasalamon@gmail.com http://inf.ufes.br/~jssalamon Departamento de Informática Universidade Federal do Espírito Santo Agenda

Leia mais

Programação Estruturada

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

Leia mais

Lista de Exercícios 04

Lista de Exercícios 04 Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Disciplina: BCC202 - Estruturas de Dados I Professor: Túlio Toffolo (www.decom.ufop.br/toffolo)

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 09 Consultas de Intervalo Consulta de Intervalo Neste capítulo, discutimos estruturas

Leia mais

Análise e Complexidade de Algoritmos

Aná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 mais

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 Na aula anterior Prova. 2 Na aula de hoje Geometria. 3 A geometria é inerentemente uma disciplina

Leia mais

04 Recursão SCC201/501 - Introdução à Ciência de Computação II

04 Recursão SCC201/501 - Introdução à Ciência de Computação II 04 Recursão 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 Ponti Jr. (ICMCUSP) 04Recursão

Leia mais

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Plano de Ensino e Aprendizagem ( PEA) Algoritmo ShellSort Proposto por

Leia mais

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos 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 mais

Introdução à Teoria da Computação Exercícios

Introdução à Teoria da Computação Exercícios Introdução à Teoria da Computação Exercícios Livro: Michel Sipser, Introdução à Teoria da Computação 2ª Ed. Capítulo 07 Obs: Exercícios 7.7 e 7.20 estão apresentados em versões simplificadas. NP Dicas

Leia mais

10.1. Aula 10: Pilhas. O conceito de pilha. Algoritmos de inserção e remoção. Exemplo: Notação Polonesa

10.1. Aula 10: Pilhas. O conceito de pilha. Algoritmos de inserção e remoção. Exemplo: Notação Polonesa 10.1 Aula 10: Pilhas O conceito de pilha Algoritmos de inserção e remoção Exemplo: Notação Polonesa 10.2 Pilhas Uso eficiente de listas: inserções e remoções não devem acarretar movimentação de nós. A

Leia mais

Aula 10: Introdução a Vetores e Matrizes

Aula 10: Introdução a Vetores e Matrizes Aula 10: Introdução a Vetores e Matrizes Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Vetores e Matrizes Programação de Computadores IV 1 / 50 Agenda

Leia mais

Introdução Paradigmas

Introdução Paradigmas Introdução Paradigmas Recursividade Algoritmos tentativa e erro Divisão e conquista Programação dinâmica Algoritmos gulosos Algoritmos aproximados 1 Introdução O projeto de algoritmos requer abordagens

Leia mais

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15 Análise e Síntese de Algoritmos Programação Dinâmica CLRS, Cap. 15 Contexto Revisões [CLRS, Cap. 1-10] Algoritmos em Grafos [CLRS, Cap. 22-26] Algoritmos elementares Árvores abrangentes Caminhos mais curtos

Leia mais

Técnicas de análise de algoritmos

Técnicas de análise de algoritmos CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br

Leia mais

Conceitos Básicos. Professor: Juliano Lucas Gonçalves.

Conceitos Básicos. Professor: Juliano Lucas Gonçalves. Conceitos Básicos Professor: Juliano Lucas Gonçalves juliano.goncalves@ifsc.edu.br Agenda Revisão Algoritmos Memória, variáveis e constantes Estrutura básica de um algoritmo em pseudocódigo 2 O que já

Leia mais

Tópicos em Algoritmos. André Guedes

Tópicos em Algoritmos. André Guedes Tópicos em Algoritmos André Guedes 31 de agosto de 2017 Sumário 1 Aulas 1 2 Introdução 2 3 Problemas Computacionais e Algoritmos 4 3.1 Definições............................. 4 3.2 Correção e eficiência.......................

Leia mais

Método Simplex. Marina Andretta ICMC-USP. 19 de outubro de 2016

Método Simplex. Marina Andretta ICMC-USP. 19 de outubro de 2016 Método Simplex Marina Andretta ICMC-USP 19 de outubro de 2016 Baseado no livro Introduction to Linear Optimization, de D. Bertsimas e J. N. Tsitsiklis. Marina Andretta (ICMC-USP) sme0211 - Otimização linear

Leia mais

BCC202 - Estrutura de Dados I

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

Leia mais

A seguir, uma demonstração do livro. Para adquirir a versão completa em papel, acesse:

A seguir, uma demonstração do livro. Para adquirir a versão completa em papel, acesse: A seguir, uma demonstração do livro. Para adquirir a versão completa em papel, acesse: www.pagina10.com.br Fundamentos de Matemática Superior - BINÔMIO DE NEWTON Estes resultados foram escritos com expoentes

Leia mais

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010 Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Programa de Pós-Graduação em Ciência da Computação Projeto e Análise de Algoritmos - 1 o semestre de 2010 Professor: David Menotti

Leia mais

Cálculo Numérico BCC760

Cálculo Numérico BCC760 Cálculo Numérico BCC760 Resolução de Sistemas de Equações Lineares Simultâneas Departamento de Computação Página da disciplina http://www.decom.ufop.br/bcc760/ 1 Introdução! Definição Uma equação é dita

Leia mais

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

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

Leia mais

Árvores Binárias e AVL Felipe Barros Pontes Gustavo Márcio de Morais Cunha Márcio de Medeiros Ribeiro

Árvores Binárias e AVL Felipe Barros Pontes Gustavo Márcio de Morais Cunha Márcio de Medeiros Ribeiro Universidade Federal de Alagoas - UFAL Departamento de Tecnologia da Informação - TCI Ciência da Computação Árvores Binárias e AVL Felipe Barros Pontes Gustavo Márcio de Morais Cunha Márcio de Medeiros

Leia mais

5ª Lista de Exercícios de Programação I

5ª Lista de Exercícios de Programação I 5ª Lista de Exercícios de Programação I Instrução As questões devem ser implementadas em C. Questões que envolvam leitura de matrizes, a construção dessas matrizes pode ser realizada através da geração

Leia mais

Complemento a Um e Complemento a Dois

Complemento a Um e Complemento a Dois Complemento a Um e Complemento a Dois Cristina Boeres (baseado no material de Fernanda Passos) Instituto de Computação (UFF) Fundamentos de Arquiteturas de Computadores Cristina Boeres (IC/UFF) Complemento

Leia mais

LINGUAGEM C: ARRAY: VETORES E MATRIZES

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

Leia mais

XX OLIMPÍADA REGIONAL DE MATEMÁTICA DE SANTA CATARINA Treinamento 7 Nível 3

XX OLIMPÍADA REGIONAL DE MATEMÁTICA DE SANTA CATARINA Treinamento 7 Nível 3 UNIVERSIDADE FEDERAL DE SANTA CATARINA CENTRO DE CIÊNCIAS FÍSICAS E MATEMÁTICAS DEPARTAMENTO DE MATEMÁTICA PET MATEMÁTICA XX OLIMPÍADA REGIONAL DE MATEMÁTICA DE SANTA CATARINA Treinamento 7 Nível 3 Dias/Horários

Leia mais

Cálculo Numérico Noções básicas sobre erros

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

Leia mais

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas Estrutura de um Programa em Linguagem Algorítmica Nesse curso nós vamos utilizar a linguagem algorítmica para

Leia mais

Estruturas de dados para listas arrays e listas ligadas

Estruturas de dados para listas arrays e listas ligadas Estruturas de dados para listas arrays e listas ligadas Fernando Lobo Algoritmos e Estrutura de Dados Algumas figuras retiradas do livro Introduction to Algorithms, 3rd Edition. 1 / 29 Listas Uma lista

Leia mais

Excel BÁSICO Aula 4 Tratamento de Dados. Prof. Cassiano Isler Turma 4

Excel BÁSICO Aula 4 Tratamento de Dados. Prof. Cassiano Isler Turma 4 Excel BÁSICO 4 Tratamento de Dados Prof. Cassiano Isler 2016.2 - Turma 4 Prof. Cassiano Isler Excel BÁSICO - 4 2 / 36 GÓMEZ, Luis Alberto. Excel para engenheiros. Visual Books, 2009. Capítulo 1. Disponível

Leia mais

Lista de Exercício de Linguagens de Programação Prog. Funcional

Lista de Exercício de Linguagens de Programação Prog. Funcional UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE CIÊNCIA E TECNOLOGIA CURSO DE CIÊNCIA DA COMPUTAÇÃO Lista de Exercício de Linguagens de Programação Prog. Funcional 1) Construa uma função del_posicao_n ::

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 03 Técnicas de Projeto de Algoritmos (Divisão e Conquista) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force)

Leia mais

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica Gabriel Rosa Guilherme Alves Agenda O problema, definição e exemplo Construindo uma solução... Expressão recursiva Algoritmo recursivo

Leia mais

Métodos de Programação I Ana Maria de Almeida

Métodos de Programação I Ana Maria de Almeida Métodos de Programação I 2. 35 2.10 O TIPO ESTRUTURADO TABELA (ARRAY) A estruturação de informação introduz uma nova dimensão no poder e complexidade dos nossos programas que, ao mesmo tempo que amplia

Leia mais

Resumo. Palavras-chave: implementações aritméticas; inverso modular; sistema de restos.

Resumo. Palavras-chave: implementações aritméticas; inverso modular; sistema de restos. 2017, NÚMERO 1, VOLUME 5 ISSN 2319-023X Universidade Federal de Sergipe - UFS evilson@ufs.br Resumo Neste trabalho apresentamos uma implementação para execução manual do algoritmo estendido das divisões

Leia mais

Técnicas de projeto de algoritmos: Indução

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 dbeder@usp.br 08/2008

Leia mais

Algoritmos de pesquisa. Tabelas de dispersão/hash

Algoritmos de pesquisa. Tabelas de dispersão/hash Algoritmos de pesquisa Tabelas de dispersão/hash Introdução Motivação: Considerar o problema de pesquisar um determinado valor num vetor. Se o vetor não está ordenado, a pesquisa requer O(n) de complexidade.

Leia mais

Teoria dos Grafos Aula 17

Teoria dos Grafos Aula 17 Teoria dos Grafos Aula 17 Aula passada Problema da soma do subconjunto (subset sum) Programação dinâmica Problema da mochila Aula de hoje Alinhamento de sequências Programação dinâmica Caminho mais curto

Leia mais

Análise de Algoritmos Estrutura de Dados II

Aná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 mais