Algoritmos de Ordenação

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

Download "Algoritmos de Ordenação"

Transcrição

1 CENTRO DE CIÊNCIAS EXATAS DEPARTAMENTO DE COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Algoritmos de Ordenação Alunos: André Ricardo Gonçalves Luiz Gustavo Andrade dos Santos Paulo Roberto Silla Profa. Linnyer Beatrys Ruiz LONDRINA - PR 2007

2 André Ricardo Gonçalves Luiz Gustavo Andrade dos Santos Paulo Roberto Silla Algoritmos de Ordenação Trabalho apresentado à Universidade Estadual de Londrina, como parte de requisito de avaliação do 3 o Bimestre da disciplina de Teoria da Computação, do curso de Ciência da Computação sob orientação da Profa. Linnyer Beatrys Ruiz. LONDRINA - PR 2007

3 Sumário 1 Introdução 4 2 Algoritmos de Ordenação Bubble Sort Insertion Sort Selection Sort Merge Sort Quick Sort Heap Sort Count Sort Bucket Sort Radix Sort Conclusão 16 Apêndice 17 Referências Bibliográficas 23 3

4 Capítulo 1 Introdução Métodos ordenação de elementos sempre foi uma área atrativa para os pesquisadores da Ciência da Computação. Em busca de métodos eficientes para resolver tal problema, pesquisadores analisavam algumas situações do dia-a-dia, como a maneira que os jogadores de cartas ordenavam as cartas que continha, para facilitá-lo durante o jogo. Decorrente disto vários algoritmos de ordenação foram apresentados, como o Bubble Sort, Selection Sort, Quick Sort, dentre outros. Este trabalho tem por objetivo apresentar de forma objetiva as principais características de alguns métodos de ordenação, suas vantagens e desvantagens, suas restrições e o tempo computacional de cada um deles. 4

5 Capítulo 2 Algoritmos de Ordenação Os algoritmos de ordenação são algoritmos que colocam os elementos de uma lista em uma determinada ordem, ou seja dada uma vetor de elementos de entrada n 1, n 2, n 3,..., n k, o algoritmo será aplicado a este vetor de forma que a saída seja da forma n 1 n 2 n 3,..., n k. Existem vários algoritmos destinados a este fim, a maioria deles baseado na idéia de Inserção, Seleção e Permutação. A eficiência dos algoritmos de ordenação é analisada segundo alguns critérios, como a complexidade computacional, quantidade de memória utilizada, quanto ao uso de recursão, estabilidade do algoritmo e outros. Esses critérios por sua vez são analisados pelo número de movimentos e o número de comparação efetuadas durante a execução do algoritmo [Wir86]. Quanto aos critérios apresentados, segue a definição de alguns deles abaixo: Complexidade Computacional Está relacionado com o comportamento do algoritmo no melhor, médio e pior caso, que é definido pelo número de comparações efetuadas pelo algoritmo em relação ao tamanho do vetor de entrada. A complexidade é comumente apresentada como uma função assintótica em relação a n, que é igual ao número de elementos do vetor de entrada. Estabilidade A estabilidade é definida pela não realização de trocas inúteis, como a troca de elementos iguais. Um algoritmo é dito ser estável se o mesmo não efetua trocas inúteis. A seguir são apresentados alguns dos principais algoritmos de ordenação, como uma breve explicação de seu funcionamento e algumas características específicas como a análise computacional deste algoritmo. 5

6 2.1 Bubble Sort É um dos mais simples dos algoritmos de ordenação, entretanto é o menos eficiente. Considere um vetor disposto na vertical. Este método bolha faz com que um elemento mais leve (menor) situado ao final do vetor ( fundo ) flutue até o início deste. Para isso, são feitas comparações e trocas para cada par de elementos consecutivos. Ou seja, é um método de permutação direta que consiste em comparar um elemento com todos os elementos subseqüentes no vetor, verificando se o elemento é maior que o elemento analisado, se for, faz a troca dos elementos. Este processo é realizado até o último elemento do vetor. Complexidade de tempo: Melhor caso: n2 2 Vetor ordenado ou quase ordenado. Pior caso: 2n 2 Vetor na ordem inversa. Médio caso: 5n2 2 Assintoticamente: Todos os casos com complexidade O(n 2 ) Este método é um dos mais demorados que existe, por ser de ordem quadrática até mesmo em seu melhor caso e também devido à grande quantidade de trocas realizadas, mas ele pode sofrer algumas melhorias: Verificar se o vetor já está ordenado, antes de chegar ao último elemento a ser analisado no vetor (se já estiver ordenado, não há necessidade de mais comparações). Neste caso, o algoritmo pode ter uma melhor performance do que a quadrática, mas sem garantia para a maioria dos casos; Armazenar a posição na qual o vetor não sofreu nenhuma troca, para que na próxima verificação, o algoritmo reinicie o ciclo a partir dessa marcação, não necessitando chegar até essa posição passando pelos antecessores; Alternar a direção dos sucessivos passos de ordenação: Shake Sort, um Bubble Sort que age tanto da esquerda para a direita quanto da direita para a esquerda alternadamente (bidirecional). O Shake Sort também pode utilizar armazenamento de posições para os dois sentidos ou verificação de inalteração de posições. Mesmo com tais melhorias o Bubble Sort é ainda pior do que os outros algoritmos de permutação. O Shake Sort é utilizado quando já se sabe a priori se o vetor está quase em ordem, porém este caso é muito raro na prática. 6

