Técnicas de Divisão e Conquista e de Programação Dinâmica para a resolução de Problemas de Otimização

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

Download "Técnicas de Divisão e Conquista e de Programação Dinâmica para a resolução de Problemas de Otimização"

Transcrição

1 Técnicas de Divisão e Conquista e de Programação Dinâmica para a resolução de Problemas de Otimização Francisco Vando Carneiro Moreira Gerardo Valdisio Rodrigues Viana Faculdade Lourenço Filho Universidade Estadual do Ceará Resumo Encontrar o valor máximo ou mínimo de uma função é um problema bastante utilizado em diversas áreas. Em geral, este valor é chamado de "ótimo" pois corresponde ao melhor dentre todos os possíveis num espaço de soluções viáveis. Neste contexto define-se a otimização, que pode ser restrita, quando a solução atender determinadas condições impostas pelo problema, ou irrestrita, quando qualquer solução dentro do domínio da função é investigada. Classificam-se como problemas mais difíceis aqueles em que o espaço de soluções não é contínuo, caracterizando a chamada Otimização Discreta, ou Combinatória, definida assim: dado um conjunto A de elementos, deseja-se encontrar um subconjunto S A tal que a função objetivo, aplicada aos elementos de S, possui o valor "ótimo" que pode ser de máximo (maior de todos) ou de mínimo (menor de todos). Como o número de opções para a escolha de S cresce de forma exponencial com o tamanho do conjunto A, métodos exatos para obter a "solução ótima" precisam percorrer todo o espaço, o que se torna impraticável. Para isto existem os métodos aproximados que correspondem às heurísticas, meta-heurísticas e algoritmos aproximativos. Dentre estes, destacam-se as técnicas de Divisão e Conquista e de Programação Dinâmica. Neste trabalho, mostramos o funcionamento destes dois algoritmos aplicados a alguns problemas conhecidos de otimização combinatória. Palavras-chave: Divisão e Conquista, Programação Dinâmica, Algoritmos, Problema da Mochila. 1. INTRODUÇÃO Dados, uma mochila com capacidade C e um conjunto A com n itens, onde cada item i A contém um peso P i > 0 e uma utilidade, ou valor, V i > 0, deseja-se determinar um subconjunto S A tal que a soma dos pesos dos elementos de S não ultrapasse a capacidade da mochila e a soma dos respectivos valores seja a maior possível. Este artigo apresenta duas soluções com paradigmas distintos para este clássico problema de otimização combinatória. O primeiro algoritmo utiliza a estratégia de Divisão e Conquista na ordenação dos custos relativos (Peso/Valor) por intercalação (MergeSort). A

2 6 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 seguir é utilizada uma heurística gulosa para obter uma solução aproximada. Estando os custos relativos em ordem não decrescente, o funcionamento do algoritmo guloso consiste em aceitar, a cada iteração, o primeiro item que aparecer, verificando a cada passo se a capacidade da mochila é, ou não, ultrapassada. O resultado obtido por esta estratégia é, em geral, próxima da melhor solução possível, ou seja, da solução ótima. O segundo algoritmo utiliza o método da programação dinâmica que sempre encontra a solução ótima, porém, com um tempo proporcional ao valor da entrada e não ao seu tamanho, como é comum na análise da função de complexidade de um algoritmo. Veremos que, para uma entrada de um dado tamanho n (número de itens) com a capacidade da mochila C, o tempo de execução deste algoritmo poderá ser relativamente grande, portanto, inviável. Deste modo diz-se que o algoritmo de programação dinâmica possui uma complexidade pseudo-polinomial. Nos experimentos computacionais foram consideradas algumas instâncias do problema da Mochila para cada um dos algoritmos implementados. Com os resultados, dispostos numa tabela, é possível comparar a aproximação das soluções e seus respectivos tempos de execução. 2. DIVISÃO E CONQUISTA O paradigma Divisão e Conquista consiste em dividir o problema a ser resolvido em partes menores, encontrar soluções para as partes, e então combinar as soluções obtidas em uma solução global. ZIVIANI (2007) cita o uso do paradigma para resolver problemas nos quais os subproblemas são versões menores do problema original geralmente leva a soluções eficientes e elegantes, especialmente quando é utilizado recursivamente. A Divisão e Conquista emprega modularização de programas e frequentemente conduz a um algoritmo simples e eficiente. Esta técnica é bastante utilizada em desenvolvimento de algoritmos paralelos, onde os subproblemas são tipicamente independentes um dos outros, podendo assim serem resolvidos separadamente.

3 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Segundo FIGUEIREDO (2011), a técnica de Divisão e Conquista consistem em 3 passos: Divisão: dividir a instância do problema original em duas ou mais instâncias menores, considerando-as como subproblemas. Conquista: resolver cada subproblema recursivamente. Combinação: combinar as soluções encontradas em cada subproblema, compondo uma solução para o problema original. 2.1 Vantagens Indicado para aplicações que tem restrição de tempo. É de fácil implementação. Simplifica problemas complexos. 2.2 Desvantagens Necessidade de memória auxiliar. Repetição de Subproblemas. Tamanho da pilha (número de chamadas recursivas e/ou armazenadas pode causar estouro de memória). 2.3 Algumas aplicações Multiplicação de inteiros longos. Menor distância entre pontos. Ordenação rápida (quicksort) e por intercalação (mergesort). Pesquisa em árvore binária. Um exemplo para ilustrar o uso dessa técnica é o algoritmo de ordenação de um vetor por intercalação (MergeSort). Sua representação pode ser feita através de uma árvore binária, conforme a indicada na Figura 1.

4 8 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 Figura 1 Técnica de Divisão e Conquista Fonte: MergeSort (FIGUEIREDO, 2011) A altura (h) da árvore de execução é O (log n) e a quantidade de operações em cada nível da árvore é assintoticamente igual a O(n), conclui-se então que a complexidade do algoritmo no pior caso é O(n log n) (VIANA e CINTRA, 2011). O MergeSort (ordenação por intercalação) divide o vetor de entrada em dois outros vetores com metade do tamanho do vetor original (em caso de tamanho ímpar, um deles terá um elemento a mais que o outro). Cada um destes vetores menores é ordenado recursivamente utilizando o mesmo procedimento. O MergeSort garante que os dois subproblemas têm tamanho da ordem de n/2, mas requer alocação de memória para o vetor temporário de tamanho n. Este algoritmo, apresentado na Figura 2, usa o procedimento de intercalação (Merge) entre dois conjuntos previamente ordenados.

