Algoritmos. para concursos. Questões comentadas

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

Download "Algoritmos. para concursos. Questões comentadas"

Transcrição

1 Algoritmos para concursos Questões comentadas

2 Prefácio Um algoritmo é um conjunto de operações em sequência para resolver determinado problema. A noção de algoritmo é extremamente importante para a computação. Não existe um conjunto de regras que nos permita criar novos algoritmos e, portanto, trata-se de umas maiores diculdades dos iniciantes em programação. O estudo de algoritmos é muito cobrado nos concursos na área de tecnologia da informação e, por isso, o Grupo Handbook de TI preparou este volume, que traz uma série de questões comentadas sobre Algoritmos para você se preparar ainda melhor para os certames de seu interesse. Bons estudos, Grupo Handbook de TI Página 1 de 27

3 Direitos Autorais Este material é registrado no Escritório de Direitos Autorais (EDA) da Fundação Biblioteca Nacional. Todos os direitos autorais referentes a esta obra são reservados exclusivamente aos seus autores. Os autores deste material não proíbem seu compartilhamento entre amigos e colegas próximos de estudo. Contudo, a reprodução, parcial ou integral, e a disseminação deste material de forma indiscriminada através de qualquer meio, inclusive na Internet, extrapolam os limites da colaboração. Essa prática desincentiva o lançamento de novos produtos e enfraquece a comunidade concurseira Handbook de TI. A série Handbook de Questões de TI Comentadas para Concursos Além do Gabarito é uma produção independente e contamos com você para mantê-la sempre viva. Grupo Handbook de TI Página 2 de 27

4 Canais de Comunicação O Grupo Handbook de TI disponibiliza diversos canais de comunicação para os concurseiros de TI. Loja Handbook de TI Acesse a nossa loja virtual em Serviço de Atendimento Comunique-se diretamente conosco através do faleconosco@handbookdeti.com.br Twitter do Handbook de TI Acompanhe de perto promoções e lançamentos de produtos pelo nosso Twitter com/handbookdeti Página 3 de 27

5 1. Assuntos relacionados: Algoritmos, Complexidade de Algoritmos, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas Pleno - Processos Ano: 2006 Questão: 52 A respeito de funções e algoritmos, assinale a armativa correta. (a). O limite inferior de um algoritmo (Ω) é utilizado para a análise do pior caso de sua execução. (b). Uma função f(n) domina assintoticamente g(n), se existem duas constantes positivas c e n 0, tais que, para n n 0, temos que g(n) c f(n). (c). A função f(5log 2 N) é O 2 (N). (d). A função f(5n 3 + 2N 2 ) é O(N). (e). Se duas funções f() e g() têm limite superior justo, então f() é O(g()) e g() é O(f()). Solução: Uma avaliação analítica pode ser feita com o objetivo de se obter uma estimativa de esforço de um algoritmo em termos do tamanho do problema. Tal estimativa resulta em uma função do crescimento do tempo de execução de um algoritmo em relação ao tamanho da entrada. Em geral, o trabalho que um algoritmo precisa fazer para resolver um problema cresce de acordo com o número de itens de entrada. Para determinar a complexidade de um algoritmo, conta-se o número de operações que ele faz para cada item, onde cada operação pode ser leituras de disco, comparações, trocas etc. Em seguida, é determinada uma expressão que representa essa quantidade. O que se considera no estudo de complexidade de algoritmos é o seu comportamento assintótico, ou seja, uma tendência a um limite à medida do crescimento do tamanho do problema. Vamos elucidar as notações geralmente utilizadas para esse tipo de avaliação analítica. Diz-se que uma função g(n) é O(f(n)), notando-se g = O(f(n)) se existir alguma constante c > 0 e um inteiro n 0, tal que n > n 0 implica g(n) c x f(n). Diz-se também que g(n) tem taxa de crescimento proporcional a f(n), é de ordem máxima f(n), de complexidade f(n) ou magnitude f(n), simplesmente que é O de f(n). A análise O é conhecida também como a análise do pior caso. Dadas funções assintoticamente não-negativas g e f, dizemos que g está na ordem Ω de f, e escrevemos g = Ω(f(n)), se existir alguma constante c > 0 e um inteiro n 0 tal que n > n 0 implica g(n) c x f(n). É fácil notar que f = O(g) se e somente se g = Ω(f). A análise Ômega é conhecida como a análise do melhor caso e é pouco utilizada. As notações utilizadas em minúsculo através dos símbolos o (o minúsculo) e ω são utilizadas para representar limites assintóticos não justos, as denições anteriores mudam de algum c > 0 para todo todo c > 0. Já que foi dada um explicação básica em relação à complexidade de algoritmos e suas Página 4 de 27

6 notações, vamos analisar as alternativas de uma a uma. A alternativa (A) está claramente errada, já que a notação Ω é utilizada para denotar a análise do melhor caso e não do pior caso. Também está equivocada a alternativa (B), visto que quando dizemos que f(n) domina assintoticamente g(n) dizemos também que g(n) = O(f(n)) e a denição está ligeiramente errada visto que o correto, neste caso, é g(n) c x f(n). A notação O 2 não faz sentido em complexidade de algoritmos, logo, a alternativa (C) pode ser invalidada. O termo dominante em uma função polinomial pode ser utilizado para determinar a análise de pior caso de um algoritmo. Na função f(5n 3 + 2N 2 ), podemos dizer que é O(N 3 ) também sendo aceito que f é O(5N 3 ), por exemplo, mas, com certeza, f não é O(N), visto que N não é o termo dominante do polinômio. Portanto, a alternativa (D) está errada. A alternativa (E) está correta, pois a notação O maiúsculo representa o limite superior justo das funções. E se as funções f e g tem o limite superior justo entre elas de maneira equivalente, podemos dizer que f() é O(g()) e g() é O(f()) Página 5 de 27

7 2. Assuntos relacionados: Algoritmos, Complexidade de Algoritmos, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas Pleno - Processos Ano: 2006 Questão: 56 Considere os algoritmos a seguir e as suas correspondentes complexidades indicadas. Estão corretas apenas as complexidades indicadas para os algoritmos: I Busca seqüencial de um elemento em um vetor de tamanho N O(N) II Busca, via pesquisa binária, de um elemento, em um vetor de tamanho N O(log2N) III Busca de um rótulo de um nó em uma árvore binária completa, com N nós O(log2N) IV Busca de um rótulo de um nó em uma árvore binária de busca, com N nós O(N) V Inclusão de um elemento em um vetor ordenado de tamanho N, mantendo-se a ordenação O(1) (a). I, II e III. (b). I, II e IV. (c). II, III e V. (d). II, III, IV e V. (e). I, III, IV e V. Solução: A complexidade algorítmica é uma medida que expressa a eciência de um algoritmo em termos da quantidade de operações relevantes realizadas pelo algoritmo até que ele alcance o seu resultado nal. Exemplos de operações que podem ser consideradas relevantes para um algoritmo são as operações de comparação, operações aritméticas, operações de movimentação de dados etc. A complexidade algorítmica é então expressa em função do tamanho do problema. Em um problema que envolva a ordenação de um vetor, por exemplo, o tamanho do problema seria o tamanho do vetor. Em um problema que envolva a busca por um elemento em uma árvore binária, o tamanho do problema seria a quantidade de elementos contidos na árvore. É comum que se utilize a letra N para expressar o tamanho de um determinado problema. Boa parte das vezes, na avaliação da complexidade de um algoritmo, interessa ao avaliador descobrir qual será a complexidade do algoritmo quando for submetido a uma entrada de dados que o faça operar em seu pior caso, ou seja, que o faça executar o maior número de operações até que se alcance o resultado nal. No estudo da complexidade algorítmica, tal valor é denotado pela notação O. Se um algoritmo, no seu pior caso, precisa executar N operações, diz-se que sua complexidade é O(N). Já se, em seu pior caso, ele executa um número de operações constate, diz que ele possui complexidade O(1). Agora, vamos analisar cada uma das correspondências algoritmo/complexidade e vericar quais delas estão corretas. (I) CORRETA Página 6 de 27