7 2.2 Insertion Sort Consiste em um algoritmo simples, baseado na ordenação pela comparação durante a inserção. Seu funcionamento obedece a definição a seguir: Definição 2.1 Sejam V e V vetores. Inicialmente o número de elementos de V é n, enquanto V está vazio. A cada iteração, um elemento de V (entrada) será retirado, da esquerda para a direita e inserido em V (saída) na posição correta de acordo com a ordenação desejada, resultando em V o vetor ordenado. Exemplo 2.1 Estado inicial: V = {3,7,4,8,1} V = Estado após a retirada do elemento 3 de V e, inserção do mesmo em V : V = {7,4,8,1} V = {3} Estado após a retirada do elemento 7 de V e, inserção do mesmo em V : V = {4,8,1} V = {3,7} Estado após a retirada do elemento 4 de V e, inserção do mesmo em V : V = {8,1} V = {3,4,7} Estado após a retirada do elemento 8 de V e, inserção do mesmo em V : V = {1} V = {3,4,7,8} Estado após a retirada do elemento 1 de V e, inserção do mesmo em V : V = V = {1,3,4,7,8} Observe que a cada estado, V está sempre ordenado. A seguir, descrevemos as características do Insertion Sort Implementação O algoritmo possui simplicidade de implementação; Eficiência É eficiente para pequenos conjuntos de dados e também para conjuntos onde os dados encontram-se parcialmente ordenados; Melhor caso Um vetor já ordenado, onde é executado em tempo O(n), em que n é o tamanho da entrada; 7

8 Pior caso Um vetor no qual seus elementos estão em ordem inversa, sendo executado em tempo O(n 2 ), em que n é o tamanho da entrada. Tempo médio O Insertion Sort é, em média, executado em tempo O(n 2 ), com n representando o tamanho da entrada. 2.3 Selection Sort O Selection Sort é baseado no seguinte princípio: 1. Escolha o elemento de menor valor; 2. Troque os elementos do ponteiro corrente, a k, pelo elemento encontrado no passo anterior; 3. Incremente o ponteiro atual, a k+1 e repita as operações anteriores agora com a apenas os n 1 elementos restantes, depois os n 2, até restar somente um elemento, o maior deles. Neste algoritmo o número de comparação das chaves é independente da ordem inicial do vetor, assim o número de comparações é definido por: C = (n2 n) (2.1) 2 Já o número de movimentações é mínimo se o vetor já está ordenado como mostra a equação 2.2, e o número máximo de movimentações é realizado se o vetor está ordenado na ordem inversa, como mostra a equação 2.3 [Wir86]. M min = 3 (n 1) (2.2) M max = n2 + 3 (n 1) (2.3) 4 Com isso podemos concluir que os algoritmo Selection Sort é mais indicado do que o algoritmo Insertion Sort, exceto nos seguintes casos: as chaves estão inicialmente ordenadas; as chaves estão inicialmente quase ordenadas. 8

9 2.4 Merge Sort O Merge Sort aplica a técnica de divisão e conquista para a ordenação [Goo04]. Baseia-se na junção de duas seqüências ordenadas resultando em uma única, também ordenada. A técnica da divisão e conquista para ordenar uma seqüência S de n elementos é dividida em três etapas, segundo [Goo04]: 1. Divisão: retornar S caso ela possua um ou zero elemento. Caso contrário, remover todos os elementos de S, inserindo a primeira metade ( n/2 ) em S 1 e a segunda metade ( n/2 ) em S 2 ; 2. Recursão: ordenar S 1 e S 2 de modo recursivo; 3. Conquista: devolver os elementos para S, realizando um merge entre S 1 e S 2 de maneira a manter a seqüência S ordenada. Abaixo notamos a figura 2.1 que mostra a execução do algoritmo Merge Sort: Figura 2.1: Exemplo da execução do algotirmo Merge Sort. Detalhando um pouco mais a divisão nota-se que enquanto o número de elementos da seqüência for maior que um, devem ser criadas duas novas seqüências, cada uma com metade dos elementos da seqüência anterior e o algoritmo de divisão deve ser chamado recursivamente para essas duas novas seqüeências. Já o processo de junção deve ser realizado da seguinte maneira: remover, iterativamente, o menor elemento entre S 1 e S 2 e inserí-lo na posição final de S. Quando uma das 9

10 seqüências estiver vazia, todo o restante da outra deverá ser movido para o final de S. [Goo04] propõe um algoritmo, para esta finalidade, que pode ser encontrado no apêndice, com o nome de junção. Podemos destacar algumas características do Merge Sort: Eficiência É uma boa escolha quando a entrada não cabe totalmente na memória principal, tendo de ser armazenada em dispositivos mais lentos, como um disco rígido, pois aproveita melhor os dados trazidos em bloco do disco; Tempo de execução Não depende do estado inicial da seqüência de entrada. Logo, tanto no melhor quanto no pior e, conseqüentemente no caso médio, o Merge Sort executa em O(log 2 n), com n igual ao número de elementos da entrada. 2.5 Quick Sort O Quick Sort é um método de ordenação por particionamento e é o mais eficiente que se conhece considerando casos gerais, ou seja, não-específicos, mas é não-estável. Ele tem como base os algoritmos de ordenação por permutações, como o BubbleSort. Porém sua estratégia baseia-se na solução de problemas conhecida como dividir para conquistar, na qual consiste em escolher um pivô, um elemento qualquer do vetor para ser o elemento que dividirá o vetor em dois segmentos (sub-vetores), sendo estes os problemas menores da estratégia. Esta divisão é lógica, e não física, como acontece com o MergeSort. Após esta divisão, efetua-se um processo de separação dos demais elementos, tendo como parâmetro de separação o valor do elemento escolhido como pivô. Primeiramente, o vetor é varrido da esquerda para a direita, até que se encontre um elemento a > pivô; e também da direita para a esquerda a fim de encontrar um elemento b < pivô. Assim, achado os dois elementos a e b, faz-se a troca deles. Este processo será realizado mais vezes, a partir de b e a, caso haja necessidade, até que todos os elementos à esquerda do pivô sejam menores ou iguais a ele; e da mesma forma, todos os elementos à sua direita sejam maiores ou iguais. Após esta etapa, o elemento escolhido como pivô estará na sua posição correta em relação à ordenação do vetor. No caso de não se conseguir escolher algum elemento em um dos segmentos, a troca é feita com o próprio pivô. Após esta partição do vetor, realiza-se o processo de recursão para os segmentos. Estes segmentos serão considerados como sendo vetores originais, assim também serão particionados, gerando seus segmentos, de tamanho cada vez menor. Assim, o processo de particionamento se repete até que se obtenha vetores contendo apenas uma posição, e com isso, todos os pivôs serão atingidos e como estes estão em suas devidas posições, se 10