5 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Algoritmo MERGESORT (L, ini, fim) ENTRADA: um vetor L e as posições ini e fim SAÍDA: o vetor L em ordem crescente da posição ini até a posição fim inicio se ini < fim meio = (ini + fim)/2 // divisão inteira se ini < meio MERGESORT(L, ini, meio) se (meio + 1) < fim MERGESORT(L, meio + 1, fim) MERGE(L, ini, meio, fim) fim {MERGESORT Figura 2 Algoritmo para o MergeSort Fonte: Viana e Cintra (2011, p. 30) A Figura 3 mostra o algoritmo MERGE que faz a intercalação entre as duas partes de L. PROCEDIMENTO MERGE ( L, ini, meio, fim ) ENTRADA: inteiros: ini, meio, fim; Vetor L[ini..fim] // L[ini..meio] = primeira série ordenada // L[meio+1..fim] = segunda série ordenada SAÍDA: Registro L com uma única série ordenada // L[ini..fim] = série intercalada /ordenada inicio i = ini; k = 1; j = meio + 1 enquanto ( i meio e j fim ) se ( L[i] L[j]) S[k] = L[i] i = i + 1 senão S[k] = L[j] j = j + 1 k = k + 1 // fim se // fim enquanto continua

6 10 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 se ( i > meio ) p = j q = fim senão p = i q = meio para i = p até q S[k] = L[i] k = k + 1 // fim para L[ini..fim] = S[1..(fim-ini+1)] retorna (L) fim {MERGE Figura 3 Algoritmo de Intercalação Fonte: Viana e Cintra (2011) 3. ALGORITMO GULOSO PARA O PROBLEMA DA MOCHILA Para resolver o problema da Mochila booleana (0/1) de forma aproximada foi utilizada uma heurística gulosa apresentada na Figura 4. A descrição do algoritmo é feita a seguir. A ordenação inicial refere-se à ordem não decrescente do chamado custo relativo (Peso/Valor). A técnica de Divisão e Conquista foi utilizada como um procedimento auxiliar para esta classificação. Em cada passo (iteração) do algoritmo é selecionado ou escolhido o primeiro elemento do conjunto ordenado que caiba na mochila. Este objeto escolhido passa a fazer parte da solução construída até então. Observa-se, neste contexto, que foram unidas as duas técnicas, resultando em um algoritmo, onde se tem a estratégia gulosa baseado no custo relativo através da ordenação MergeSort do paradigma de divisão e conquista, acima abordado.

7 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Algoritmo MOCHILA_0/1_Guloso ENTRADA: C= capacidade da Mochila; n = número de itens V[1..n] vetor com os valores(custos) dos itens e P[1..n] vetor com os pesos dos itens SAÍDA: X[1..n] vetor binário que indica se o item i é selecionado(1) ou não (0) Sol = solução (valor máximo da Função objetivo) Inicio Sol = 0 para i = 1 até n L[i] = V[i] / P[i] // fim para MERGESORT ( L, 1, n ) para i = 1 até n e enquanto C 0 j = C / P[i] // divisão inteira X[i] = min { j, 1 C = C X[i]*P[i] Sol = Sol + X[i]*V[i] // fim para escreve ( Sol, X[j], j=1..n ) fim {MOCHILA_0/1_Guloso Figura 4 Algoritmo para o Problema da Mochila Fonte: Campello e Maculan (1994) 4. PROGRAMAÇÃO DINÂMICA A Programação Dinâmica (PD) pode ser caracterizada como um processo sequencial de tomada de decisões, onde uma decisão ótima global pode ser obtida através da otimização de subproblemas (ou ótimos locais) individuais, seguindo o princípio de otimalidade de Bellman (DIAS et al, 2010). Na Programação Dinâmica resolvem-se os problemas de pequena dimensão e guardam-se as soluções em tabelas dinâmicas, a fim de evitar redundância de cálculo, ou seja, uma solução parcial obtida somente é calculada uma única vez. Este procedimento é importante porque, diferentemente da técnica de divisão e conquista, aqui cada subproblema é dependente de pelo menos um outro. A solução final é obtida combinando as soluções dos problemas menores

8 12 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 (ROSA, 2011). Pode-se dizer que a Programação Dinâmica é uma maneira esperta de transformar recursão em iteração, daí ser chamada de Otimização Recursiva. Aplica-se quando uma estratégia ótima para resolver um problema continua a ser ótima quando este é subproblema de um problema maior, ou seja, somente soluções ótimas dos subproblemas podem compor uma solução ótima do problema original (RIBEIRO, 1999). Muitas vezes quando o algoritmo direto tem complexidade exponencial, os algoritmos desenvolvidos por programação dinâmica é polinomial, reduzindo drasticamente o tempo de execução. Outras vezes, como no caso do problema do caixeiro viajante, e da partição, a complexidade continua exponencial, mas de ordem mais baixa. A idéia básica da programação dinâmica sugere, então, uma estrutura geral para algoritmos projetados conforme Figura 5. Figura 5 - Estrutura Geral da Programação Dinâmica Fonte: Munari e Augusto (2007)

9 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Na inicialização, a entrada é decomposta em partes mínimas para as quais são obtidas respostas diretas, a cada iteração vai aumentando tamanho das partes e obtendo respostas correspondentes a partir das já geradas, até que as partes atingem o tamanho da entrada original. Quando então sua solução é recuperada e o processo finalizado. Um exemplo clássico para a aplicação desta técnica é a ordem de produto de matrizes, citado em (ZIVIANI, 2007), que ilustra bem a técnica de programação dinâmica por meio de determinar a melhor forma de avaliar o produto de várias matrizes: M = A 1 x A 2 x... x A n, Onde cada A i é uma matriz com m i-1 linhas e m i colunas. A ordem na qual as matrizes são multiplicadas pode ter um efeito enorme no número total de operações de adição e multiplicação necessárias para obter M. Por exemplo, se A 1 =A(50x20); A 2 =B(20x1); A 3 =C(1x10) e A 4 =D(10x100), teríamos as seguintes possibilidades de realizar o produto, conforme colocação de parênteses que indicam a prioridade indicada em cada uma das árvores da Figura 6. Esta ordem de execução do produto de duas matrizes acarreta valores distintos do número de multiplicações total e o que se deseja é minimizar este valor: a. A x ( ( B x C ) x D ) b. ( ( A x B ) x C ) x D c. ( A x B ) x ( C x D ) d. A x ( B x ( C x D ) ) e. ( A x ( B x C ) ) x D Figura 6 Possibilidades do produto de 4 matrizes. Os nós intermediários contém os resultados parciais e a raiz, o produto AxBxCxD Fonte: Dasgupta et al (2008, p. 170)