8 Uma busca sequencial é aquela em que o vetor é percorrido a partir de uma extremidade no sentido da outra até que o elemento procurado seja encontrado. Imaginando o caso em que o elemento procurado seja o último elemento a ser avaliado em um vetor de tamanho N, para que se encontre tal elemento o algoritmo precisará executar N operações de comparação. Com isso, o pior caso de tal algoritmo é O(N). (II) CORRETA O processo de busca binária inicia-se com a escolha de um elemento chamado pivot, localizado no centro do vetor. Caso o elemento procurado seja menor que o pivot, somente o sub vetor da esquerda será pesquisado. Caso contrário, somente o sub vetor da direita será pesquisado. E assim, a cada etapa, o escopo da busca é divido pela metade. No limite, o número máximo de divisões que poderão acontecer até que o elemento procurado seja eleito como pivot é o valor do logaritmo de N na base 2. Portanto, o pior caso da busca binária é O(log 2 N). (III) ERRADA Em processo de busca por um elemento em uma árvore binária, a particionamento do escopo de busca é determinado pelo fato de o elemento procurado ser maior ou menor que o nó corrente da árvore. Caso o elemento seja maior, a busca prossegue explorando apenas o ramo à direita do nó. Caso contrário, o processo prossegue explorando o ramo à esquerda. Aparentemente, o processo é bem semelhante ao processo de pesquisa binária. No entanto, pode acontecer de existir árvore binárias mal balanceadas, podendo chegar ao extremo de a árvore possuir uma única ramicação para um único lado. Nessa situação, como a navegação na árvore se dá necessariamente apenas entre nós conectados, pode acontecer de o processo de busca ter que percorrer todo a ramicação, desde a raiz até a folha, passando por todos os nós internos. Esse seria, portanto, o pior caso da busca em uma árvore binária, no qual seriam necessárias N operações de comparação. Portanto, a complexidade de tal algoritmo no pior caso é O(N). (IV) CORRETA Nesta armativa, a situação é exatamente a ilustrada no item anterior, onde foi mostrado que a complexidade da busca em uma árvore binária no pior caso é O(N). (V) ERRADA O processo de inclusão de um elemento em um vetor ordenado de tamanho N jamais poderia possuir complexidade O(1), ou seja, ser realizado com um número constante de operações. Isso se deve ao simples fato de que, para determinar em que posição o elemento deverá ser inserido para que se mantenha a ordenação, será necessário antes realizar um processo de busca que, se implementado da forma mais eciente possível (no caso, através de uma busca binária), teria complexidade O(log 2 N). Portanto, como apenas as armativas I, II e IV estão corretas, a resposta da questão é a alternativa B. Página 7 de 27