11 obtém a ordenação global. O Quick Sort apresenta diferentes tempos de ordenação para os casos médio, mínimo e máximo, pois dependem da escolha do pivô. Se o pivô for o elemento médio e mediano (separando a mesma quantidade de elementos maiores e menores do que ele em cada lado) em toda chamada da recursão, o tempo é mínimo, ou seja, O(n log(n)). Caso o pivô seja o elemento maior ou menor em cada recursão, o tempo é máximo, ou seja, O(n 2 ). O tempo médio se obtém quando pega o pivô aleatoriamente ou o elemento médio. Isto é necessário pois, quando o vetor já estiver ordenado, ao tomar o pivô como sendo o primeiro elemento, cairá no pior caso do algoritmo. Então é recomendado escolher o pivô aleatoriamente ou o elemento médio. Caraterísticas: Ordena vetores ordenados e inversamente ordenados com velocidade praticamente igual. Caso médio (pivô aleatório) é inferior ao caso ótimo diferindo apenas por um fator logarítmico de 2 ln(2). Assim, o caso médio possui complexidade de tempo de ordenação assintoticamente igual ao seu melhor caso. Preferência por vetores maiores e bastante desordenados. Se escolhendo no vetor o pivô como o elemento central, o caso ótimo do Quick Sort é o vetor inicialmente ordenado. Considerando caso médio, o Quick Sort é de 2 a 3 vezes mais rápido do que o Heap Sort (não-assintótico). 2.6 Heap Sort O Heap Sort também conhecido como método de ordenação por árvores é baseado no método de seleção direta. Este algoritmo utiliza um estrutura de dados chamada de heap, que consiste em uma árvore cuja raiz é o elemento de menor valor, caso seja um heap de mínimo, ou o de maior valor, caso seja um heap de máximo. O Heap é uma estrutura de dados em forma de uma árvore, cuja raiz é o elemento mínimo ou máximo, dependendo do tipo do heap. Para efetuar a construção do heap a partir do vetor de entrada, o tempo gasto é O(n logn), em uma análise mais complexa este tempo pode ser dado como O(n) [Wir86]. A figura 2.2 apresenta um exemplo de um heap. Com heap construído o HeapSort apenas cria o heap a partir do vetor de entrada, e o algoritmo apenas vai removendo do heap e colocando no vetor de saída. 11

12 Figura 2.2: Exemplo de um Heap de Máximo Segundo [Wir86] o Heap Sort tem uma complexidade computacional na ordem de O(n logn), mesmo no pior caso, este valor é calculado da seguinte maneira: para a construção do heap é necessário O(n), e mais O(logn) para extrair os elementos do heap. E o número médio de movimentos é de aproximadamente n/2 log(n). O Heap Sort tem vantagem sobre o Merge Sort, pois não necessita de memória auxiliar, mas uma boa implementação do Quick Sort é em geral mais rápido [Miy99]. Algumas características do Heap Sort são descritas abaixo: O Heap Sort não é recomendado para vetores de entrada com poucos elementos, devido a complexidade do heap; Quanto maior o vetor de entrada, mais eficiente este algoritmo é; Mesmo no pior caso, o Heap Sort é O(n logn), este excelente desempenho no pior caso é uma das principais vantagens do Heap Sort; O Heap Sort é mais eficiente com vetores de entrada, cujos elementos estão parcialmente ordenados na ordem inversa, dando uma característica não-natural ao algoritmo; Se o vetor de entrada estiver na ordem inversa, o processo de construção do heap leva zero movimentos para ser realizado. 2.7 Count Sort Também conhecido como Counting Sort, é um método de ordenação linear, isto é, tem complexidade O(n). Ele não se baseia em comparações, e sim em indexação. Para isso, 12

13 os valores a serem ordenados devem ser inteiros, pois estes serão usados como chaves no vetor auxiliar por ele requisitado (repare que ele precisa de memória extra para trabalho, porém não é recursivo). Assim, este algoritmo não funciona com entradas em ponto flutuante, pois se usasse uma lista encadeada, seu desempenho possivelmente não seria satisfatório, devido ao percurso na lista para cada busca. Ele necessita ainda que se saiba a priori o valor do maior elemento k da entrada para criar o vetor auxiliar de contagem dos elementos da entrada, cujos valores devem variar desde 0 até k. Importante observar que O(k) deve ser linear para que o algoritmo também o seja, o que acontece na prática. O algoritmo é formado por quatro laços de repetição que varrem ou o vetor original ou o de trabalho. Primeiramente ele cria o vetor de trabalho e atribui zero a todas posições, consumindo O(k). Depois varre o vetor original e incrementa as quantidades dos elementos da entrada no vetor de trabalho utilizando a indexação. Assim, o tempo gasto é de apenas O(n) pois a indexação consome tempo O(1). Agora ele percorre o vetor de trabalho a fim de obter a quantidade de elementos menores ou iguais ao valor de cada posição. Para isso, ele faz a soma do valor de uma posição com a anterior, começando pela segunda e indo até a última. Este laço leva O(k). Por último, cursa o vetor de entrada ao contrário, para assim garantir estabilidade. Essa propriedade é importante quando se trabalha com outros dados junto ao elemento que sofrerá ordenação, mas para isso será necessário outro vetor auxiliar, o vetor de saída. Este vetor, logicamente terá o mesmo tamanho da entrada, e será preenchido da seguinte forma: o elemento de entrada será colocado na posição de saída indicada pelo seu próprio valor no vetor de trabalho. Logo em seguida, decrementase o valor da contagem do vetor de trabalho na posição utilizada, para que, quando ocorra repetição de elementos na entrada, estes não ocupem o mesmo lugar no vetor de saída. Esta etapa também é O(n), e no total temos O(k)+O(n)+O(k)+O(n) = O(n), adotando que O(k) é linear. Finalmente, não é recomendado usar este algoritmo quando se tem um valor muito grande de k, pois precisaria de muita memória e em muitos casos sem necessidade. Por outro lado, é bom utilizá-lo quando a comparação dos elementos representar um problema, pois este método usa operações aritméticas e atribuições para fazer a ordenação ao invés de comparações. 2.8 Bucket Sort Algoritmo baseado na idéia do uso de chaves como índices em um arranjo B de Buckets. Tal arranjo, possui entradas no intervalo de 0 a [N 1], onde N representa a quantidade de chaves. Cada posição de B é uma lista de itens. Por exemplo, o elemento f será armazenado em B[f]. 13