10 14 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 Considerando X(pxq) uma matriz com p linhas e q colunas, sabemos que o produto das matrizes X(pxq) por Y(qxr) existe e requer (p.q.r) multiplicações para obter Z(pxr)=XY. A instância {m 0, m 1,...,m k,...,m n-1, m n ) representa a sequência do produto das matrizes A 1, A 2,...A k... A n com respectivas ordens (m 0 xm 1 ), (m 1 xm 2 ),..., (m n - 1 xm n ). Para o exemplo anterior teríamos m 0 = 50, m 1 = 20, m 2 = 1, m 3 = 10 e m 4 = 100 para definir as ordens das n=4 matrizes A, B, C e D. Na Tabela 1 é mostrado o custo total de cada alternativa que corresponde ao total de multiplicações requeridas em cada caso. Parentetização N o de multiplicações necessárias para o produto Custo total a) A ( ( B C ) D) b) ( ( A B ) C ) D c) ( A B ) ( C D ) d) A ( B ( C D ) ) e) ( A ( B C ) ) D Tabela 1 Escolha do melhor arranjo (c) para o produto de 4 matrizes Observa-se, neste exemplo, que para o pior arranjo, seriam necessárias multiplicações, isto equivale a mais de 17 vezes o melhor arranjo (7000 multiplicações). Este valor é aproximadamente a mesma relação entre os tempos de execução do algoritmo. O total P(n) de maneiras distintas para colocação de parênteses numa sequência de n matrizes é dada pela seguinte forma recursiva: P(n) cresce de forma exponencial em função de n, conforme mostra a Tabela 2.

11 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, n P(n) n P(n) Tabela 2 Número de alternativas para colocação de parênteses entre n matrizes O uso da Programação Dinâmica para o problema do produto de matrizes tem por objetivo encontrar uma estrutura de parentetização ótima sem ter que gerar todas estas possibilidades. Considerando a notação para definir a cadeia A i..j = A i A i+1... A j indicativa do produto da sequência de matrizes A i até A j, podemos observar que A 1..n = (A 1..k ) x (A k+1..n ). Pelo princípio da otimalidade da PD, se as subcadeias A 1..k e A k+1..n tem estruturas ótimas (ou sub-ótimas) podemos afirmar que A 1..n terá estrutura ótima. Usando a tabela dinâmica contendo valores como mínimos de multiplicações escalares para calcular a matriz A i..j então, temos pois A i..i = A i e não há nenhum cálculo e representa o menor custo para calcular A i..k e A k+1.. j mais o custo para multiplicar estas duas matrizes, ou seja: A definição recursiva para o custo mínimo de colocar parênteses no produto A i..j é:

12 16 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 Para armazenarmento da solução ótima, pode-se utilizar uma matriz S, tal que o valor de S[i,j] contém o valor de k tal que M[i,j] é mínimo. Os algoritmos apresentados nas figuras 7 e 8 resolvem o problema do produto de matrizes. Algoritmo PD_Produto_Matrizes ENTRADA: um vetor P contendo as ordens das n matrizes SAÍDA: matrizes M e S contendo a solução inicio para i =1 até n M[i,i]=0 para L= 2 até n para i= 1 até n-l+1 j = i + L 1 M[i,j] = para k= i até j-1 q = M[i,k] + M[k+1,j] + P[i]*P[k]*P[j] se q < M[i,j] M[i,j] = q S[i,j] = k return M [1,n], S fim {PD_Produto_Matrizes Figura 7 Algoritmo para resolver o Problema do Produto de várias matrizes por Programação Dinâmica Procedimento PRINT_CADEIA ( S, i, j ) inicio se i = j print A senão print ( PRINT_CADEIA ( S, i, S[ i, j ] ) PRINT_CADEIA ( S, S[ i, j ] + 1, j ) print ) fim { PRINT_CADEIA Figura 8 Gera a cadeia de caracteres referente à saída do algoritmo da Figura 7

13 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Os programas implementados em C# correspondentes aos algoritmos das Figuras 7 e 8 estão representados no Anexo A.2. Como exemplo de seu funcionamento foi executado o programa para uma dada instância, obtendo os seguintes resultados mostrados a seguir na Figura 9. Figura 9 Resultado do Programa do Anexo A Vantagens da Programação Dinâmica Pode ser utilizada num grande número de problemas de otimização discreta. Não necessita de muita precisão numérica. Útil para aplicar em problemas que exigem teste de todas as possibilidades.

14 18 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Desvantagens Necessita de grande espaço de memória A complexidade espacial pode ser exponencial 4.3 Algumas aplicações Multiplicação de várias matrizes Projeto de sistemas confiáveis 5. PROBLEMA DA MOCHILA POR PROGRAMAÇÃO DINÂMICA Conforme definido anteriormente, uma instância do Problema da Mochila booleana é definida por um conjunto com n itens com seus pesos P i e valores V i para uma mochila de capacidade C. Como o problema é de maximização a definição recursiva para a programação dinâmica é específica para este problema é dada por: O algoritmo a seguir resolve o problema: Algoritmo MOCHILA_0/1_PD ENTRADA: C= capacidade da Mochila; n = número de itens V[1..n] vetor com os valores(custos) dos itens e P[1..n] vetor com os pesos dos itens SAÍDA: X[1..n] vetor binário que indica se o item i é selecionado(1) ou não (0) Sol = solução (valor máximo da Função objetivo)

15 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, inicio para i = 1 até C M[i,0] = 0 para j = 1 até n M[0,j] = 0 X[j] = 0 para i = 1 até C se P[j] > i M[i,j] = M[i,j 1] senão M[i,j] = max ( M[i,j 1], M[i P[j], j 1] + V[j] // fim para Sol = M[C,n] // rotina para determinar o vetor X (itens selecionados) aux = Sol j = n enquanto j > 0 se M[C,j] M[c,j 1] X[j] = 1 aux = aux V[j] k = j 1 enquanto M[C,k] > aux M[c,k] = aux k = k 1 // fim se j = j 1 // fim enquanto fim { Mochila_0/1_PD Figura 10 Algoritmo para o Problema da Mochila por Programação Dinâmica

16 20 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, EXPERIMENTOS COMPUTACIONAIS Na abordagem utilizada para avaliar a aplicação de Técnicas de Divisão e Conquista e Programação Dinâmica para o problema da mochila, foram utilizadas oito instâncias distintas. Cada instância descrita em um arquivo de texto representa uma mochila com sua capacidade e seus itens identificados nas primeiras colunas da Tabela 3. Foi desenvolvida uma ferramenta em C#.NET 4.0 Asp.Net MVC utilizando a IDE Visual Studio 2010 Ultimate. A avaliação das instâncias foi realizada em uma máquina com 2 GB de Ram, processador Intel Core 2 Duo e sistema operacional Microsoft Windows XP. A elaboração deste programa tem como objetivo ser de uso acadêmico. Para efeito de comparação para o problema da mochila, resolvido tanto pela técnica de Divisão e Conquista como por Programação Dinâmica, retornamos o tempo gasto por cada técnica, bem como a solução encontrada. As demais colunas da Tabela 3 apresenta estes resultados. Nº Instância Nº Itens Capacidade Sol_1(PD) Tempo_1 Sol_2(DC) Tempo_2 Sol.Ótima Conhecida 1 KP KP , KP , , KP , , KP , , KP , , KP , , KP *** Tabela 3 Resultados obtidos para algumas instâncias do Problema da Mochila

17 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Após execução do programa descrito no Anexo A.4 apresentamos os resultados com os valores de tempo expressos em segundos. Quando informados igual a 0 representam um tempo menor que 0.001s e se o conteúdo for *** indica que houve um estouro da pilha de execução. 7. CONCLUSÃO Os resultados mostraram que a eficiência das técnicas e o tempo e recursos demandados estão intrinsecamente relacionados aos parâmetros de configuração de entrada. Comparando as técnicas de Divisão e Conquista e Programação Dinâmica percebe-se que no caso da instância com maior número de itens houve o estouro de recursos computacionais, sugerindo que a técnica deve ser utilizada de forma controlada. Divide-and-Conquer and Dynamic Programming Technical for solving Optimization Problems Abstract Find the maximum or minimum of a function is a problem widely used in various areas. In general, this is called "optimal value" because it corresponds to the best of all possible within a feasible solution space. In this context it s defined the optimization, which can be restricted when the solution satisfy the conditions imposed by the problem, or unrestricted when any solution within domain of the function is investigated. Among these, the most difficult problems are those in which the solution set is not continuous, characterizing the so-called discrete or combinatorial optimization, defined as follows: Given a set A of elements and we want to find a subset S A such that the objective function applied to elements of S has the optimal value that can be maximum (greatest) or minimum (less of all). As the number of options for selecting S grows exponentially with the size of the set A, exact methods to obtain the "optimal solution" must search in the all space, which becomes impractical. For this there are approximate methods that correspond to heuristics, metaheuristics and approximation algorithms. Among these, there are the techniques of divide and conquer and dynamic programming. In this paper, we show the performance of these two algorithms applied to some known combinatorial optimization problems. Keywords: Divide-and-Conquer, Dynamic Programming, Algorithm, Knapsack Problem.

18 22 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 Referências CAMPELLO, R.E. e MACULAN, N. (1994). Algoritmos e Heurísticas. Desenvolvimento e Avaliação de Performance, Editora da Universidade Federal Fluminense, Niterói-RJ. DASGUPTA, S., PAPADIMITRIOU, C. and VAZIRANI, U. (2008). Algorithms. McGraw-Hill Higher Education. DIAS, B.; MARCATO, A.; SOARES, S.; SILVA, I.; OLIVEIRA, E.; BRANDI, R. e RAMOS, T. (2010). Utilização do Algoritmo de Fechos Convexos na Programação Dinâmica Estocástica: Simpósio Brasileiro de Sistemas Elétricos. FIGUEIREDO, J. Divisão e Conquista. (2011). Notas de Aula da disciplina Analise e Técnicas de Algoritmo. Universidade Federal de Campina Grande. Disponível em: MUNARI Júnior e AUGUSTO, P. (2007). Paradigmas e Técnicas de Projeto de Algoritmos. Notas de Aula. ICMC/USP. RIBEIRO, C. (1999). Programação Dinâmica. Notas de aula da disciplina Algoritmos e Estruturas de Dados II. Licenciatura em Engenharia Informática e Computação. FEUP ROSA, J. (2011) Programação Dinâmica. Paradigmas de Resolução de Problemas. Slides. Universidade de São Paulo - Instituto de Ciência Matemática e Computação. TOSCANI, L.A. e VELOSO, P.A.S. (2002). Complexidade de Algoritmos. Instituto de Informática da UFRGS. Porto Alegre: Sagra Luzzatto. VIANA, G.V.R. e CINTRA, G.F. (2011). Pesquisa e Ordenação de Dados. Fortaleza: Publicação do Sistema UAB/UECE. ZIVIANI, N. (2007). Projeto e Algoritmos com implementações em Pascal e C. São Paulo: Editora Thomson. Francisco Vando Carneiro Moreira Graduado em Ciência da Computação FLF Mestrando Acadêmico em Ciência da Computação MACC/UECE fvando@gmail.com

19 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, Gerardo Valdisio Rodrigues Viana Bacharel em Engenharia Mecânica UFC Licenciado em Matemática UFC Doutor em Ciência da Computação UFC/USP valdisio.viana@uece.br

20 24 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 ANEXOS public List<Mitem> MergeSortDefault(List<Mitem> a) { if (a.count == 1) return a; int middle = a.count/2; List<Mitem> left = new List<Mitem>(middle); for (int i = 0; i < middle; i++) left.add(a[i]); List<Mitem> right = new List<Mitem>(a.Count - middle); for (int i = 0; i < a.count - middle; i++) right.add(a[i + middle]); left = MergeSortDefault(left); right = MergeSortDefault(right); int leftptr = 0; int rightptr = 0; List<Mitem> sorted = new List<Mitem>(a.Count); ListaNew = new List<Mitem>(a.Count); for (int k = 0; k < a.count; k++) { if (rightptr == right.count ((leftptr < left.count) && ((Convert.ToDecimal(left[leftptr].peso)) <= (Convert.ToDecimal(right[rightptr].peso))))) { sorted.add(left[leftptr]); leftptr++; else if (leftptr == left.count ((rightptr < right.count) && (Convert.ToDecimal(right[rightptr].peso)) <= (Convert.ToDecimal(left[leftptr].peso)))) { sorted.add(right[rightptr]); rightptr++; return sorted; A.1 Programa em C# para o Problema da Mochila 0/1 utiliza a Técnica de Divisão e Conquista para a ordenação e um Algoritmo Guloso para selecionar os itens

21 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, public List<ArrayList> Ordem_Multiplicacao_Matriz(string[] p, int num) { int q = 0; int i = 0; int j = 0; int k = 0; int l = 0; int[,] m = new int[sz, sz]; int[,] s = new int[sz, sz]; ArrayList M = new ArrayList(); ArrayList S = new ArrayList(); List<ArrayList> RetornoGeral = new List<ArrayList>(); int n = num; for (i = 1; i <= n; i++) m[i, i] = 0; for (l = 2; l <= n; l++) for (i = 1; i <= (n - l + 1); i++) { j = i + l - 1; m[i, j] = INF; for (k = i; k <= j - 1; k++) { q = m[i, k] + m[k + 1, j] + int.parse(p[i - 1]) * int.parse(p[k]) * int.parse(p[j]); if (q < m[i, j]) { m[i, j] = q; s[i, j] = k; printsolutionparentheses(s, i - 1, j); printm(m, s, n); S.Add(resultadoSolution); M.Add(resultadoMatrizM); RetornoGeral.Add(M); RetornoGeral.Add(S); return RetornoGeral; A.2 Programa em C# para o Problema do Produto de Matrizes utiliza a Técnica de Programação Dinâmica para minimizar o número de multiplicações

22 26 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011 A.3 Tela do programa para o problema do Produto de Matrizes

23 Revista Científica da Faculdade Lourenço Filho - v.8, n.1, public List<ClassDC.Mitem> MochilaProgramacaoDinamica(int C, List<Mitem> obj) { int[,] dp = new int[c + 1, obj.count]; int[,] d = new int[c + 1, obj.count]; int[] D = new int[obj.count]; for (int k = 0; k <= C; k++) if (k < obj[0].peso) { dp[k, 0] = 0; d[k, 0] = 0; else { dp[k, 0] = obj[0].valor; d[k, 0] = 1; for (int i = 1; i < obj.count; i++) { for (int k = 0; k <= C; k++) { if (k < obj[i].peso) { dp[k, i] = dp[k, i - 1]; d[k, i] = 0; else { if (dp[k, i - 1] > (dp[k - obj[i].peso, i - 1] + obj[i].valor)) { dp[k, i] = dp[k, i - 1]; d[k, i] = 0; else { dp[k, i] = dp[k - obj[i].peso, i - 1] + obj[i].valor; d[k, i] = 1; int k1 = C; int ii = obj.count - 1; while (ii >= 0) { D[ii] = d[k1, ii]; k1 -= (obj[ii].peso * D[ii]); ii--; for (int i = 0; i < D.Length; i++) obj[i].x = D[i]; return obj; A.4 Programa em C# para o Problema da Mochila por Programação Dinâmica

ST364 Estruturas de Dados Grupo 4 apresenta: Seminário MERGESORT Blog - http://grupomergesort.blogspot.com

ST364 Estruturas de Dados Grupo 4 apresenta: Seminário MERGESORT Blog - http://grupomergesort.blogspot.com ST364 Estruturas de Dados Grupo 4 apresenta: Seminário MERGESORT Blog - http://grupomergesort.blogspot.com Apresentação do Grupo André Pereira Giacon Dandara Contieri Folis Diego Narciso Hernandes Fernanda

Leia mais

Projeto e Análise de Algoritmos Projeto de Algoritmos Introdução. Prof. Humberto Brandão humberto@dcc.ufmg.br

Projeto e Análise de Algoritmos Projeto de Algoritmos Introdução. Prof. Humberto Brandão humberto@dcc.ufmg.br Projeto e Análise de Algoritmos Projeto de Algoritmos Introdução Prof. Humberto Brandão humberto@dcc.ufmg.br aula disponível no site: http://www.bcc.unifal-mg.edu.br/~humberto/ Universidade Federal de

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes Caminhos de custo mínimo em grafo orientado Este problema consiste em determinar um caminho de custo mínimo a partir de um vértice fonte a cada vértice do grafo. Considere um grafo orientado

Leia mais

Análise de complexidade

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

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 04: Análise de Algoritmos (Parte 1) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes

Leia mais

ALGORITMOS DE ORDENAÇÃO. Algoritmos de comparação-e-troca. Bubble Sort Merge Sort Quick Sort

ALGORITMOS DE ORDENAÇÃO. Algoritmos de comparação-e-troca. Bubble Sort Merge Sort Quick Sort ALGORITMOS DE ORDENAÇÃO ALGORITMOS DE ORDENAÇÃO Algoritmos de comparação-e-troca Bubble Sort Merge Sort Quick Sort 1 BUBBLE SORT Usa a estratégia de comparação-e-troca É constituído por várias fases Cada

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Uma visão de Intratabilidade, Classes P e NP - redução polinomial - NP-completos e NP-difíceis Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com

Leia mais

Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro. Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br

Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro. Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Laboratório de Pesquisa e Desenvolvimento Universidade Federal de Alfenas versão

Leia mais

2 Problema das p-medianas

2 Problema das p-medianas 2 Problema das p-medianas 2.1 Definição O PMNC é definido da seguinte forma: determinar quais p facilidades (p m, onde m é o número de pontos onde podem ser abertas facilidades) devem obrigatoriamente

Leia mais

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T Pointer Jumping T = (V,E) : árvore direcionada odg(v) e idg(v): graus de saída e entrada do vértice v V um vértice r tal que v V-{r}, odg(v) = 1, odg(r)=0 v V-{r}, um caminho de v a r O vértice r é dita

Leia mais

CAP 254 CAP 254. Otimização Combinatória. Professor: Dr. L.A.N. Lorena. Assunto: Metaheurísticas Antonio Augusto Chaves

CAP 254 CAP 254. Otimização Combinatória. Professor: Dr. L.A.N. Lorena. Assunto: Metaheurísticas Antonio Augusto Chaves CAP 254 CAP 254 Otimização Combinatória Professor: Dr. L.A.N. Lorena Assunto: Metaheurísticas Antonio Augusto Chaves Conteúdo C01 Simulated Annealing (20/11/07). C02 Busca Tabu (22/11/07). C03 Colônia

Leia mais

Programação Dinâmica. Programa do PA. Técnicas Avançadas de Projeto. Aulas Anteriores. Introdução. Plano de Aula. Técnicas de Projeto de Algoritmos

Programação Dinâmica. Programa do PA. Técnicas Avançadas de Projeto. Aulas Anteriores. Introdução. Plano de Aula. Técnicas de Projeto de Algoritmos Programação Dinâmica Técnicas de Projeto de Algoritmos Aula 13 Alessandro L. Koerich Pontifícia Universidade Católica do Paraná (PUCPR) Ciência da Computação 7 o Período Engenharia de Computação 5 o Período

Leia mais

Processamento e Otimização de Consultas

Processamento e Otimização de Consultas Introdução Processamento e Banco de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM 1 Processamento

Leia mais

Pesquisa em Memória Primária. Prof. Jonas Potros

Pesquisa em Memória Primária. Prof. Jonas Potros Pesquisa em Memória Primária Prof. Jonas Potros Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação é dividida

Leia mais

Inteligência Computacional Aplicada a Engenharia de Software

Inteligência Computacional Aplicada a Engenharia de Software Inteligência Computacional Aplicada a Engenharia de Software Estudo de caso III Prof. Ricardo de Sousa Britto rbritto@ufpi.edu.br Introdução Em alguns ambientes industriais, pode ser necessário priorizar

Leia mais

Faculdade de Engenharia Optimização. Prof. Doutor Engº Jorge Nhambiu

Faculdade de Engenharia Optimização. Prof. Doutor Engº Jorge Nhambiu 1 Programação Não Linear Aula 25: Programação Não-Linear - Funções de Uma única variável Mínimo; Mínimo Global; Mínimo Local; Optimização Irrestrita; Condições Óptimas; Método da Bissecção; Método de Newton.

Leia mais

Disciplina de Projetos e Análise de Algoritmos. Aula 1 - Apresentação aos Algoritmos Computacionais

Disciplina de Projetos e Análise de Algoritmos. Aula 1 - Apresentação aos Algoritmos Computacionais Aula 1 - Apresentação aos Algoritmos Computacionais O que é a Disciplina? Disciplina de Projeto e Análise de Algoritmos Esta é uma disciplina de Algoritmos em nível de Pós-Graduação! Temas a serem abordados:

Leia mais

Uma Heurística para o Problema de Redução de Padrões de Corte

Uma Heurística para o Problema de Redução de Padrões de Corte Uma Heurística para o Problema de Redução de Padrões de Corte Marcelo Saraiva Limeira INPE/LAC e-mail: marcelo@lac.inpe.br Horacio Hideki Yanasse INPE/LAC e-mail: horacio@lac.inpe.br Resumo Propõe-se um

Leia mais

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1 Projeto e Análise de Algoritmos Profa. Juliana Kaizer Vizzotto Projeto e Análise de Algoritmos - Aula 1 Roteiro Introdução Exemplo: ordenação Introdução Análise de Algoritmos Estudo teórico da performance

Leia mais

Árvores Binárias de Busca

Árvores Binárias de Busca Árvores Binárias de Busca Uma Árvore Binária de Busca T (ABB) ou Árvore Binária de Pesquisa é tal que ou T = 0 e a árvore é dita vazia ou seu nó contém uma chave e: 1. Todas as chaves da sub-árvore esquerda

Leia mais

Técnicas para Programação Inteira e Aplicações em Problemas de Roteamento de Veículos 14

Técnicas para Programação Inteira e Aplicações em Problemas de Roteamento de Veículos 14 1 Introdução O termo "roteamento de veículos" está relacionado a um grande conjunto de problemas de fundamental importância para a área de logística de transportes, em especial no que diz respeito ao uso

Leia mais

Computação Paralela. Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho.

Computação Paralela. Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho. Computação Paralela Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho Outubro 2005 Desenvolvimento de Aplicações Paralelas Uma Metodologia

Leia mais

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005. genda nálise e Técnicas de lgoritmos Jorge Figueiredo onceitos ásicos O Problema das Rainhas Template Genérico Mochila inária acktracking and ranch-and-ound Jogo da Troca de olas Jogo da Troca de olas

Leia mais

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi Apostila de Fundamentos de Programação I Prof: André Luiz Montevecchi Introdução O mundo atual é dependente da tecnologia O uso intenso de diversos aparatos tecnológicos é parte integrante do nosso dia-a-dia

Leia mais

Projetos. Universidade Federal do Espírito Santo - UFES. Mestrado em Informática 2004/1. O Projeto. 1. Introdução. 2.

Projetos. Universidade Federal do Espírito Santo - UFES. Mestrado em Informática 2004/1. O Projeto. 1. Introdução. 2. Pg. 1 Universidade Federal do Espírito Santo - UFES Mestrado em Informática 2004/1 Projetos O Projeto O projeto tem um peso maior na sua nota final pois exigirá de você a utilização de diversas informações

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

APLICAÇÃO DE MÉTODOS HEURÍSTICOS EM PROBLEMA DE ROTEIRIZAÇÃO DE VEICULOS

APLICAÇÃO DE MÉTODOS HEURÍSTICOS EM PROBLEMA DE ROTEIRIZAÇÃO DE VEICULOS APLICAÇÃO DE MÉTODOS HEURÍSTICOS EM PROBLEMA DE ROTEIRIZAÇÃO DE VEICULOS Bianca G. Giordani (UTFPR/MD ) biancaggiordani@hotmail.com Lucas Augusto Bau (UTFPR/MD ) lucas_bau_5@hotmail.com A busca pela minimização

Leia mais

Estrutura de Dados Básica

Estrutura de Dados Básica Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 7: Recursividade O objetivo desta aula é apresentar o conceito de recursão para solução de problemas. A recursão é uma técnica de programação

Leia mais

ESTRUTURAS DE DADOS II

ESTRUTURAS DE DADOS II ESTRUTURAS DE DADOS II Msc. Daniele Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência da Computação UFU Bacharel em Ciência da Computação - UFJF Conteúdo Programático 1. Introdução

Leia mais

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem: 1 UNIVERSIDADE FEDERAL DE VIÇOSA Departamento de Matemática - CCE Cálculo Numérico - MAT 271 Prof.: Valéria Mattos da Rosa As notas de aula que se seguem são uma compilação dos textos relacionados na bibliografia

Leia mais

Algoritmos de Busca em Tabelas

Algoritmos de Busca em Tabelas Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas estão entre os mais usados. Considere por exemplo um sistema de banco de dados. As operações de busca e recuperação dos dados

Leia mais

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação 36 5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS 5.1 - Os Programas de Avaliação Programas de avaliação convencionais foram utilizados para análise de diversas configurações da arquitetura. Estes programas

Leia mais

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2 FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO Projeto e Análise de Algoritmos II Lista de Exercícios 2 Prof. Osvaldo. 1. Desenvolva algoritmos para as operações abaixo e calcule a complexidade

Leia mais

Algoritmos de Pesquisa e Ordenação em Vectores

Algoritmos de Pesquisa e Ordenação em Vectores Algoritmos de Pesquisa e Ordenação em Vectores FEUP - MIEEC Programação 2-2008/2009 Pesquisa Sequencial Problema (pesquisa de valor em vector): Verificar se um valor existe no vector e, no caso de existir,

Leia mais

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática

Leia mais

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO Geração de código Ivan Ricarte 2008 Sumário Geração de código intermediário Código de três endereços Notação pós-fixa Otimização de código Heurísticas de otimização Geração de código em linguagem simbólica

Leia mais

Conceitos Importantes:

Conceitos Importantes: Conceitos Importantes: Variáveis: Por Flávia Pereira de Carvalho, 2007 i O bom entendimento do conceito de variável é fundamental para elaboração de algoritmos, consequentemente de programas. Uma variável

Leia mais

Divisão e Conquista. Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com. BCC402 Aula 08 Algoritmos e Programação Avançada

Divisão e Conquista. Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com. BCC402 Aula 08 Algoritmos e Programação Avançada Divisão e Conquista Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com BCC402 Aula 08 Algoritmos e Programação Avançada Motivação É preciso revolver um problema com uma entrada

Leia mais

Aula 03 Custos de um algoritmo e funções de complexidade

Aula 03 Custos de um algoritmo e funções de complexidade BC1424 Algoritmos e Estruturas de Dados I Aula 03 Custos de um algoritmo e funções de complexidade Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 1Q-2015 1 Custo de um algoritmo e funções de complexidade

Leia mais

Árvores Binárias de Busca

Árvores Binárias de Busca Árvores Binárias de Busca Definição Uma Árvore Binária de Busca possui as mesmas propriedades de uma AB, acrescida da seguinte propriedade: Para todo nó da árvore, se seu valor é X, então: Os nós pertencentes

Leia mais

Análise e Projeto de Algoritmos

Análise e Projeto de Algoritmos Análise e Projeto de Algoritmos Prof. Eduardo Barrére www.ufjf.br/pgcc www.dcc.ufjf.br eduardo.barrere@ice.ufjf.br www.barrere.ufjf.br Complexidade de Algoritmos Computabilidade: Um problema é computável

Leia mais

IFTO LÓGICA DE PROGRAMAÇÃO AULA 02

IFTO LÓGICA DE PROGRAMAÇÃO AULA 02 IFTO LÓGICA DE PROGRAMAÇÃO AULA 02 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia Elétrica / UnB http://lab.ifto.edu.br/~mcampos http://manoelcampos.com

Leia mais

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem: 1 As notas de aula que se seguem são uma compilação dos textos relacionados na bibliografia e não têm a intenção de substituir o livro-texto, nem qualquer outra bibliografia. Introdução O Cálculo Numérico

Leia mais

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária 5COP096 Teoria da Computação Aula 8 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr barbon@uel.br 1 Sumário 1) Introdução à Pesquisa em Memória Primária 2) Pesquisa Sequencial 3) Pesquisa Binária 4) Árvore

Leia mais

Arquitetura de Computadores. Sistemas Operacionais IV

Arquitetura de Computadores. Sistemas Operacionais IV Arquitetura de Computadores Sistemas Operacionais IV Introdução Multiprogramação implica em manter-se vários processos na memória. Memória necessita ser alocada de forma eficiente para permitir o máximo

Leia mais

28/9/2010. Paralelismo no nível de instruções Processadores superescalares

28/9/2010. Paralelismo no nível de instruções Processadores superescalares Arquitetura de Computadores Paralelismo no nível de instruções Processadores superescalares Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Processadores superescalares A partir dos resultados

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

Métodos de Pesquisa em Memória Primária

Métodos de Pesquisa em Memória Primária Algoritmos e Estrutura de Dados II Métodos de Pesquisa em Memória Primária Prof Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Pesquisa Por pesquisa (procura ou busca) entende-se o ato

Leia mais

Limitações dos Computadores

Limitações dos Computadores Limitações dos Computadores Baseado em Computers Ltd. What they really can t do, David Harel. Oxford University Press, 2000. Computadores e Redes de Comunicação Mestrado em Gestão de Informação, FEUP 2004/07

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

Geração de código intermediário. Novembro 2006

Geração de código intermediário. Novembro 2006 Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas

Leia mais

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II Pesquisa em Memória Primária Algoritmos e Estruturas de Dados II Pesquisa em Memória Primária Pesquisa: Recuperação de informação em um grande volume de dados Informação é dividida em registros e cada

Leia mais

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo 1 FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2 Vieira Lima Junior Everson Santos Araujo ALGORITMOS DE ORDENAÇÃO: estudo comparativo de diversos algoritmos

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 (array). Se o vetor não está ordenado, a pesquisa requer O(n) de

Leia mais

CI165 Introdução. André Vignatti. 31 de julho de 2014

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.

Leia mais

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis. 3. Tabelas de Hash As tabelas de hash são um tipo de estruturação para o armazenamento de informação, de uma forma extremamente simples, fácil de se implementar e intuitiva de se organizar grandes quantidades

Leia mais

Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II

Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II Professores: Liana Duenha 10 de março de 2014 Professores: Liana Duenha () Universidade

Leia mais

QUADRADO MÁGICO - ORDEM 4

QUADRADO MÁGICO - ORDEM 4 CONCEITO Partindo da definição original, os QUADRADOS MÁGICOS devem satisfazer três condições: a) tabela ou matriz quadrada (número de igual ao número de ); b) domínio: com elementos assumindo valores

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

Manejo Florestal Sustentável: Dificuldade Computacional e Otimização de Processos

Manejo Florestal Sustentável: Dificuldade Computacional e Otimização de Processos Manejo Florestal Sustentável: Dificuldade Computacional e Otimização de Processos Daniella Rodrigues Bezerra 1, Rosiane de Freitas Rodrigues 12, Ulisses Silva da Cunha 3, Raimundo da Silva Barreto 12 Universidade

Leia mais

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Estruturas de Dados Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Árvores Conceitos Árvores binárias Árvores binárias de pesquisa Árvores binárias balanceadas Árvores ESTRUTURAS

Leia mais

Busca. Pesquisa sequencial

Busca. Pesquisa sequencial Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes Idéias básicas Um algoritmo guloso seleciona, a cada passo, o melhor elemento pertencente a entrada. Verifica se ele é viável - vindo a fazer parte da solução ou não. Após uma seqüência de

Leia mais

Cálculo Aproximado do número PI utilizando Programação Paralela

Cálculo Aproximado do número PI utilizando Programação Paralela Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Cálculo Aproximado do número PI utilizando Programação Paralela Grupo 17 Raphael Ferras Renan Pagaiane Yule Vaz SSC-0143 Programação

Leia mais

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha

Leia mais

Pedro Ribeiro 2014/2015

Pedro Ribeiro 2014/2015 Programação Dinâmica Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Programação Dinâmica 2014/2015 1 / 56 Números de Fibonacci Sequência de números muito famosa definida por Leonardo Fibonacci

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

SISTEMAS DE NUMERAÇÃO

SISTEMAS DE NUMERAÇÃO Universidade do Contestado Campus Concórdia Curso de Sistemas de Informação Prof.: Maico Petry SISTEMAS DE NUMERAÇÃO DISCIPLINA: Fundamentos em Informática SISTEMAS DE NUMERAÇÃO E REPRESENTAÇÃO DE DADOS

Leia mais

Estruturas de Dados Pilhas, Filas e Deques

Estruturas de Dados Pilhas, Filas e Deques Estruturas de Dados Pilhas, Filas e Deques Prof. Eduardo Alchieri Estruturas de Dados Pilhas Pilhas Lista LIFO (Last In, First Out) Os elementos são colocados na estrutura (pilha) e retirados em ordem

Leia mais

Deadlocks. Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Deadlocks. Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Dispositivos e recursos são compartilhados a todo momento: impressora, disco, arquivos,

Leia mais

Cadeias de Markov. Geovany A. Borges gaborges@ene.unb.br

Cadeias de Markov. Geovany A. Borges gaborges@ene.unb.br 36341 - Introdução aos Processos Estocásticos Curso de Pós-Graduação em Engenharia Elétrica Departamento de Engenharia Elétrica Universidade de Brasília Cadeias de Markov Geovany A. Borges gaborges@ene.unb.br

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes 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 na prática. Na maioria das vezes, a escolha

Leia mais

Pesquisa Sequencial e Binária

Pesquisa Sequencial e Binária Pesquisa Sequencial e Binária Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 20 Algoritmos e Estruturas de Dados I Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial

Leia mais

Problema de Otimização Combinatória

Problema de Otimização Combinatória Problema de Otimização Combinatória Otimização é o processo de encontrar e comparar soluções factíveis até que nenhuma solução melhor possa ser encontrada. Essas soluções são ditas boas ou ruins em termos

Leia mais

Sobre o Professor Dr. Sylvio Barbon Junior

Sobre o Professor Dr. Sylvio Barbon Junior 5COP096 Teoria da Computação Aula 1 Apresentação da Disciplina e Revisão de Conceitos Prof. Dr. Sylvio Barbon Junior 1 Sobre o Professor Dr. Sylvio Barbon Junior 5COP096 Teoria da Computação Formação:

Leia mais

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados)

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados) 1 UNIVERSIDADE DO CONTESTADO / UnC CAMPUS CONCÓRDIA/SC CURSO DE SISTEMAS DE INFORMAÇÃO Fundamentos em Informática (Sistemas de Numeração e Representação de Dados) (Apostila da disciplina elaborada pelo

Leia mais

Algoritmos e Estrutura de Dados III. Árvores

Algoritmos e Estrutura de Dados III. Árvores Algoritmos e Estrutura de Dados III Árvores Uma das mais importantes classes de estruturas de dados em computação são as árvores. Aproveitando-se de sua organização hierárquica, muitas aplicações são realizadas

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

IA Colônia de Formigas. Prof. Ricardo Britto DIE-UFPI rbritto@ufpi.edu.br

IA Colônia de Formigas. Prof. Ricardo Britto DIE-UFPI rbritto@ufpi.edu.br IA Colônia de Formigas Prof. Ricardo Britto DIE-UFPI rbritto@ufpi.edu.br Sumário Introdução O Experimento da Ponte Binária. Ant System Aplicado ao PCV. Elitist Ant System. Introdução Otimização colônia

Leia mais

A Otimização Colônia de Formigas

A Otimização Colônia de Formigas A Otimização Colônia de Formigas Estéfane G. M. de Lacerda Departamento de Engenharia da Computação e Automação UFRN 22/04/2008 Índice A Inspiração Biológica O Ant System Aplicado ao PCV O Ant System Aplicado

Leia mais

Hashing Letícia Rodrigues Bueno

Hashing Letícia Rodrigues Bueno Hashing Letícia Rodrigues Bueno UFABC hash: Hashing (Tabelas de Dispersão): Introdução hash: Hashing (Tabelas de Dispersão): Introdução Hashing (Tabelas de Dispersão): Introdução hash: 1. fazer picadinho

Leia mais

ALGORITMOS. Supervisão: Prof. Dr.º Denivaldo Lopes

ALGORITMOS. Supervisão: Prof. Dr.º Denivaldo Lopes Laboratory of Software Engineering and Computer Network Engineering for a better life Universidade Federal do Maranhão Curso de Engenharia Elétrica ALGORITMOS Supervisão: Prof. Dr.º Denivaldo Lopes Adelman

Leia mais

Prof. Daniela Barreiro Claro

Prof. Daniela Barreiro Claro Prof. Daniela Barreiro Claro SQL, SQL3 e OQL são linguagens declarativas O SGBD deve processar e otimizar estas consultas antes delas serem efetivamente executadas Uma consulta possui muitas estratégias

Leia mais

Departamento de Matemática - UEL - 2010. Ulysses Sodré. http://www.mat.uel.br/matessencial/ Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Departamento de Matemática - UEL - 2010. Ulysses Sodré. http://www.mat.uel.br/matessencial/ Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010. Matemática Essencial Extremos de funções reais Departamento de Matemática - UEL - 2010 Conteúdo Ulysses Sodré http://www.mat.uel.br/matessencial/ Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Leia mais

OPERADORES E ESTRUTURAS DE CONTROLE

OPERADORES E ESTRUTURAS DE CONTROLE OPERADORES E ESTRUTURAS DE CONTROLE 3.1 Operadores Os operadores indicam o tipo de operação matemática que será executada gerando novos valores a partir de um ou mais operadores. São muito utilizados em

Leia mais

Web site. Objetivos gerais. Introdução. http://www.inf.ufes.br/~pdcosta/ensino/2009-1-estruturas-de-dados. Profa. Patrícia Dockhorn Costa

Web site. Objetivos gerais. Introdução. http://www.inf.ufes.br/~pdcosta/ensino/2009-1-estruturas-de-dados. Profa. Patrícia Dockhorn Costa Web site http://www.inf.ufes.br/~pdcosta/ensino/2009-1-estruturas-de-dados Estruturas de Dados Aula 1: Introdução e conceitos básicos Profa. Patrícia Dockhorn Costa Email: pdcosta@inf.ufes.br 01/03/2010

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

5COP096 TeoriadaComputação

5COP096 TeoriadaComputação Sylvio 1 Barbon Jr barbon@uel.br 5COP096 TeoriadaComputação Aula 14 Prof. Dr. Sylvio Barbon Junior Sumário - Problemas Exponenciais - Algoritmos Exponenciais usando Tentativa e Erro - Heurísticas para

Leia mais

Temas para estudo com alunos

Temas para estudo com alunos Temas para estudo com alunos Este documento reúne alguns dos temas de pesquisa desenvolvidos por professores do Departamento de Matemática Aplicada (DMA) e que podem ter alunos de graduação atuando. Tratam-se

Leia mais

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária 1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste

Leia mais

Prof. Antonio Torres antonioctorres@gmail.com @_antonioctorres. Fundamentos de Sistemas Operacionais UNIP/2015

Prof. Antonio Torres antonioctorres@gmail.com @_antonioctorres. Fundamentos de Sistemas Operacionais UNIP/2015 Prof. Antonio Torres antonioctorres@gmail.com @_antonioctorres Fundamentos de Sistemas Operacionais UNIP/2015 Disciplinas FUNDAMENTOS DE SISTEMAS OPERACIONAIS Horários Quarta-feira Fundamentos de Sistemas

Leia mais

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES ALGORITMOS DE BUSCA EM LISTAS COM ALOCAÇÃO SEQÜENCIAL Busca em Listas Lineares A operação de busca é

Leia mais

Faculdade Alagoana de Administração FAA Ciência da Computação. (Resolução de Problemas em) Espaço de Estados

Faculdade Alagoana de Administração FAA Ciência da Computação. (Resolução de Problemas em) Espaço de Estados Faculdade Alagoana de Administração FAA Ciência da Computação (Resolução de Problemas em) Espaço de Estados (Adaptado de O.B. Coelho & G. Bittencourt & C. Moraes) Maria Aparecida Amorim Sibaldo maasibaldo@gmail.com

Leia mais

INVESTIGAÇÃO OPERACIONAL EM AÇÃO

INVESTIGAÇÃO OPERACIONAL EM AÇÃO INVESTIGAÇÃO OPERACIONAL EM AÇÃO CASOS DE APLICAÇÃO RUI CARVALHO OLIVEIRA JOSÉ SOEIRO FERREIRA (EDITORES) IMPRENSA DA UNIVERSIDADE DE COIMBRA COIMBRA UNIVERSITY PRESS CASO 7 SISTEMA DE APOIO À DECISÃO

Leia mais

Instalações Máquinas Equipamentos Pessoal de produção

Instalações Máquinas Equipamentos Pessoal de produção Fascículo 6 Arranjo físico e fluxo O arranjo físico (em inglês layout) de uma operação produtiva preocupa-se com o posicionamento dos recursos de transformação. Isto é, definir onde colocar: Instalações

Leia mais