9 3. Assuntos relacionados: Métodos de Busca, Pesquisa Binária, Árvore B, Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 50 Os dados de uma agenda contendo nome, telefone e endereço de pessoas estão organizados em um arquivo de dados com acesso somente de leitura. Um dispositivo eletromecânico D, que possibilita acesso direto, contém, aproximadamente, 90 milhões de registros ordenados por nome. Assumindo que o tamanho do campo endereço é variável e que D pode ter arquivos (pré-existentes) de índices que se referenciam ao arquivo de dados, e supondo que não possui cache, qual é a estratégia que realizará, em média, menos operações de I/O para consultar todos os registros cujo nome começa por uma determinada letra? (a). Pesquisa binária diretamente sobre o arquivo de dados, uma vez que já existe ordenação por nome. (b). Pesquisa sobre o arquivo de índices indexados pelo nome, implementando um algoritmo de busca em uma árvore B-Tree balanceada. (c). Pesquisa seqüencial sobre um arquivo de índices indexado pelas letras do alfabeto e posterior leitura sequencial sobre o arquivo de dados, nos quais cada índice aponta para o endereço do início da respectiva letra na agenda. (d). Pesquisa binária sobre um arquivo de índices indexado pelo nome, para posterior acesso ao arquivo de dados. (e). Leitura seqüencial diretamente sobre o arquivo de dados, sem a utilização de arquivos auxiliares de índice. Solução: (A) ERRADA Para que fosse possível pesquisa binária diretamente sobre arquivo de dados, como seus registros tem tamanhos variáveis, seria necessário incluir informações que serviriam de ponteiros em cada registro. O que não é possível, já que o arquivo de dados permite apenas leitura. Portanto, a alternativa A não é possível. (B) ERRADA De maneira geral, a abordagem por B-Tree é uma boa opção. Entretanto, é importante observar que para recuperar cada registro é necessária uma consulta à B-Tree e posteriormente ao arquivo de dados. Tal implementação utilizaria um número de operações da ordem (n/26)/*log(n), onde n é o número total de registros. Analisaremos as outras opções adiante. Note que a opção nem explicitou como seria o acesso ao arquivo de dados. (C) CORRETA Essa é uma opção bem eciente para o caso, já que será necessário apenas encontrar a letra do alfabeto correspondente (mesmo que de maneira sequencial) no arquivo de índices e depois percorrer sequencialmente o arquivo de dados. A ordem neste caso é 13+n/26. Ou seja, mais rápido que o caso descrito na alternativa B. Página 8 de 27

10 (D) ERRADA O caso e o custo são muito parecidos com aqueles explicitados na alternativa B e, como consequência, o seu resultado não supera o desempenho descrito na alternativa C. (E) ERRADA Neste caso, a ordem seria percorrer o arquivo de dados até encontrar o primeiro registro cujo nome começa com a letra especicada e depois percorrer todos os elementos que atendam a condição. O custo seria da ordem n/2+n/26. Concluímos que a alternativa mais eciente é a alternativa C. Página 9 de 27

11 4. Assuntos relacionados: Busca Binária, Busca Sequencial, Banca: FCC Instituição: MPU Cargo: Analista de Desenvolvimento de Sistemas Ano: 2007 Questão: 36 Considere: I. Os algoritmos de busca binária e de busca seqüencial executam processamento repetitivo. II. Os algoritmos de busca binária e de busca seqüencial utilizam a técnica de recursão. III. A busca seqüencial executa cada fase da repetição na forma de uma subtarefa da fase anterior. IV. A busca binária trabalha com uma forma circular de repetição. Está correto o que consta em (a). I, apenas. (b). II, apenas. (c). I e II, apenas. (d). I, III e IV, apenas. (e). I, II, III e IV. Solução: Os algoritmos de busca binária e de busca sequencial são técnicas para localizar um valor em particular em uma lista. A pesquisa ou busca binária (em inglês binary search ou binary chop) é um algoritmo de busca que parte do pressuposto de que os elementos da lista já estão ordenados. O algoritmo de busca binária é um exemplo clássico de dividir-e-conquistar e sua ideia principal consiste em analisar o elemento do meio da lista para inferir se o elemento que está sendo procurado está depois ou antes desse elemento e, assim sucessivamente, dividir o espaço de busca por dois. Já o algoritmo de busca sequencial, ou busca linear como também é conhecido, percorre a lista, elemento por elemento, vericando se o elemento desejado está presente. Note que não é preciso no algoritmo de busca sequencial que a lista esteja ordenada. Ambos algoritmos necessitam de explorar o processamento repetitivo, que em linguagem de programação pode ser implementado tanto em laços de iteração (for, loop, while etc) tanto como de maneira recursiva. Vamos analisar as alternativas de I a IV para chegarmos na resposta. (I) Está correta, pois ambos algoritmos executam o processamento repetitivo. O termo processamento repetitivo é usualmente utilizado para denotar o uso repetitivo das operações de computador, o que é o nosso caso, já que esses algoritmos utilizarão repetitivamente operações de comparação entre dois valores. (II) Está errada, pois, mesmo que ambos algoritmos possam ser implementados de forma recursiva, ambos também podem ser implementados com o uso de laços iterativos. Logo, a Página 10 de 27

12 técnica de recursão não é necessária e as ideias desses algoritmos não se baseiam na maneira de como eles serão implementados e, sim, de que maneira os dados da lista serão tratados. A alternativa se tornaria correta se utilizassem o predicado podem utilizar a técnica de recursão. (III) Está errada, o algoritmo que utiliza a ideia de dividir em subtarefas é o algoritmo de busca binária e não o de busca sequencial. (IV) Errada, pois a técnica de busca binária utiliza a ideia do dividir-e-conquistar, que não tem relação com repetição circular. Como somente (I) está correta, a letra (A) é a letra ser marcada nesta questão. Página 11 de 27

13 5. Assuntos relacionados: Estruturas de Dados, Árvores Binárias, Árvore Binária de Busca, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas Pleno - Processos Ano: 2006 Questão: 50 Insira as chaves Lina, Ana, Lia, Ada, Lua, Sol, Cris, Bia, Rita, Mel, Rosa, Val em uma árvore binária de busca (considere que a árvore está inicialmente vazia). Considere agora, a execução dos seguintes percursos sobre a estrutura após a inserção das chaves. I - Um percurso em pré-ordem seria: Sol, Lua, Lina Ada, Bia, Cris, Lia, Ana, Mel, Rosa, Rita, Val, II - Um percurso em ordem simétrica seria: Val, Sol, Rosa, Rita, Mel, Lua, Lina, Lia, Cris, Bia, Ana, Ada III - Um percurso em nível seria: Lina, Ana, Lua, Ada, Lia, Sol, Cris, Rita, Val, Bia, Mel, Rosa IV - Um percurso em pós-ordem seria: Lina, Ana, Ada, Lia, Cris, Bia, Lua, Sol, Rita, Mel, Rosa, Val Estão corretos apenas os percursos indicados em: (a). I e II. (b). II e III. (c). I, II e III. (d). I, II e IV. (e). II, III e IV. Solução: Classicamente, uma árvore binária é denida como uma estrutura de dados com as seguintes características: não ter elemento algum (uma árvore vazia); ter um elemento distinto (nó raiz da árvore), com dois ponteiros para estruturas distintas, denominadas sub-árvore esquerda e sub-árvore direita. Cada um dos dois nós sub-sequentes a um nó raiz (nó da esquerda e nó da direita) são chamados lhos do nó raiz. Uma árvore binária de busca (ou árvore de busca binária ou árvore de pesquisa binária) é organizada em uma árvore binária, sendo uma estrutura onde todos os nós possuem chaves que são valores e, por padrão, os nós à esquerda formam uma sub-árvore com valores inferiores ao do nó raiz e os nós à direita formam uma sub-árvore com valores superiores ao do nó da raiz. Assim, as chaves em uma árvore binária de busca são sempre armazenadas satisfazendo à propriedade de árvore de pesquisa binária: Seja x um nó em uma árvore binária de busca. Se y é um nó na sub-árvore esquerda de x, então chave[y] <= chave[x]. Se y é um nó na sub-árvore direita de x, então chave[x] <= chave[y]. Página 12 de 27

14 Essa propriedade orienta tanto a busca por valores na árvore quanto a inserção de novos nós, que são operações recorrentes nessa estrutura de dados. Uma outra operação interessante, que permite a impressão de todos os valores armazenados em uma árvore binária de busca, é chamada de percurso e pode-se dar, de acordo com a literatura comumente encontrada, de três formas distintas: percurso de árvore em ordem (ou em ordem simétrica), percurso de árvore de pré-ordem (ou em pré-ordem) e percurso de árvore de pós-ordem (ou em pós-ordem). Há, ainda, autores que registram um quarto tipo de percurso conhecido como percurso em largura (ou percurso em nível). No percurso de árvore em ordem simétrica, a chave da raiz de uma sub-árvore é impressa entre os valores de sua sub-árvore esquerda e aqueles de sua sub-árvore direita. Semelhantemente, o percurso de árvore de pré-ordem imprime a raiz antes dos valores em uma ou outra sub-árvore, e o percurso de árvore de pós-ordem imprime a raiz depois dos valores contidos em suas sub-árvores. Esses três tipos de percurso, denidos recursivamente, são considerados percursos em profundidade. O percurso em nível (percurso em largura), mais bem compreendido de forma não-recursiva, visita os nós na ordem em que aparecem nos níveis da árvore: primeiramente, são visitados todos os nós do nível 0; em seguida, visitam-se os nós do próximo nível; e assim por diante. Em geral, os nós são visitados da esquerda para a direita em cada um dos níveis. Dadas as informações apresentadas na questão, tem-se a seguinte árvore binária de busca: Figura 1: exemplo de gura. Como Lina é o primeiro valor apresentado à árvore binária de busca que está inicialmente vazia, ele é considerado a raiz da árvore principal. O valor seguinte, Ana, é considerado menor do que o anterior (critério: ordem alfabética) e, portanto, deverá ser inserido à esquerda do nó raiz. O valor seguinte, Lia, também é inferior ao valor da raiz e, consequentemente, será inserido à esquerda do mesmo. Como é superior ao valor Ana já presente, situar-se-á à direita do mesmo. E assim por diante. Um percurso em pré-ordem (isto é, um percurso no qual a raiz é visitada antes de seus lhos) é Lina, Ana, Ada, Lia, Cris, Bia, Lua, Sol, Rita, Mel, Rosa, Val. Observa-se que a raiz de cada (sub-)árvore é visita antes de seus lhos (Lina vem antes de Ana e Lua, Ana vem antes de Ada e Lia, e assim sucessivamente) e na sequência visitam-se primeiramente os lhos da esquerda e, em seguida, os lhos da direita. A outra opção para um percurso em pré-ordem, agora visitando os lhos da direita antes dos lhos da esquerda, é Lina, Lua, Sol, Val, Rita, Rosa, Mel, Ana, Lia, Cris, Bia, Ana. Página 13 de 27

15 Um percurso em ordem simétrica (isto é, um percurso no qual a raiz aparece entre seus lhos) é Ada, Ana, Bia, Cris, Lia, Lina, Lua, Mel, Rita, Rosa, Sol, Val. Considerou-se a visita aos lhos da esquerda antes dos lhos da direita. A ordem inversa, ou seja, lhos da direita antes dos lhos da esquerda, também é possível: Val, Sol, Rosa, Rita, Mel, Lua, Lina, Lia, Cris, Bia, Ana, Ada. Para a árvore dada, um percurso em pós-ordem (isto é, a raiz é visita após seus lhos), visitando primeiramente os lhos da esquerda, é Ada, Bia, Cris, Lia, Ana, Mel, Rosa, Rita, Val, Sol, Lua, Lina. Visitando os lhos da direita antes dos lhos da esquerda, o outro percurso em pós-ordem é Val, Rosa, Mel, Rita, Sol, Lua, Bia, Cris, Lia, Ada, Ana, Lia. Para o percurso em nível, tem-se Lina, Ana, Lua, Ada, Lia, Sol, Cris, Rita, Val, Bia, Mel, Rosa como um percurso que realiza uma visita aos lhos da esquerda antes dos lhos da direita. Inversamente, visitando os lhos da direita primeiramente, obtêm-se Lina, Lua, Ana, Sol, Lia, Ada, Val, Rita, Cris, Rosa, Mel, Bia. Apenas as assertivas II e III condizem com a teoria exposta. As demais, buscam confundir o candidado, embaralhando resultados possíveis (a assertiva I é um percurso em nível e a assertiva IV apresenta um percurso em pré-ordem). Desta forma, a resposta da questão é a letra (B). Página 14 de 27

16 6. Assuntos relacionados: Algoritmos de Ordenação, Heapsort, Ordenação por Árvore de Decisão, Ordenação por Comparação, Quicksort, Ordenação por Inserção, Ordenação por Intercalação, Banca: CESGRANRIO Instituição: Petrobras Cargo: Analista de Sistemas - Eng. de Software Ano: 2008 Questão: 56 Sobre o algoritmo de ordenação heapsort, assinale a armação correta. (a). Utiliza ordenação por árvore de decisão, ao invés de ordenação por comparação. (b). A estrutura de dados que utiliza, chamada heap, pode ser interpretada como uma árvore binária. (c). Seu desempenho de pior caso é pior do que o do algoritmo quicksort. (d). Seu desempenho de pior caso é o mesmo da ordenação por inserção. (e). Seu desempenho de pior caso é menor do que o da ordenação por intercalação. Solução: O Heapsort utiliza uma estrutura de dados chamada heap binário (árvore binária mantida na forma de vetor) para ordenar os elementos a medida que os insere na estrutura. Dessa forma, ao nal das inserções, os elementos podem ser sucessivamente removidos da raiz da heap, na ordem desejada. Para uma ordenação crescente, deve ser construída uma heap máxima (o maior elemento ca na raiz). Já para uma ordenação decrescente, deve ser construída uma heap mínima (o menor elemento ca na raiz). Em resumo, as principais características desse algoritmo são: ordenação por seleção; heap gerada e mantida no próprio vetor a ser ordenado (utilização eciente da memória); complexidade (em qualquer caso: pior, médio ou melhor): O(n log n); consumo de memória ao construir a árvore; não é indicado para vetores pequenos por conta do tempo de construção da árvore. (A) ERRADA Algoritmos que se baseiam apenas em comparações entre os elementos de entrada para efetuarem ordenações são denominados algoritmos de ordenação por comparação. Os algoritmos Heapsort, Quicksort e Ordenação por Intercalação (Mergesort) são alguns exemplos desse tipo de algoritmo. Uma árvore de decisão representa, de modo abstrato, as comparações executadas por um algoritmo de ordenação. Suas principais propriedades são: é uma árvore binária; possui no mínimo n! folhas (para n igual ao número de elementos a serem ordenados); cada folha contém uma permutação dos dados de entrada. O caminho mais longo da árvore representa o pior caso de execução do algoritmo. É sempre possível construir uma árvore de decisão para algoritmos de ordenação por comparação. Essa construção é realizada da seguinte forma: Página 15 de 27

17 xe o n; verique qual é a primeira comparação do algoritmo, que pode resultar em sim ou não. Nesse passo, é necessário saber quais são os índices que estão sendo comparados; a primeira comparação é colocada na raiz da árvore de decisão, incluindo os arcos sim e não; repita os passos anteriores para cada nó da árvore. Em cada comparação, é necessário saber quais são os índices que estão sendo comparados. Observe que sempre se deve analisar os índices originais, ou seja, não devem ser consideradas as trocas de índices ocorridas durante a execução do algoritmo. Tendo em vista os conceitos apresentados, conclui-se que o algoritmo Heapsort pode ser representado por uma árvore de decisão, já que é um dos algoritmos que realiza ordenação por comparação. Portanto, essa alternativa está errada. (B) CORRETA Considerando a explicação apresentada acima, se torna fácil concluir que é essa a alternativa correta. (C) ERRADA Seu desempenho no pior caso (igual ao do melhor ou médio caso) é O(n log n). Esse é o melhor resultado dentre os algoritmos baseados em comparações. Esse conhecimento já bastaria para concluir que essa alternativa está incorreta. As complexidades do algoritmo Quicksort são O(nlogn) para o melhor caso e O(n 2 ) para o pior caso. É sempre importante ter em mente que quanto mais eciente for a escolha do pivot, mais eciente será o desempenho da ordenação do algoritmo Quicksort. (D) ERRADA No pior caso, a ordenação por inserção apresenta complexidade igual a O(n 2 ), pois nesse caso são necessárias n(n 1)/2 (n 2 )/2 comparações. Esse cenário sempre ocorre quando a sequência de entrada está ordenada na ordem inversa à desejada. (E) ERRADA Também chamado de Mergesort, o algoritmo de ordenação por intercalação, um algoritmo recursivo, se utiliza da técnica dividir para conquistar. Sua idéia básica é que é mais fácil criar uma sequência ordenada a partir de duas outras também ordenadas. Para isso, ele divide a sequência original em pares de dados, as ordena, depois as agrupa em sequências de quatro elementos, e assim por diante, até ter toda a sequência dividida em apenas duas partes. Sua complexidade tanto para o pior quanto para o melhor caso é O(n log n). Seu ponto fraco é a baixa eciência na utilização de memória, complexidade espacial O(n). Contudo, existe uma variante desse algoritmo que realiza a ordenação no próprio vetor de entrada, ou seja, complexidade espacial O(1), mas a sua implementação é extremamente complicada. Página 16 de 27

18 7. Assuntos relacionados: Programação, Algoritmos de Ordenação, Banca: FCC Instituição: TRT 15a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2009 Questão: 21 São algoritmos de classicação por trocas apenas os métodos (a). SelectionSort e InsertionSort. (b). MergeSort e BubbleSort. (c). QuickSort e SelectionSort. (d). BubbleSort e QuickSort. (e). InsertionSort e MergeSort. Solução: Os algoritmos de ordenação são uns dos principais objetos de estudo na área de computação. Tais algoritmos tem por objetivo colocar os elementos de uma sequência em uma determinada ordem, sendo as mais utilizadas as ordens numéricas e alfabéticas. Uma das principais razões para se ordenar uma sequência é permitir que os seus elementos sejam acessados de forma mais eciente. Os métodos de ordenação mais conhecidos e utilizados são os seguintes: Ordenação por Troca BubbleSort (Método da Bolha) QuickSort (Método da Troca e Partição) Ordenação por Inserção InsertionSort (Método da Inserção Direta) BinaryInsertionSort (Método da Inserção Direta Binária) Ordenação por Seleção SelectionSort (Método da Seleção Direta) HeapSort (Método da Seleção em Árvore) Outros métodos MergeSort (Método da Intercalação) BucketSort (Método da Distribuição de Chave) CountingSort (Método da Ordenação por Contagem) Como podemos ver, dentre os métodos apresentados nas alternativas da questão, os únicos baseados na ordenação troca são o BubbleSort e o QuickSort. Portanto, a resposta da questão é a alternativa D. Tais algoritmos são classicados como de troca por que seus processos de ordenação se dão através de trocas entre pares de elementos do vetor. Embora o BubbleSort e o QuickSort se baseiem em trocas, seu funcionamento geral e o seu desempenho diferem substancialmente. O BubbleSort é, talvez, o método simples de ordenação, que funciona através de sucessivas trocas entre pares de elementos do vetor. O método realiza varreduras no vetor, trocando pares adjacentes de elementos sempre que o próximo elemento for menor que o anterior. Página 17 de 27

19 Após uma varredura, o maior elemento está corretamente posicionado no vetor e não precisa mais ser comparado. Dessa forma, após a i-ésima varredura, os i maiores elementos estão ordenados. A complexidade algorítmica de tempo do BubbleSort é O(n 2 ). O Quicksort adota uma estratégia conhecida como divisão e conquista. Por isso, usualmente, o Quicksort é implementado utilizando-se o paradigma recursivo. No primeiro passo do QuickSort, um elemento da lista é escolhido como pivô. Em seguida, a lista é rearranjada (por meio de trocas de posição entre os elementos) de modo que todos os elementos anteriores ao pivô sejam menores que ele, e todos os elementos posteriores ao pivô sejam maiores que ele. Ao m desse processo, que denomina-se particionamento, o pivô estará em sua posição nal e haverá duas sublistas não ordenadas. Em seguida, o algoritmo QuickSort é reaplicado a cada uma das sublistas, sendo a base da recursão as sublistas de tamanho zero ou um que, por denição, estão sempre ordenadas. O processo é nito, pois a cada iteração pelo menos um elemento é posto em sua posição nal e não será mais manipulado na iteração seguinte. A complexidade algorítmica de tempo do QuickSort é O(nlgn). A seguir, exemplos de implementação do bubble sort e do quicksort usando a linguagem de programação ruby. #BubbleSort em Ruby def bubblesort(list) return list if list.size <= 1 # already sorted loop do swapped = false 0.upto(list.size-2) do i if list[i] > list[i+1] list[i], list[i+1] = list[i+1], list[i] # swap values swapped = true end end break unless swapped end return list end #QuickSort em Ruby def quicksort (array) return array if array.size <= 1 pivot = array[0] return quicksort (array.select { y y < pivot }) + array.select { y y == pivot } + quicksort (array.select { y y > pivot }) end Página 18 de 27

20 8. Assuntos relacionados: Estruturas de Dados, Algoritmos de Ordenação, Banca: FCC Instituição: TRT 16a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2009 Questão: 35 São, respectivamente, um método de busca e um método de ordenação: (a). linear e por seleção direta. (b). por permutação e linear. (c). por seleção direta e por permutação. (d). por permutação e binária. (e). linear e binária. Solução: Os principais algoritmos de ordenação podem ser classicados em: ordenação por inserção, ordenação por troca, ordenação por seleção e ordenação por intercalação (permutação). Na ordenação por inserção, dividi-se o vetor em dois segmentos; o primeiro com os elementos já ordenados e o seguinte com o restante dos elementos ainda não ordenados. O primeiro elemento é colocado no primeiro segmento. Retira-se o primeiro elemento do segmento desordenado e insere-se no segmento ordenado em sua posição correta. Repete-se o processo para os demais elementos do vetor. A complexidade de tempo deste algoritmo é de O(n 2 ). Exemplos de algoritmos de ordenação por inserção são a inserção direta e o incremento decrescente (Shell sort). Na ordenação por troca, comparam-se dois elementos e trocam-se suas posições se o segundo elemento é menor do que o primeiro. A complexidade de tempo deste algoritmo é de O(n 2 ). Exemplos de algoritmos de ordenação por troca são o método da bolha (buble sort) e o método da troca e partição (quicksort) Na ordenação por seleção, seleciona-se o menor item do vetor. Em seguida, troca esse elemento com o item que está na primeira posição do vetor. Repete-se este procedimento para o n 1 elementos restantes. A complexidade de tempo deste algoritmo é de O(n 2 ). Exemplos de algoritmos de ordenação por seleção são a inserção direta e a inserção em árvore (heapsort). Na ordenação por intercalação, dividi-se o vetor em 2 sub-vetores de comprimento, aproximadamente n/2. Ordena recursivamente cada sub-vetor (dividindo-se novamente, quando possível). Faz o merge dos 2 sub-vetores ordenados para obter o vetor ordenado completo. A complexidade de tempo deste algoritmo é de O(nlog(n)). Exemplo de algoritmo de ordenação por intercalação é o mergesort. Os principais algoritmos de busca são classicados em linear e binário. O algoritmo de busca linear é a forma mais simples de se consultar um vetor em busca de um elemento. A busca é realizada da seguinte maneira: a partir do início do vetor, examina-se cada um de seus elementos até que o elemento desejado seja encontrado ou até que o nal do vetor seja atingido. A complexidade de tempo deste algoritmo é de O(n). Página 19 de 27

21 O algoritmo de busca binária é aplicado quando os elementos de um vetor estão ordenados. A busca é realizada por meio de sucessivas divisões do espaço de busca (divisão e conquista), comparando o elemento buscado (chave) com o elemento no meio do vetor. Se o elemento do meio do vetor for a chave, a busca termina com sucesso. Caso contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior do vetor. E nalmente, se o elemento do meio vier depois da chave, a busca continua na metade anterior do vetor. A complexidade de tempo deste algoritmo é de O(log 2 (n)). De acordo com as alternativas desta questão, um método de busca e um de ordenação, respectivamente, é o linear e por seleção direta. Logo, a alternativa correta é (A). Página 20 de 27

22 9. Assuntos relacionados: Programação, Algoritmos de Ordenação, Método de Ordenação da Bolha, Bubble Sort, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas Pleno - Processos Ano: 2006 Questão: 53 O seguinte algoritmo, chamado ordena, implementa um conhecido método de ordenação para listas seqüenciais: ordena (int vet[], int n) { int i, j, pos, aux; para ( i = 0; i < n - 1; i++ ){ pos = i; para ( j = i + 1; j < n; j++ ) se ( vet [pos] > vet [j] ) pos = j; se ( pos <> i ) { aux = vet[i]; vet[i] = vet[pos]; vet[pos] = aux; } } } Se o algoritmo for executado recebendo como parâmetros 5, 3, 1, 2, 4 e 5, quantas trocas são efetuadas e em que sentido é feita a ordenação (crescente ou decrescente)? (a). 4, crescente. (b). 6, crescente. (c). 9, crescente. (d). 4, decrescente. (e). 7, decrescente. Solução: O algoritimo de ordenação apresentado na questão é conhecido como bubblesort ou método da bolha. Entre os algoritmos de ordenação, o bubblesort é classicado como um algoritmo de ordenação por seleção e troca, pois o processo de ordenação baseia-se na comparação e na troca entre elementos em um vetor. O nome bubblesort tem origem em uma analogia feita com um tubo cheio de bolhas de diferentes tamanhos. Se o vetor de tamano N for imaginado na vertical, com elemento da posição N em cima e o elemento da posição 1 embaixo, durante cata etapa do processo de ordenação o menor elemento subirá até encontrar um elemento menor ainda, como se uma bolha subisse dentro de um tubo de acordo com sua densidade. Para analisar melhor o algoritmo, vamos adicionar numeros as linhas, para que possamos fazer referencia a cada um dos passos relevantes do algoritmo. Página 21 de 27

23 1 ordena (int vet[], int n) { 2 int i, j, pos, aux; 3 para ( i = 0; i < n - 1; i++ ){ 4 pos = i; 5 para ( j = i + 1; j < n; j++ ) 6 se ( vet [pos] > vet [j] ) 7 pos = j; 8 se ( pos <> i ) { 9 aux = vet[i]; 10 vet[i] = vet[pos]; 11 vet[pos] = aux; 12 } 13 } 14 } Na linha 4, é selecionado o elemento que será comparado na rodada corrente. Este processo é repetido para todos os elementos do vetor através do loop, implementado na linha 3. Já o loop implementado na linha 5, garante que o elemento corrente só seja comparado com os elementos que estão a sua frente no vetor. É na linha 6 que de fato ocorre a comparação entre os elementos. Por m, da linha 8 até a linha 12, ocorre o processo de troca de posição entre os elementos do vetor, de modo que o menor elemento que antes. Portanto, já podemos armar que o algoritmo irá executar colocar os elementos do vetor em ordem crescente. O que já elimina as alternativas D e E. Nos resta agora determinar o numero total de trocas que serão efetuadas quando o algoritmo for executado recebendo como parâmetros o vetor 5, 3, 1, 2, 4. Para isso, teremos que executar o algoritmo passo a passo, até que o vetor esteja completamente ordenado, momento a partir do qual não ocorreram mais trocas de posição entre os elementos. O passo a passo da execução é mostrado a seguir: Início :: vet = {5;3;1;2;4} i=0,j=4,pos=2 :: vet = {1;3;5;2;4} i=1,j=4,pos=3 :: vet = {1;2;5;3;4} i=2,j=4,pos=3 :: vet = {1;2;3;5;4} i=3,j=4,pos=4 :: vet = {1;2;3;4;5} Portanto, ocorreram 4 trocas no total, e o vetor será ordenado de forma crescente. Com isso, a resposta da questão é a alternativa A. Página 22 de 27

24 10. Assuntos relacionados: Algoritmos de Ordenação, Heapsort, Banca: ESAF Instituição: Secretaria do Tesouro Nacional (STN) Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de Sistemas de Informação Ano: 2008 Questão: 24 Considere a execução do algoritmo de ordenação Heap (ou Heap Sort), em sua versão emlocal (in-place), ao arranjo 13, 18, 10, 8, 11. Qual é a saída gerada, após a execução dos três (3) primeiros passos do algoritmo? (a). 13, 18, 10, 11, 8 (b). 18, 13, 10, 11, 8 (c). 8, 13, 10, 11, 18 (d). 13, 10, 11, 8, 18 (e). 18, 13, 10, 8, 11 Solução: O Heap Sort (ou Heapsort) é um algoritmo de ordenação que faz uso de uma estrutura de dados chamada heap. Ele ordena localmente (in-place), signicando que apenas um número constante de elementos do arranjo é armazenado fora do arranjo de entrada em qualquer instante. Em outras palavras, um algoritmo in-place pode até utilizar estruturas auxiliares de dados, mas a quantidade dessas estruturas deve ser xa, e não relacionada (dependente) ao tamanho da estrutura de entrada. A estrutura de dados heap é um objeto arranjo que pode ser visto como uma árvore binária praticamente completa, sendo que cada nó dessa árvore corresponde a um elemento do arranjo que armazena o valor no nó. Um arranjo A, com uma quantidade de elementos denida por comprimento[a], tem por raiz o elemento A[1]. Dado o índice i de um nó, o índice de seu pai PARENT(i), do lho da esquerda LEFT(i) e do lho da direita RIGHT(i) podem ser calculados de modo simples. Existem dois tipos de heaps binários: heaps máximos e heaps mínimos. Os primeiros satisfazem a seguinte propriedade: A[PARENT(i)] A[i] isto é, o valor de um nó é no máximo o valor de seu pai. Desse modo, o maior elemento em um heap máximo é armazenado na raiz, e a subárvore que tem raiz em um nó contém valores menores que o próprio nó. Um heap mínimo, organizado de forma oposta, satisfaz a seguinte propriedade: A[PARENT(i)] A[i] sendo que sua raiz contém o menor elemento do arranjo. A Figura 2 ilustra uma estrutura heap máximo de 10 elementos para o arranjo A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Página 23 de 27

25 Figura 2: estrutura heap máximo de 10 elementos para o arranjo A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Quando um novo elemento é adicionado ao arranjo, é necessário manter a propriedade de heap, o que pode ser feito com as sub-rotinas MAX-HEAPFY e MIN-HEAPFY. Para o caso de um heap máximo, tem-se: MAX-HEAPFY(A, i) l LEFT(i) R RIGHT(i) if l tamanho-do-heap[a] e A[l] > A[i] then maior l else maior i if r tamanho-do-heap[a] e A[r] > A[maior] then maior r if maior i then trocar A[i] A[maior] MAX-HEAPFY(A, maior) Quando MAX-HEAPFY é chamada, supõe-se que as árvores binárias com raízes em LEFT(i) e RIGHT(i) são heaps máximos, mas que A[i] pode ser menor que seus lhos, violando assim a propriedade de heap máximo. A função de MAX-HEAPFY é possibilitar que o valor em A[i] ocupe o lugar adequado na estrutura, de tal forma que a subárvore com raiz no índice i se torne um heap máximo. É possível utilizar o procedimento MAX-HEAPFY para transformar um arranjo A[1..n], com n=comprimento[a], em um heap máximo. O procedimento BUILD-MAX-HEAP efetua tal operação: BUILD-MAX-HEAP(A) tamanho-do-heap[a] comprimento[a] for i comprimento[a]/2 downto 1 do MAX-HEAPFY(A, i) A Figura 3 ilustra o uso do procedimento BUILD-MAX-HEAP para o arranjo A=[4, 1, 3, 2, 16, 9, 10, 14, 8, 7]. Página 24 de 27

26 Figura 3: uso do procedimento BUILD-MAX-HEAP para o arranjo A=[4, 1, 3, 2, 16, 9, 10, 14, 8, 7]. Observa-se que existe uma tendência de os valores do arranjo A carem ordenados após a execução do procedimento. Mas não há tal obrigatoriedade, pois a propriedade de heap máximo não tem relação com ordenação. Entretanto, é possível utilizar os dois procedimentos previamente apresentados para ordenar o arranjo A. E é essa a função do algoritmo Heap Sort. HEAPSORT(A) BUILD-MAXHEAP(A) for i comprimento[a] downto 2 do trocar A[1] A[i] tamanho-do-heap[a] tamanho-do-heap[a] 1 MAX-HEAPFY(A, 1) Para os dados apresentados na questão, A = [13, 18, 10, 8, 11], tem-se a sequência de processamento apresentada na Figura 4. Página 25 de 27

27 Figura 4: sequência de processamento do algoritmo de ordenação Heap ao arranjo 13, 18, 10, 8, 11. Infelizmente, a questão não especica o signicado de passo, de sorte que ca difícil para o candidato denir saídas. Questão prejudicada. Página 26 de 27

28 Questão Resposta 1 E 2 B 3 C 4 A 5 B 6 B 7 D 8 A 9 A 10 E Página 27 de 27 Handbook de TI Além do Gabarito

29 Índice Remissivo Árvore B, 8 Árvore Binária de Busca, 12 Árvores Binárias, 12 Algoritmos, 4, 6 Algoritmos de Ordenação, 15, 17, 19, 21, 23 Bubble Sort, 21 Busca Binária, 10 Busca Sequencial, 10 Complexidade de Algoritmos, 4, 6 Estruturas de Dados, 12, 19 Heapsort, 15, 23 Método de Ordenação da Bolha, 21 Métodos de Busca, 8 Ordenação por Árvore de Decisão, 15 Ordenação por Comparação, 15 Ordenação por Inserção, 15 Ordenação por Intercalação, 15 Pesquisa Binária, 8 Programação, 17, 21 Quicksort, 15 28

Métodos de Ordenação Parte I

Métodos de Ordenação Parte I Estrutura de Dados II Métodos de Ordenação Parte I Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais da Prof a Ana Eliza e Prof. Robson Lins Rearranjar

Leia mais

Informática Parte 17 Prof. Márcio Hunecke

Informática Parte 17 Prof. Márcio Hunecke Escriturário Informática Parte 17 Prof. Márcio Hunecke Informática BUSCA SEQUENCIAL E BUSCA BINÁRIA SOBRE ARRAYS Busca sequencial em vetores não ordenados O termo busca sequencial (ou busca linear) expressa

Leia mais

ALGORITMOS DE ORDENAÇÃO

ALGORITMOS DE ORDENAÇÃO ALGORITMOS DE ORDENAÇÃO Prof. André Backes Conceitos básicos 2 Ordenação Ato de colocar um conjunto de dados em uma determinada ordem predefinida Fora de ordem 5, 2, 1, 3, 4 Ordenado 1, 2, 3, 4, 5 OU 5,

Leia mais

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

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

Leia mais

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

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

Leia mais

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2 MÉTODOS DE ORDENAÇÃO Introdução à Programação SI2 2 Conteúdo Conceitos básicos Classificação por troca Classificação por inserção Classificação por seleção 3 Conceitos Básicos Ordenar: processo de rearranjar

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca

Leia mais

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

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

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Heapsort Conteúdo Introdução A estrutura de dados heap Definição Manutenção da propriedade de heap A construção de um heap O algoritmo heapsort Exercícios Referências Introdução Heapsort

Leia mais

Ordenação de Dados. Ordenação de Dados

Ordenação de Dados. Ordenação de Dados UFSC-CTC-INE INE38 - Estruturas de Dados Ordenação de Dados Prof. Ronaldo S. Mello 00/ Ordenação de Dados Processo bastante utilizado na computação de uma estrutura de dados Dados ordenados garantem uma

Leia mais

Métodos de Ordenação Parte 3

Métodos de Ordenação Parte 3 Estrutura de Dados II Métodos de Ordenação Parte 3 Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais do Prof. Robson Lins Classificação em Memória Primária

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão

Leia mais

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1 MÉTODOS DE ORDENAÇÃO Introdução à Programação SI1 2 Conteúdo Conceitos básicos Classificação por troca Classificação por inserção Classificação por seleção 3 Conceitos Básicos Ordenar: processo de rearranjar

Leia mais

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo Arquivos Sequenciais Estruturas de Dados II Vanessa Braganholo Arquivos Sequenciais } Pq arquivos sequenciais? Relembrando } Relembrando: uma tabela ou arquivo é um conjunto de registros que possuem a

Leia mais

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Algoritmos de busca Basicamente podem ser citadas duas estratégias para procurar (ou buscar) algo em uma coleção de dados: Busca

Leia mais

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Heapsort Prof. Flávio Rogério Uber Autor: Prof. Marco Aurélio Lopes Barbosa (UEM/DIN) Conteúdo Introdução A estrutura de dados heap Definição Manutenção da propriedade de heap A construção

Leia mais

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 032/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

Leia mais

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome

Leia mais

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim Algoritmos de Ordenação e Busca e sua Análise de Complexidade Alneu de Andrade Lopes Rosane Minghim Introdução Busca seqüencial Busca binária Notação O(f(n)) Hierarquia de funções Selection sort Insertion

Leia mais

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática Estrutura de Dados Algoritmos de Ordenação Prof. Othon M. N. Batista Mestre em Informática Roteiro Introdução Ordenação por Inserção Insertion Sort Ordenação por Seleção Selection Sort Ordenação por Bolha

Leia mais

Algoritmos de ordenação Heapsort

Algoritmos de ordenação Heapsort Algoritmos de ordenação Heapsort Sumário Introdução A estrutura de dados heap Definição Manutenção da propriedade de heap A construção de um heap O algoritmo heapsort Introdução Características do heapsort

Leia mais

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

HeapSort. Estrutura de Dados II Jairo Francisco de Souza HeapSort Estrutura de Dados II Jairo Francisco de Souza HeapSort Algoritmo criado por John Williams (1964) Complexidade O(NlogN) no pior e médio caso Mesmo tendo a mesma complexidade no caso médio que

Leia mais

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec Universidade Federal do ABC Avaliação: Prova 02 Disciplina: BC1424 - Algoritmos e Estruturas de Dados I Turma: Noturno Professor: Jesús P. Mena-Chalco Data: 03/05/2016 Nome completo: RA: Instruções para

Leia mais

Métodos de Classificação

Métodos de Classificação Métodos de Classificação 261 Objetivos e Caracterizações O acesso a um conjunto de dados é facilitado se o mesmo está armazenado conforme uma certa ordem, baseada num critério conhecido. O objetivo básico

Leia mais

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Ordenação por bolha (bubble sort)

Leia mais

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2; heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i0 && x[f]

Leia mais

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

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

Leia mais

Estruturas de Dados Algoritmos de Ordenação

Estruturas de Dados Algoritmos de Ordenação Estruturas de Dados Prof. Eduardo Alchieri (introdução) Considere uma sequência arbitrária S = {s1, s2, s3,...sn} composta por n 0 elementos retirados do conjunto universo U O objetivo da ordenação é arrumar

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes

Leia mais

Análise empírica de algoritmos de ordenação

Análise empírica de algoritmos de ordenação Análise empírica de algoritmos de ordenação Mario E. Matiusso Jr. (11028407) Bacharelado em Ciências da Computação Universidade Federal do ABC (UFABC) Santo André, SP Brasil mario3001[a]ig.com.br Resumo:

Leia mais

Análise de Algoritmos Algoritmos de Ordenação

Análise de Algoritmos Algoritmos de Ordenação Análise de Algoritmos Algoritmos de Ordenação Nelson Cruz Sampaio Neto nelsonneto@ufpa.br Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação 5 de abril de 2016

Leia mais

Métodos de Ordenação

Métodos de Ordenação Métodos de Ordenação Conceitos básicos sobre ordenação Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem específica. Objetivo da ordenação: facilitar a recuperação posterior

Leia mais

Extra- Algoritmos de Ordenação

Extra- Algoritmos de Ordenação Extra- Algoritmos de Ordenação 1 Introdução Ordenar: processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. A ordenação visa facilitar a recuperação posterior de itens do

Leia mais

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Algoritmos de Ordenação em Tempo Linear IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/38 Algoritmos de Ordenação em Tempo Linear Limite Assintótico

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação Introdução à Ciência da Computação Prof. Edison Ishikawa Objetivo Apresentar diferentes algoritmos de ordenação de dados Mostrar como analisar os algoritmos em termos de tempo de

Leia mais

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Direta Prof. Gustavo Callou gustavo.callou@ufrpe.br gcallou@gmail.com Classificação por Inserção Métodos de Classificação em Memória

Leia mais

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira Lista de exercícios sobre contagem de operações Prof. João B. Oliveira 1. metodo m ( Vetor V ) int i, res = 0; para i de 1 a V.size res = res + V[i]; return res; Soma de elementos de um vetor, O( ). 2.

Leia mais

Algoritmos de Ordenação: QuickSort

Algoritmos de Ordenação: QuickSort Algoritmos de Ordenação: QuickSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

Análise de Algoritmos Estrutura de Dados II

Análise de Algoritmos Estrutura de Dados II Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Análise de Algoritmos Estrutura de Dados II COM10078 - Estrutura de Dados II Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br

Leia mais

Bubble Sort. Tempo total O(n 2 )

Bubble Sort. Tempo total O(n 2 ) Bubble Sort Considere uma seqüência de n elementos que se deseja ordenar. O método da bolha resolve esse problema através de várias passagens sobre a seqüência Não é um algoritmo eficiente, é estudado

Leia mais

5. Algoritmos de Ordenação

5. Algoritmos de Ordenação Introdução à Computação II 5952011 5. Algoritmos de Ordenação Prof. Renato Tinós Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 5.1. Ordenação por Inserção 5.2. Ordenação por Seleção

Leia mais

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler Aula 3 Listas Lineares Sequenciais Ordenadas prof Leticia Winkler 1 Listas Lineares Sequenciais Ordenadas Elementos da lista estão dispostos num vetor (contíguos na memória) e ordenado de acordo com alguma

Leia mais

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA George Gomes Cabral MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA Métodos Elementares Classificação por Trocas Método da Bolha Bubblesort Método de Partição

Leia mais

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras. Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação   IECE - ITA ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA MÉTODOS MAIS EFICIENTES QUE O(N 2 ) Método Quicksort Método

Leia mais

Métodos de Ordenação Parte 4

Métodos de Ordenação Parte 4 Métodos de Ordenação Parte 4 Introdução à Ciência de Computação II Prof. Diego Raphael Amancio Baseado no material do Prof. Rudinei Goularte e Prof. Thiago A. S. Pardo 1 Ordenação por Intercalação Revisando...

Leia mais

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores MC102 - Algoritmos e programação de computadores Aula 16: Busca e Ordenação em vetores Busca Dada uma coleção de n elementos, pretende-se saber se um determinado elemento valor está presente nessa coleção.

Leia mais

Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção.

Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção. Heapsort Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção. Selecione o maior (ou menor) item do vetor e a seguir troque-o com o item que

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Ordenação é uma das operações mais usuais em listas lineares Consequentemente, uma implementação ineficiente pode afetar diretamente o desempenho geral da aplicação! Por ser um problema bem estudado, existem

Leia mais

BCC202 - Estrutura de Dados I

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

Leia mais

Métodos de ordenação. Bubble sort:

Métodos de ordenação. Bubble sort: Métodos de ordenação Bubble sort: O método de ordenação por bubble sort ou conhecido como bolha consiste em compara dados armazenados em um vetor de tamanho qualquer, comparando cada elemento de uma posição

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 09 Algoritmos de Ordenação Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída: conjunto de itens

Leia mais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013 Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void

Leia mais

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então

Leia mais

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 023/2018 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

Leia mais

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 053/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

Leia mais

INF111 Programação II Aulas 11, 12, 13 Ordenação

INF111 Programação II Aulas 11, 12, 13 Ordenação INF Programação II Aulas,, Ordenação Departamento de Informática UFV Ordenação A ordenação é o processo de organizar um conunto (vetor) de n obetos ou registros segundo uma determinada ordem crescente

Leia mais

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) 5. Análise de Complexidade de Algoritmos João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog 2-2006/2007 Introdução Algoritmo: conjunto

Leia mais

Algoritmos de ordenação Quicksort

Algoritmos de ordenação Quicksort Algoritmos de ordenação Quicksort Sumário Introdução Descrição do quicksort Desempenho do quicksort Pior caso Melhor caso Particionamento balanceado Versão aleatória do quicksort Análise do quicksort Pior

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter

Leia mais

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6 Análise e Síntese de Algoritmos Revisão CLRS, Cap. 4, 6 Contexto Revisão Algoritmos e complexidade Notação Fundamentos: somatórios, logaritmos, etc. Exemplos de algoritmos Ordenação Procura Selecção 2007/2008

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Algoritmos Divisão e Conquista Construção incremental Resolver o problema para um sub-conjunto dos elementos de entrada; Então, adicionar

Leia mais

AED2 - Aula 11 Problema da separação e quicksort

AED2 - Aula 11 Problema da separação e quicksort AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos

Leia mais

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Hebert Coelho e Nádia Félix Ordenação É a operação de rearranjar os dados em uma determinada ordem. Problema da ordenação - Definição formal

Leia mais

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa Ordenação Externa Ordenação Externa Estrutura 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

Leia mais

Ordenação e Pesquisa

Ordenação e Pesquisa Ordenação e Pesquisa Luís Lopes DCC-FCUP Estruturas de Dados Pesquisa de Informação A pesquisa eficiente de informação é extremamente relevante, seja: num catálogo indexado por uma relação de ordem, e.g.

Leia mais

Ordenação em Memória Primária Estrutura de Dados II

Ordenação em Memória Primária Estrutura de Dados II - Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Ordenação em Memória Primária Estrutura de Dados II Estrutura de Dados II COM10078-2017-I Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br

Leia mais

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Ordenação: HeapSort. Prof. Túlio Toffolo   BCC202 Aula 17 Algoritmos e Estruturas de Dados I 2014-01 Aula 16 Fila de Prioridade / HeapSort Adaptado por Reinaldo Fortes para o curso de 2014-01 Arquivo original: Aula 17: HeapSort Ordenação: HeapSort Prof. Túlio Toffolo http://www.toffolo.com.br

Leia mais

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Aula 13: Ordenação - Heapsort Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de abandonar

Leia mais

Estruturas de Dados II

Estruturas de Dados II Estruturas de Dados II Rodrigo Porfírio da Silva Sacchi rodrigosacchi@ufgd.edu.br 3410-2086 Aula 2: Árvores http://www.do.ufgd.edu.br/rodrigosacchi Árvores Definição: Árvores Uma árvore T é um conjunto

Leia mais

Ordenação por Intercalação Métodos de Ordenação Parte 4

Ordenação por Intercalação Métodos de Ordenação Parte 4 Ordenação por Intercalação Métodos de Ordenação Parte 4 SCC-601 Introdução à Ciência da Computação II Rosane Minghim 2010 Revisando... Também chamado merge-sort Idéia básica: dividir para conquistar Um

Leia mais

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Ordenação: MergeSort. Prof. Túlio Toffolo  BCC202 Aula 14 Algoritmos e Estruturas de Dados I Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande

Leia mais

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort. Tópico 5 Algoritmos de Ordenação Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort. 1 Problema Computacional: Ordenação Problema computacional que surge em diversas situações. Definição:

Leia mais

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ] USP - ICMC - SSC SSC 0300-2o. Semestre 2013 Disciplina de [ Eng. Elétrica / Automação ] Prof. Dr. Fernando Santos Osório / PAE: Rafael Klaser (LRM / ICMC) LRM - Laboratório de Robótica Móvel do ICMC /

Leia mais

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 3.1 - Definição 3.2 - Dividir para conquistar 3.3 - Problema da

Leia mais

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática

Leia mais

Ordenação Interna. Prof. Jonas Potros

Ordenação Interna. Prof. Jonas Potros Ordenação Interna Prof. Jonas Potros Heap A estrutura de dados heap é um objeto arranjo que pode ser visto como uma árvore binária completa. A árvore está completamente preenchida em todos os níveis, exceto

Leia mais

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR HeapSort Filas de Prioridade Heap David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de

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

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo tmelo@uea.edu.br www.tiagodemelo.info Observações O conteúdo dessa aula é parcialmente proveniente do Capítulo 11 do livro Fundamentals of

Leia mais

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M. Quick Sort Considerações Sobre Algoritmos de Ordenação Estagiário PAE: Jesimar da S. Arantes Professor: Claudio F. M. Toledo 27 de Setembro de 2017 Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick

Leia mais

Carlos Eduardo Batista. Centro de Informática - UFPB

Carlos Eduardo Batista. Centro de Informática - UFPB Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Métodos de pesquisa e classificação de dados (continuação) Estruturas de Dados 2 Algoritmo de busca Recebe como argumento

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA CAP. 5. TÉCNICAS DE ORDENAÇÃO 5.1. Introdução 5.2. Métodos

Leia mais

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia Introdução à Análise de Algoritmos Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia Aula de hoje Nesta aula veremos: Sobre a disciplina Exemplo: ordenação Sobre a disciplina

Leia mais

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. 1.2 Outros 1. Projete

Leia mais

INF 1010 Estruturas de Dados Avançadas

INF 1010 Estruturas de Dados Avançadas INF 1010 Estruturas de Dados Avançadas Complexidade de Algoritmos 2012 DI, PUC-Rio Estruturas de Dados Avançadas 2012.2 1 Introdução Complexidade computacional Termo criado por Hartmanis e Stearns (1965)

Leia mais

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização

Leia mais

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI O QUE SÃO ALGORITMOS DE ORDENAÇÃO? São algoritmos que organizam

Leia mais

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 01 Complexidade de Algoritmos Edirlei Soares de Lima O que é um algoritmo? Um conjunto de instruções executáveis para resolver um problema (são

Leia mais

2. Ordenação por Seleção

2. Ordenação por Seleção 1 Algoritmos de Ordenação Simples (SelectionSort, InsertionSort, BubbleSort) 1. Introdução Objetivo: Determinar a seqüência ordenada dos elementos de um vetor numérico. Algumas considerações: O espaço

Leia mais

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)

Leia mais

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2 TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2 Dados de identificação do Acadêmico: Nome: Login: CA: Cidade:

Leia mais

Ordenação por Seleção Métodos de Ordenação Parte 3

Ordenação por Seleção Métodos de Ordenação Parte 3 Ordenação por Seleção Métodos de Ordenação Parte SCC-6 Introdução à Ciência da Computação II Rosane Minghim Idéia básica: os elementos são selecionados e dispostos em suas posições corretas Seleção direta

Leia mais

Métodos de Ordenação

Métodos de Ordenação Métodos de Ordenação Parte 3 SCC-601 Introdução à Ciência da Computação II Rosane Minghim 2010/2011 Baseado no material dos Professores Rudinei Goularte e Thiago Pardo 1 Ordenação por Seleção Idéia básica:

Leia mais

Complexidade de algoritmos Notação Big-O

Complexidade de algoritmos Notação Big-O Complexidade de algoritmos Notação Big-O Prof. Byron Leite Prof. Tiago Massoni Engenharia da Computação Poli - UPE Motivação O projeto de algoritmos é influenciado pelo estudo de seus comportamentos Problema

Leia mais