14 O Bucket Sort funciona da seguinte maneira: seja S a seqüência que deseja-se ordenar. Cada elemento de S é inserido em seu Bucket. Em seguida, ordena-se os Buckets e o conteúdo é devolvido em S. Para garantir a estabilidade desse algoritmo, deve-se, segundo [Goo04] remover sempre o primeiro elemento da seqüência S e das seqüências B[i]. O Bucket Sort possui tempo de execução O(n + N) onde n representa a quantidade de elementos na sequüência S. Apresenta bom desempenho quando N é pequeno se comparado com n. No melhor caso, espera-se que cada elemento de S seja armazenado em um Bucket diferente e, em contrapartida, em seu pior caso, todos os elementos da seqüência são armazenados no mesmo Bucket. 2.9 Radix Sort O Radix Sort é um algoritmo baseado no conceito de ordenação por contagem, que consiste em criar uma tabela de N entradas, onde N é o número de elementos diferentes que pode ser inseridos no vetor de entrada. E nesta tabela são inseridos contadores, incrementadoos se os mesmos forem correspondentes a chave de valor i, após realizado este processo, é conhecido a quantidade de posições necessárias para cada valor de chave, assim os elementos são transferidos para as posições corretas no novo vetor ordenado[ric03]. O Radix Sort utiliza o conceito de ordenação por contagem, porém ele realiza a contagem com apenas uma parte da representação do elemento, a qual é denominada raiz. O processo de contagem é realizado com esta parte várias vezes até que a representação total do elemento seja analisada. Duas classificações podem ser realizadas com o radix sort, LSD (Least Significant Bits) e MSD (Most Significant Bits), que define a ordem que serão analisados as partes do elemento, se LSD o processo é iniciado com os bits menos significativos e se MSD com os bits mais significativos. Com esta especificação do radix sort apresentada acima é possível perceber que este algoritmo pode ser aplicado a ordenação de strings como um vetor de entrada [bg, bd, a, fk, fj, e] sendo ordenado como [a, bd, bg, e, fj, fk]. Este algoritmo é muito utilizado para ordenação lexicográfica. Para ordenação de números inteiros o radix sort pode trabalhar uma maneira simples, como a parte do elemento sendo um dígito do elemento, assim a ordenação pode ser feita ordenando os dígitos menos signficativos para os mais significativos. Como é mostrado no exemplo 2.2: Exemplo 2.2 Dado o vetor de entrada [36, 0, 9, 25, 1, 49, 64, 16, 81, 4], realizando a or- 14

15 denação pelo dígito menos significativo, temos algo como mostrado na figura 2.3 Figura 2.3: Vetor ordenado pelo dígito menos significativo Após isto, realiza-se a ordenação dos próximos dígitos, como neste caso os valores são no máximo de dois dígitos, então na ordenação do próximo dígito o vetor já estará ordenado, como é mostrado na figura 2.4. Figura 2.4: Vetor ordenado Uma desvantagem do Radix Sort é a necessidade de um espaço de memória auxiliar de tamanho N, que é o tamanho do alfabeto dos elementos de entrada. Se a quantidade de memória for limitada este é uma desvantagem significante deste algoritmo. A complexidade computacional é da ordem de (i N), onde i é o tamanho do vetor de entrada, sendo então de complexidade temporal linear O(n). 15

16 Capítulo 3 Conclusão Apresentamos, neste trabalho, alguns dos principais algoritmos de ordenação. Mostramos as características de cada um, analisando o tempo computacional no melhor, pior e médio casos. Através deste estudo, pode-se concluir que não existe um algoritmo de ordenação que seja eficiente para todos os casos, já que para cada situação existe um algoritmo que melhor a solucione. Um exemplo mostrado foi o caso do Merge Sort que funciona melhor em situações onde a entrada não cabe toda na memória princial necessitando ser armazenada em um meio de acesso mais lento e, em contrapartida, o Quick Sort, se bem implementado, é um dos algotimos mais rápidos quando a entrada está toda em memória. Podem ser realizadas pequenas modificações nos algoritmos originais, a fim de garantir características extras, como no caso do Bucket Sort, onde a estabilidade é garantida através da remoção do primeiro elemento de cada seqüência. 16

17 Apêndice A Pseudo-Código do Algoritmo de ordenação Bubble Sort Algoritmo segundo [Wir86]: BubbleSort(vetor A,n) 1. para i 0 ate n faca 2. para j n - 1 decrescendo ate j = i faca 3. se A[j] < A[j - 1] entao 4. Troque(A[j], A[j - 1]); 5. fim se 6. fim para 7. fim para Pseudo-Código do Algoritmo de ordenação Insertion Sort Algoritmo segundo [Miy99]: InsertionSort(Vetor V, Inteiro n) 1. j 2 2. enquanto j n faça 3. AUX V [j]; 4. i j 1; 5. enquanto i > 0 e V [i] > AUX faça 6. V [i + 1] V [i]; 7. j j 1; 8. fim enquanto 9. V [i + 1] AUX; 10. j j + 1; 11. fim enquanto 17

18 Pseudo-Código do Algoritmo de ordenação Selection Sort Algoritmo segundo [Wir86]: SelectionSort(A,tam) 1. para i 1 ate tam faca 2. min i; 3. para j i + 1 ate tam faca 4. se A[min] > A[j] 5. min j; 6. fim se 7. fim para 8. se i min 9. A[min] A[i]; 10 fim se 11. fim para Pseudo-Código do Algoritmo de ordenação Merge Sort Algoritmo segundo [Miy99]: MergeSort(Vetor V, inicio, f im) 1. se inicio < fim então 2. meio inicio+fim 2 3. MergeSort(V, inicio, meio); 4. MergeSort(V, meio + 1, fim); 5. Juncao(V [inicio..meio], V [meio + 1..fim], V ); 6. fim se Método auxiliar do Merge Sort Junção(S 1,S 2, S): % Entrada sequência S 1 e S 2 ordenadas de forma não-decrescente e uma sequência S vazia. % Saida sequência S contendo os elementos de S 1 e S 2 ordenados de forma não-decrescente com as sequências S 1 e S 2 tornando-se vazias 18

19 1. enquanto S 1 ou S 2 não forem vazias faca 2. se S 1.firstElement() S 2.firstElement() então 3. {remova o primeiro elemento de S 1 para o final de S} 4. S.insertLast(S 1.removeFirst()) 5. senão 6. {remova o primeiro elemento de S 2 para o final de S} 7. S.insertLast(S 2.removeFirst()) 8. {remova os elementos restantes de S 1 para S} 9. enquanto(nãos 1.isEmpty()) faça 10. S.insertLast(S 1.removeFirst()) 11. {remova os elementos restantes de S 2 para S} 12. enquanto(nãos 2.isEmpty()) faça 13. S.insertLast(S 2.removeFirst()) Pseudo-Código do Algoritmo de ordenação Quick Sort Algoritmo segundo [Miy99]: QuickSort(vetor V, inicio, fim) 1. se inicio < fim entao 2. meio Particiona( V, inicio, fim ) 3. QuickSort( V, inicio, meio -1 ); 4. QuickSort( V, meio + 1, fim ); 5. fim se fim algoritmo Método auxiliar do Quick Sort Particiona(vetor V, inicio, fim) 1. Pivo V[inicio]; 2. ESQ inicio + 1; 3. DIR fim; 4. enquanto ESQ < DIR faca 5. enquanto V[ESQ] Pivo e ESQ fim faca ESQ ESQ + 1; 6. enquanto V[DIR] > Pivo e DIR inicio faca DIR DIR - 1; 7. se ESQ < DIR entao Troque(V[ESQ], V[DIR]); 8. fim enquanto 9. MEIO DIR; 19

20 10. Troque(V[inicio, V[MEIO]]); 11. Retorne MEIO; Pseudo-Código do algoritmo de Ordenação Heap Sort Algoritmo segundo [Miy99]: HeapSort(A,i) 1. ConstroiHeap(A,i); 2. para i n decrescendo ate 1 faca 3. A[i] ExtraiMax(A,i); Métodos auxiliares do Heap Sort ConstroiHeap(A,n) 1. para i [ n ] decrescendo ate 1 faca 2 2. Rebaixa(A,n,i); Rebaixa(A,n,i) 1. pai i; 2. fesq FilhoEsq(i); 3. fdir FilhoDir(i); 4. maior pai; 5. se fesq n e A[fesq] > A[pai] 6. entao maior fesq; 7. se fdir n e A[fdir] > A[maior] 8. entao maior fdir; 9. se maior pai entao 10. Troca(A[maior], A[pai]); 11. Rebaixa(A,n,maior); ExtraiMax(A,n,i) 1. se n < 1 erro; 2. max A[1]; 3. A[1] A[n]; 4. n n - 1; 20

21 5. Rebaixa(A,n,1); 6. retorne max; Pseudo-Código do Algoritmo de ordenação Count Sort Algoritmo segundo [Miy99]: CountSort(A,B,n,k) 1. para i 1 ate k faca 2. C[i] 1; % inicializa contadores com 0 3. para j 1 ate n faca 4. C[A[i]] C[A[i]] +1; 5. para i 2 ate k faca 6. C[i] C[i] + C[i - 1]; 7. para j n decrescendo ate 1 faca 8. B[C[A[j]]] A[j]; 9. C[A[j]] C[A[j]] - 1; Pseudo-Código do Algoritmo de ordenação Bucket Sort Algoritmo segundo [Miy99]: BucketSort(S) 1. Entrada: seqüência S de itens com chaves inteiras no intervalo [0, N 1] 2. Saida: seqüência S ordenada pelas chaves, de forma não-decrescente 3. seja B um arranjo de N seqüências, cada uma inicalmente vazia 4. para cada item x em S faça 5. seja k a chave de x 6. remove x de S e o insere no fim da seqüência B[k] 7. fim para 8. para i 0 ate N 1 faça 9. para cada item x da seqüência B[i] faça 10. remove x de B[i] e o insere no fim de S 11. fim para 12. fim para 21

22 Pseudo-Código do Algoritmo de Ordenação Radix Sort Algoritmo segundo [Miy99]: RadixSort(A,n,d) 1. para i 1 ate d faca 2. Use um algoritmo estavel para ordenar o array A no digito i. 22

23 Referências Bibliográficas [Goo04] Michael T. Goodrich. Projeto de algoritmos: Fundamentos, análise e exemplos da Internet. Editora Bookman, [Miy99] F. K. Miyazawa. Notas de complexidade de algoritmos. Universidade Estadual de Campinas, [Ric03] Ivan L. M. Ricarte. Ordenação por contagem. Disponível em: Acessado em: 09 Ago. 2007, [Wir86] Niklaus. Wirth. Algoritmos e Estruturas de Dados. Editora Prentice Hall,

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

Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear

Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear MC3305 Algoritmos e Estruturas de Dados II Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 2Q-2015 1 2 Ordenação Ordenar corresponde

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

Á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

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada

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

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

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

Árvores Binárias Balanceadas

Árvores Binárias Balanceadas Árvores Binárias Balanceadas Elisa Maria Pivetta Cantarelli Árvores Balanceadas Uma árvore é dita balanceada quando as suas subárvores à esquerda e à direita possuem a mesma altura. Todos os links vazios

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

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

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

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

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 13 Gerência de Memória Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Sumário

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

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

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

Pesquisa Sequencial e Binária

Pesquisa Sequencial e Binária Pesquisa Sequencial e Binária Prof. Wylliams Barbosa Santos wylliamss@gmail.com Introdução à Programação Crédito de Conteúdo: Professora Ceça Moraes Agenda Pesquisa Sequencial Noções de complexidade Pesquisa

Leia mais

Pesquisa Sequencial e Binária. Introdução à Programação SI2

Pesquisa Sequencial e Binária. Introdução à Programação SI2 Pesquisa Sequencial e Binária Introdução à Programação SI2 3 Contexto Diferentes estratégias para pesquisa (busca) de um elemento específico em um conjunto de dados. Lista, array, coleção Operação importante,

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

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

Árvore B UNITINS ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3º PERÍODO 43

Árvore B UNITINS ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3º PERÍODO 43 AULA A 3 ESTRUTURA RA DE DADOS Árvore B Esperamos que, ao final desta aula, você seja capaz de: identificar as vantagens da árvore B em relação às árvores binária de busca e AVL; conhecer as funções de

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerenciamento de Memória Norton Trevisan Roman Marcelo Morandini Jó Ueyama Apostila baseada nos trabalhos de Kalinka Castelo Branco, Antônio Carlos Sementille, Paula Prata e nas transparências

Leia mais

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

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo Árvores Balanceadas As árvores binárias de pesquisa são, em alguns casos, pouco recomendáveis para as operações básicas (inserção, remoção e busca) Árvores binárias de pesquisa degeneradas tornam as operações

Leia mais

Figura 1 Busca Linear

Figura 1 Busca Linear ----- Evidentemente, possuir os dados não ajuda o programador ou o usuário se eles não souberem onde os dados estão. Imagine, por exemplo, uma festa de casamento com cem convidados na qual não se sabe

Leia mais

Hashing. Estruturas de Dados. Motivação

Hashing. Estruturas de Dados. Motivação Estruturas de Dados Hashing Prof. Ricardo J. G. B. Campello Parte deste material é baseado em adaptações e extensões de slides disponíveis em http://ww3.datastructures.net (Goodrich & Tamassia). Motivação

Leia mais

UMA IMPLEMENTAÇÃO EM LINGUAGEM JAVA DE ALGORITMO DE CLASSIFICAÇÃO BASEADO NO MÉTODO DA INSERÇÃO DIRETA

UMA IMPLEMENTAÇÃO EM LINGUAGEM JAVA DE ALGORITMO DE CLASSIFICAÇÃO BASEADO NO MÉTODO DA INSERÇÃO DIRETA UMA IMPLEMENTAÇÃO EM LINGUAGEM JAVA DE ALGORITMO DE CLASSIFICAÇÃO BASEADO NO MÉTODO DA INSERÇÃO DIRETA 1 BIM,Pedro Henrique Marana; 1 RABALDELLI, Diego José Caíres; 1 SOARES, Luis Antonio; 2 TAMAE, Rodrigo

Leia mais

Excel Planilhas Eletrônicas

Excel Planilhas Eletrônicas Excel Planilhas Eletrônicas Capitulo 1 O Excel é um programa de cálculos muito utilizado em empresas para controle administrativo, será utilizado também por pessoas que gostam de organizar suas contas

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

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

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

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani Sistema de Arquivos Ambientes Operacionais Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani Gerência de Arquivos É um dos serviços mais visíveis do SO. Arquivos são normalmente

Leia mais

Estruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa 10.1.4217

Estruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa 10.1.4217 Estruturas de Armazenamento e Indexação Rafael Lage Moreira Barbosa 10.1.4217 Estruturas de Armazenamento Banco de Dados são armazenados fisicamente como arquivos de registro, que em geral ficam em discos

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

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

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

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2 3.2 O Espaço Nulo de A: Resolvendo Ax = 0 11 O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2 Esta seção trata do espaço de soluções para Ax = 0. A matriz A pode ser quadrada ou retangular. Uma solução imediata

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

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

CT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

CT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 4) Árvores balanceadas AVL, Rubro-Negras, B-Trees Operações em árvores binárias de busca

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

Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação. Quão rápido podemos ordenar? Árvore de Decisão- Exemplo. Ordenação em Tempo Linear

Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação. Quão rápido podemos ordenar? Árvore de Decisão- Exemplo. Ordenação em Tempo Linear Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação Ordenação em Tempo Linear Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Um algoritmo baseado em comparação para

Leia mais

Processo de Controle das Reposições da loja

Processo de Controle das Reposições da loja Processo de Controle das Reposições da loja Getway 2015 Processo de Reposição de Mercadorias Manual Processo de Reposição de Mercadorias. O processo de reposição de mercadorias para o Profit foi definido

Leia mais

O Problema do Troco Principio da Casa dos Pombos. > Princípios de Contagem e Enumeração Computacional 0/48

O Problema do Troco Principio da Casa dos Pombos. > Princípios de Contagem e Enumeração Computacional 0/48 Conteúdo 1 Princípios de Contagem e Enumeração Computacional Permutações com Repetições Combinações com Repetições O Problema do Troco Principio da Casa dos Pombos > Princípios de Contagem e Enumeração

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

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

Tabelas Hash. Jeane Melo

Tabelas Hash. Jeane Melo Tabelas Hash Jeane Melo Roteiro Introdução Motivação Definição Tabelas Hash Exemplos Funções hash Colisões Introdução Estudamos a utilização de estruturas como listas e árvores para armazenar informações

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

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Fila de Prioridade A fila de prioridade nada mais é que uma fila comum que permite que elementos sejam adicionados associados com uma prioridade. Cada elemento na fila deve possuir um dado adicional que

Leia mais

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

Leia mais

ULA Sinais de Controle enviados pela UC

ULA Sinais de Controle enviados pela UC Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento

Leia mais

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

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 7 Estrutura de Dados: Listas Prof. Tiago A. E. Ferreira Introdução Um das formas mais usadas para se manter dados agrupados é a lista Lista de compras, itens de estoque,

Leia mais

Banco de Dados I 2007. Módulo V: Indexação em Banco de Dados. (Aulas 1, 2 e 3) Clodis Boscarioli

Banco de Dados I 2007. Módulo V: Indexação em Banco de Dados. (Aulas 1, 2 e 3) Clodis Boscarioli Banco de Dados I 2007 Módulo V: Indexação em Banco de Dados (Aulas 1, 2 e 3) Clodis Boscarioli Agenda: Estruturas de Índices; Conceitos; Tipos de Índices: Primários; Secundários; Clustering; Multiníveis;

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

Exercícios de Java Aula 19

Exercícios de Java Aula 19 Exercícios de Java Aula 19 Link do curso: http://www.loiane.com/2013/10/curso-java-basico-java-se-gratuito/ 1. Criar um vetor A com 5 elementos inteiros. Construir um vetor B de mesmo tipo e tamanho e

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

PROGRAMAÇÃO II 4. ÁRVORE

PROGRAMAÇÃO II 4. ÁRVORE 4. ÁRVORE PROGRAMAÇÃO II Prof. Jean Eduardo Glazar Uma árvore impõe uma estrutura hierárquica em uma coleção de itens. Um exemplo familiar é a árvore genealógica. Árvores despontam de forma natural em

Leia mais

Linguagem C: Árvores Binarias

Linguagem C: Árvores Binarias Instituto de C Linguagem C: Árvores Binarias Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Introdução Árvores binárias Implementaçã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

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Pilhas A estrutura de dados Pilha emula a forma de organização de objetos intuitiva que é utilizada diariamente nos mais diversos contextos da vida humana. Containeres são empilhados e desempilhados diariamente

Leia mais

Guia Site Empresarial

Guia Site Empresarial Guia Site Empresarial Índice 1 - Fazer Fatura... 2 1.1 - Fazer uma nova fatura por valores de crédito... 2 1.2 - Fazer fatura alterando limites dos cartões... 6 1.3 - Fazer fatura repetindo última solicitação

Leia mais

2. ALGORITMOS. Unesp Campus de Guaratinguetá. Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro

2. ALGORITMOS. Unesp Campus de Guaratinguetá. Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 2. ALGORITMOS Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 2 - Algoritmo 2.1: Introdução Antes de se utilizar uma linguagem de computador,

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

Análise de Algoritmos: Melhor caso, pior caso, caso médio

Análise de Algoritmos: Melhor caso, pior caso, caso médio Análise de Algoritmos: Melhor caso, pior caso, caso médio Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 25 Sumário Rever um problema e um algoritmo que já conhecem. Descrevê-lo em pseudo-código

Leia mais

Memórias Prof. Galvez Gonçalves

Memórias Prof. Galvez Gonçalves Arquitetura e Organização de Computadores 1 s Prof. Galvez Gonçalves Objetivo: Compreender os tipos de memória e como elas são acionadas nos sistemas computacionais modernos. INTRODUÇÃO Nas aulas anteriores

Leia mais

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR Novell Teaming - Guia de início rápido Novell Teaming 1.0 Julho de 2007 INTRODUÇÃO RÁPIDA www.novell.com Novell Teaming O termo Novell Teaming neste documento se aplica a todas as versões do Novell Teaming,

Leia mais

1. Sistemas de numeração

1. Sistemas de numeração 1. Sistemas de numeração Quando mencionamos sistemas de numeração estamos nos referindo à utilização de um sistema para representar uma numeração, ou seja, uma quantidade. Sistematizar algo seria organizar,

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos Complexidade de Algoritmos Envolvendo Estruturas de Dados Elementares Prof. Osvaldo Luiz de Oliveira Estas anotações devem ser complementadas por apontamentos em aula. Vetor

Leia mais

CÁLCULO DE ZEROS DE FUNÇÕES REAIS

CÁLCULO DE ZEROS DE FUNÇÕES REAIS 15 CÁLCULO DE ZEROS DE FUNÇÕES REAIS Um dos problemas que ocorrem mais frequentemente em trabalhos científicos é calcular as raízes de equações da forma: f() = 0. A função f() pode ser um polinômio em

Leia mais

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas? Recorrências Muitas vezes não é possível resolver problemas de contagem diretamente combinando os princípios aditivo e multiplicativo. Para resolver esses problemas recorremos a outros recursos: as recursões

Leia mais

Terceira Avaliação Visualg & Pascal

Terceira Avaliação Visualg & Pascal Primeiro trabalho Sistema de controle acadêmico Objetivo: implementar um programa de computador que realiza o controle acadêmico de uma turma em uma disciplina específica. O programa deve ser capaz de

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

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

Programação para Computação

Programação para Computação Universidade Federal do Vale do São Francisco Programação para Computação Professor: Marcelo Santos Linder E-mail: marcelo.linder@univasf.edu.br Ementa Conceito de algoritmo. Lógica de programação e programação

Leia mais

2. Representação Numérica

2. Representação Numérica 2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação

Leia mais

BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento

BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento 1 Gerência de espaço em disco Cópia de segurança do sistema de arquivo Roteiro Confiabilidade Desempenho

Leia mais

Capítulo 19. Algoritmos de Ordenação e de Pesquisa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Capítulo 19. Algoritmos de Ordenação e de Pesquisa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Capítulo 19 Algoritmos de Ordenação e de Pesquisa Objetivos do Capítulo Conceituar ordenação e pesquisa. Apresentar os algoritmos de ordenação por troca, por seleção e por inserção. Explorar os algoritmos

Leia mais

O que é RAID? Tipos de RAID:

O que é RAID? Tipos de RAID: O que é RAID? RAID é a sigla para Redundant Array of Independent Disks. É um conjunto de HD's que funcionam como se fosse um só, isso quer dizer que permite uma tolerância alta contra falhas, pois se um

Leia mais

ARQUITETURA DE COMPUTADORES

ARQUITETURA DE COMPUTADORES 1 ARQUITETURA DE COMPUTADORES U C P Prof. Leandro Coelho Plano de Aula 2 Aula Passada Definição Evolução dos Computadores Histórico Modelo de Von-Neumann Básico CPU Mémoria E/S Barramentos Plano de Aula

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

Árvore Binária de Busca

Árvore Binária de Busca Árvore Binária de Busca 319 Árvore Binária de Busca! construída de tal forma que, para cada nó:! nós com chaves menores estão na sub-árvore esquerda! nós com chaves maiores (ou iguais) estão na subárvore

Leia mais

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor. PUC-Rio Departamento de Informática Período: 2015.1 Horário: 2as-feiras e 4as-feiras de 17-19 30 de março de 2015 ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) 1 a Lista de Exercícios 1. Lista (a) Seja um TAD

Leia mais

DECODIFICADOR DE DISPLAY DE 7 SEGMENTOS COM LATCH

DECODIFICADOR DE DISPLAY DE 7 SEGMENTOS COM LATCH UNIVERSIDADE FEDERAL DO PARANÁ DEPARTAMENTO DE ENGENHARIA ELÉTRICA DECODIFICADOR DE DISPLAY DE 7 SEGMENTOS COM LATCH Projeto para a matéria TE130 Projeto de Circuitos Integrados Digitais, ministrada pelo

Leia mais

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 1 PONTEIROS Prof. Yandre Maldonado e Gomes da Costa PONTEIROS Prof. Yandre Maldonado - 2 Ponteiro é uma variável que possui o endereço de outra variável; É um poderoso recurso

Leia mais

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir.

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir. O throughput de um pipeline é determinado pela freqüência com que uma instrução sai do pipeline Todos os estágios devem estar prontos ao mesmo tempo para prosseguir O tempo requerido para mover uma instrução

Leia mais

Batalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a.

Batalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a. Atividade 6 Batalha Naval Algoritmos de Busca Sumário Computadores são freqüentemente requisitados a encontrar informação em grandes coleções de dados. Estes precisam desenvolver métodos rápidos e eficientes

Leia mais

AV2 - MA 12-2012. (a) De quantos modos diferentes posso empilhá-los de modo que todos os CDs de rock fiquem juntos?

AV2 - MA 12-2012. (a) De quantos modos diferentes posso empilhá-los de modo que todos os CDs de rock fiquem juntos? Questão 1. Num porta-cds, cabem 10 CDs colocados um sobre o outro, formando uma pilha vertical. Tenho 3 CDs de MPB, 5 de rock e 2 de música clássica. (a) De quantos modos diferentes posso empilhá-los de

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerência de Arquivos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Conceituação de arquivos Implementação do sistemas de arquivo Introdução Sistema de

Leia mais

EAD Árvore árvore binária

EAD Árvore árvore binária EAD Árvore árvore binária - Uma árvore binária é um conjunto finito de elementos (nodos) que pode ser vazio ou particionado em três subconjuntos: - raiz da árvore (elemento inicial, que é único); - subárvore

Leia mais

Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle

Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle Disciplina: TCC-00.7 Prog. de Computadores III Professor: Leandro Augusto Frata Fernandes Turma: A- Data: / / Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle. Construa um algoritmo

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

CURSO BÁSICO DE PROGRAMAÇÃO AULA 7

CURSO BÁSICO DE PROGRAMAÇÃO AULA 7 CURSO BÁSICO DE PROGRAMAÇÃO AULA 7 Revisão para prova: Comandos de Entrada e Saída Estruturas de Decisão (Se, caso (escolha)) Laços de Repetição (Enquanto, Repita, Para) Relembrando Trabalho 1 Prazo de

Leia mais

Estruturas de Dados I

Estruturas de Dados I UFES - Curso de verão 2011 Estruturas de Dados I Profa. Juliana Pinheiro Campos jupcampos@gmail.com Árvores binárias de busca (ou São árvores projetadas para dar suporte a operações de busca de forma eficiente.

Leia mais

2ª Lista de Exercícios

2ª Lista de Exercícios Universidade Federal de Minas Gerais Departamento de Ciência da Computação Algoritmos e Estruturas de Dados II (Turmas M, N, W, F) 1º Semestre de 2012 Profs. Camilo Oliveira, Gisele Pappa, Ítalo Cunha,

Leia mais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10 ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10 Índice 1. A Organização do Computador - Continuação...3 1.1. Memória Primária - II... 3 1.1.1. Memória cache... 3 1.2. Memória Secundária... 3 1.2.1. Hierarquias de

Leia mais