algoritmos -...

29
Questões comentadas Algoritmos para concursos

Upload: haduong

Post on 10-Nov-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Questões comentadas

Algoritmospara concursos

Page 2: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

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 con-junto de regras que nos permita criar novos algoritmos e, portanto, trata-se de umas maioresdiculdades dos iniciantes em programação.

O estudo de algoritmos é muito cobrado nos concursos na área de tecnologia da informaçãoe, por isso, o Grupo Handbook de TI preparou este volume, que traz uma série de questões co-mentadas sobre Algoritmos para você se preparar ainda melhor para os certames de seu interesse.

Bons estudos,

Grupo Handbook de TI

Página 1 de 27www.handbookdeti.com.br

Page 3: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Direitos Autorais

Este material é registrado no Escritório de Direitos Autorais (EDA) da Fundação BibliotecaNacional. Todos os direitos autorais referentes a esta obra são reservados exclusivamente aosseus autores.

Os autores deste material não proíbem seu compartilhamento entre amigos e colegas próxi-mos de estudo. Contudo, a reprodução, parcial ou integral, e a disseminação deste material deforma indiscriminada através de qualquer meio, inclusive na Internet, extrapolam os limites dacolaboração. Essa prática desincentiva o lançamento de novos produtos e enfraquece a comuni-dade concurseira Handbook de TI.

A série Handbook de Questões de TI Comentadas para Concursos Além do Gabarito é umaprodução independente e contamos com você para mantê-la sempre viva.

Grupo Handbook de TI

Página 2 de 27www.handbookdeti.com.br

Page 4: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Canais de Comunicação

O Grupo Handbook de TI disponibiliza diversos canais de comunicação para os concurseirosde TI.

Loja Handbook de TI

Acesse a nossa loja virtual em http://www.handbookdeti.com.br

Serviço de Atendimento

Comunique-se diretamente conosco através do e-mail [email protected]

Twitter do Handbook de TI

Acompanhe de perto promoções e lançamentos de produtos pelo nosso Twitter http://twitter.com/handbookdeti

Página 3 de 27www.handbookdeti.com.br

Page 5: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

1. Assuntos relacionados: Algoritmos, Complexidade de Algoritmos,Banca: CesgranrioInstituição: PetrobrasCargo: Analista de Sistemas Pleno - ProcessosAno: 2006Questã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 desua execução.

(b). Uma função f(n) domina assintoticamente g(n), se existem duas constantes posi-tivas c e n0, tais que, para n ≥ n0, temos que |g(n)| ≥ c|f(n)|.

(c). A função f(5log2N) é O2(N).

(d). A função f(5N3 + 2N2) é 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çode um algoritmo em termos do tamanho do problema. Tal estimativa resulta em uma funçãodo 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 deacordo 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 serleituras de disco, comparações, trocas etc. Em seguida, é determinada uma expressão querepresenta essa quantidade.

O que se considera no estudo de complexidade de algoritmos é o seu comportamento as-sintótico, ou seja, uma tendência a um limite à medida do crescimento do tamanho doproblema. Vamos elucidar as notações geralmente utilizadas para esse tipo de avaliaçãoanalítica.

Diz-se que uma função g(n) é O(f(n)), notando-se g = O(f(n)) se existir alguma cons-tante c > 0 e um inteiro n0, tal que n > n0 implica g(n) ≤ c x f(n). Diz-se também queg(n) tem taxa de crescimento proporcional a f(n), é de ordem máxima f(n), de comple-xidade f(n) ou magnitude f(n), simplesmente que é O de f(n). A análise O é conhecidatambém como a análise do pior caso.

Dadas funções assintoticamente não-negativas g e f , dizemos que g está na ordem Ω def , e escrevemos g = Ω(f(n)), se existir alguma constante c > 0 e um inteiro n0 tal quen > n0 implica g(n) ≥ c x f(n). É fácil notar que f = O(g) se e somente se g = Ω(f). Aaná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 utili-zadas para representar limites assintóticos não justos, as denições anteriores mudam dealgum 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 27www.handbookdeti.com.br

Page 6: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

notações, vamos analisar as alternativas de uma a uma.

A alternativa (A) está claramente errada, já que a notação Ω é utilizada para denotar aanálise do melhor caso e não do pior caso.

Também está equivocada a alternativa (B), visto que quando dizemos que f(n) dominaassintoticamente g(n) dizemos também que g(n) = O(f(n)) e a denição está ligeiramenteerrada visto que o correto, neste caso, é |g(n)| ≤ c x |f(n)|.

A notação O2 não faz sentido em complexidade de algoritmos, logo, a alternativa (C) podeser invalidada.

O termo dominante em uma função polinomial pode ser utilizado para determinar a análisede pior caso de um algoritmo. Na função f(5N3 + 2N2), podemos dizer que é O(N3) tam-bém sendo aceito que f é O(5N3), por exemplo, mas, com certeza, f não é O(N), visto queN 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 superiorjusto das funções. E se as funções f e g tem o limite superior justo entre elas de maneiraequivalente, podemos dizer que f() é O(g()) e g() é O(f())

Página 5 de 27www.handbookdeti.com.br

Page 7: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

2. Assuntos relacionados: Algoritmos, Complexidade de Algoritmos,Banca: CesgranrioInstituição: PetrobrasCargo: Analista de Sistemas Pleno - ProcessosAno: 2006Questão: 56

Considere os algoritmos a seguir e as suas correspondentes complexidades indicadas. Estãocorretas 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 orde-naçã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 emtermos da quantidade de operações relevantes realizadas pelo algoritmo até que ele alcanceo seu resultado nal. Exemplos de operações que podem ser consideradas relevantes paraum algoritmo são as operações de comparação, operações aritméticas, operações de movi-mentação de dados etc.

A complexidade algorítmica é então expressa em função do tamanho do problema. Emum problema que envolva a ordenação de um vetor, por exemplo, o tamanho do problemaseria 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 avalia-dor descobrir qual será a complexidade do algoritmo quando for submetido a uma entradade dados que o faça operar em seu pior caso, ou seja, que o faça executar o maior númerode 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 executarN operações, diz-se que sua complexidade é O(N). Já se, em seu pior caso, ele executa umnúmero de operações constate, diz que ele possui complexidade O(1).

Agora, vamos analisar cada uma das correspondências algoritmo/complexidade e vericarquais delas estão corretas.

(I) CORRETA

Página 6 de 27www.handbookdeti.com.br

Page 8: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Uma busca sequencial é aquela em que o vetor é percorrido a partir de uma extremidade nosentido da outra até que o elemento procurado seja encontrado. Imaginando o caso em que oelemento procurado seja o último elemento a ser avaliado em um vetor de tamanho N, paraque 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, lo-calizado no centro do vetor. Caso o elemento procurado seja menor que o pivot, somente osub 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, onúmero máximo de divisões que poderão acontecer até que o elemento procurado seja eleitocomo pivot é o valor do logaritmo de N na base 2. Portanto, o pior caso da busca binária éO(log2N). (III) ERRADA

Em processo de busca por um elemento em uma árvore binária, a particionamento do escopode 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 oramo à 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 co-nectados, pode acontecer de o processo de busca ter que percorrer todo a ramicação, desdea raiz até a folha, passando por todos os nós internos. Esse seria, portanto, o pior casoda 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 mostradoque 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 poderiapossuir 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á serinserido para que se mantenha a ordenação, será necessário antes realizar um processo debusca que, se implementado da forma mais eciente possível (no caso, através de uma buscabinária), teria complexidade O(log2N).

Portanto, como apenas as armativas I, II e IV estão corretas, a resposta da questão éa alternativa B.

Página 7 de 27www.handbookdeti.com.br

Page 9: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

3. Assuntos relacionados: Métodos de Busca, Pesquisa Binária, Árvore B,Banca: CESGRANRIOInstituição: BNDESCargo: Analista de SuporteAno: 2008Questão: 50

Os dados de uma agenda contendo nome, telefone e endereço de pessoas estão organizadosem 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 ordenadospor nome. Assumindo que o tamanho do campo endereço é variável e que D pode terarquivos (pré-existentes) de índices que se referenciam ao arquivo de dados, e supondo quenão possui cache, qual é a estratégia que realizará, em média, menos operações de I/O paraconsultar 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á existeordenação por nome.

(b). Pesquisa sobre o arquivo de índices indexados pelo nome, implementando umalgoritmo de busca em uma árvore B-Tree balanceada.

(c). Pesquisa seqüencial sobre um arquivo de índices indexado pelas letras do alfabeto eposterior leitura sequencial sobre o arquivo de dados, nos quais cada índice apontapara o endereço do início da respectiva letra na agenda.

(d). Pesquisa binária sobre um arquivo de índices indexado pelo nome, para posterioracesso ao arquivo de dados.

(e). Leitura seqüencial diretamente sobre o arquivo de dados, sem a utilização de ar-quivos auxiliares de índice.

Solução:

(A) ERRADA

Para que fosse possível pesquisa binária diretamente sobre arquivo de dados, como seusregistros tem tamanhos variáveis, seria necessário incluir informações que serviriam de pon-teiros em cada registro. O que não é possível, já que o arquivo de dados permite apenasleitura. Portanto, a alternativa A não é possível.

(B) ERRADA

De maneira geral, a abordagem por B-Tree é uma boa opção. Entretanto, é importanteobservar que para recuperar cada registro é necessária uma consulta à B-Tree e posteri-ormente ao arquivo de dados. Tal implementação utilizaria um número de operações daordem (n/26)/*log(n), onde n é o número total de registros. Analisaremos as outras opçõesadiante. 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 aletra do alfabeto correspondente (mesmo que de maneira sequencial) no arquivo de índicese depois percorrer sequencialmente o arquivo de dados. A ordem neste caso é 13+n/26. Ouseja, mais rápido que o caso descrito na alternativa B.

Página 8 de 27www.handbookdeti.com.br

Page 10: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

(D) ERRADA

O caso e o custo são muito parecidos com aqueles explicitados na alternativa B e, comoconsequê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 registrocujo nome começa com a letra especicada e depois percorrer todos os elementos que aten-dam 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 27www.handbookdeti.com.br

Page 11: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

4. Assuntos relacionados: Busca Binária, Busca Sequencial,Banca: FCCInstituição: MPUCargo: Analista de Desenvolvimento de SistemasAno: 2007Questão: 36

Considere:

I. Os algoritmos de busca binária e de busca seqüencial executam processamento repeti-tivo.

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 faseanterior.

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 valorem particular em uma lista. A pesquisa ou busca binária (em inglês binary search ou binarychop) é um algoritmo de busca que parte do pressuposto de que os elementos da lista já estãoordenados. O algoritmo de busca binária é um exemplo clássico de dividir-e-conquistar e suaideia principal consiste em analisar o elemento do meio da lista para inferir se o elemento queestá sendo procurado está depois ou antes desse elemento e, assim sucessivamente, dividir oespaço de busca por dois.

Já o algoritmo de busca sequencial, ou busca linear como também é conhecido, percorrea lista, elemento por elemento, vericando se o elemento desejado está presente. Note quenão é preciso no algoritmo de busca sequencial que a lista esteja ordenada.

Ambos algoritmos necessitam de explorar o processamento repetitivo, que em linguagemde 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 termoprocessamento repetitivo é usualmente utilizado para denotar o uso repetitivo das opera-ções de computador, o que é o nosso caso, já que esses algoritmos utilizarão repetitivamenteoperações de comparação entre dois valores.

(II) Está errada, pois, mesmo que ambos algoritmos possam ser implementados de formarecursiva, ambos também podem ser implementados com o uso de laços iterativos. Logo, a

Página 10 de 27www.handbookdeti.com.br

Page 12: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

técnica de recursão não é necessária e as ideias desses algoritmos não se baseiam na maneirade como eles serão implementados e, sim, de que maneira os dados da lista serão tratados. Aalternativa 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 algoritmode 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, quenã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 27www.handbookdeti.com.br

Page 13: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

5. Assuntos relacionados: Estruturas de Dados, Árvores Binárias, Árvore Binária de Busca,

Banca: CesgranrioInstituição: PetrobrasCargo: Analista de Sistemas Pleno - ProcessosAno: 2006Questã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, aexecução dos seguintes percursos sobre a estrutura após a inserção das chaves.

I - Um percurso em pré-ordem seria: Ada, Bia, Cris, Lia, Ana, Mel, Rosa, Rita, Val,Sol, Lua, Lina

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 seguintescaracterísticas:

• não ter elemento algum (uma árvore vazia);

• ter um elemento distinto (nó raiz da árvore), com dois ponteiros para estruturas dis-tintas, 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ãochamados 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 cha-ves que são valores e, por padrão, os nós à esquerda formam uma sub-árvore com valoresinferiores ao do nó raiz e os nós à direita formam uma sub-árvore com valores superiores aodo nó da raiz. Assim, as chaves em uma árvore binária de busca são sempre armazenadassatisfazendo à 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 esquerdade 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 27www.handbookdeti.com.br

Page 14: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

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, detrês formas distintas: percurso de árvore em ordem (ou em ordem simétrica), percurso de ár-vore 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 emlargura (ou percurso em nível).

No percurso de árvore em ordem simétrica, a chave da raiz de uma sub-árvore é impressaentre os valores de sua sub-árvore esquerda e aqueles de sua sub-árvore direita. Semelhan-temente, o percurso de árvore de pré-ordem imprime a raiz antes dos valores em uma ououtra sub-árvore, e o percurso de árvore de pós-ordem imprime a raiz depois dos valorescontidos em suas sub-árvores. Esses três tipos de percurso, denidos recursivamente, sãoconsiderados 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 visitadostodos 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á inicialmentevazia, ele é considerado a raiz da árvore principal. O valor seguinte, Ana, é considerado me-nor do que o anterior (critério: ordem alfabética) e, portanto, deverá ser inserido à esquerdado 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 seuslhos) é Lina, Ana, Ada, Lia, Cris, Bia, Lua, Sol, Rita, Mel, Rosa, Val. Observa-se que araiz 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 pri-meiramente os lhos da esquerda e, em seguida, os lhos da direita. A outra opção para umpercurso 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 27www.handbookdeti.com.br

Page 15: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Um percurso em ordem simétrica (isto é, um percurso no qual a raiz aparece entre seuslhos) é Ada, Ana, Bia, Cris, Lia, Lina, Lua, Mel, Rita, Rosa, Sol, Val. Considerou-se avisita aos lhos da esquerda antes dos lhos da direita. A ordem inversa, ou seja, lhosda 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 outropercurso 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 lhosda 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 confundiro candidado, embaralhando resultados possíveis (a assertiva I é um percurso em nível e aassertiva IV apresenta um percurso em pré-ordem). Desta forma, a resposta da questão é aletra (B).

Página 14 de 27www.handbookdeti.com.br

Page 16: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

6. Assuntos relacionados: Algoritmos de Ordenação, Heapsort, Ordenação por Árvore deDecisão, Ordenação por Comparação, Quicksort, Ordenação por Inserção, Ordenação porIntercalação,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questã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 naforma 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ídauma heap mínima (o menor elemento ca na raiz). Em resumo, as principais característicasdesse 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 paraefetuarem ordenações são denominados algoritmos de ordenação por comparação. Os algo-ritmos Heapsort, Quicksort e Ordenação por Intercalação (Mergesort) são alguns exemplosdesse tipo de algoritmo.

Uma árvore de decisão representa, de modo abstrato, as comparações executadas por umalgoritmo de ordenação. Suas principais propriedades são: é uma árvore binária; possui nomínimo n! folhas (para n igual ao número de elementos a serem ordenados); cada folhacontém uma permutação dos dados de entrada. O caminho mais longo da árvore representao pior caso de execução do algoritmo.

É sempre possível construir uma árvore de decisão para algoritmos de ordenação por com-paração. Essa construção é realizada da seguinte forma:

Página 15 de 27www.handbookdeti.com.br

Page 17: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

• xe o n;

• verique qual é a primeira comparação do algoritmo, que pode resultar em sim ounã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 sime não;

• repita os passos anteriores para cada nó da árvore. Em cada comparação, é necessáriosaber quais são os índices que estão sendo comparados. Observe que sempre se deveanalisar os índices originais, ou seja, não devem ser consideradas as trocas de índicesocorridas durante a execução do algoritmo.

Tendo em vista os conceitos apresentados, conclui-se que o algoritmo Heapsort pode serrepresentado por uma árvore de decisão, já que é um dos algoritmos que realiza ordenaçãopor comparação. Portanto, essa alternativa está errada.

(B) CORRETA

Considerando a explicação apresentada acima, se torna fácil concluir que é essa a alter-nativa 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 algoritmoQuicksort são O(nlogn) para o melhor caso e O(n2) para o pior caso. É sempre importanteter em mente que quanto mais eciente for a escolha do pivot, mais eciente será o desem-penho da ordenação do algoritmo Quicksort.

(D) ERRADA

No pior caso, a ordenação por inserção apresenta complexidade igual a O(n2), pois nessecaso são necessárias n(n− 1)/2 ≈ (n2)/2 comparações. Esse cenário sempre ocorre quandoa 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 algoritmorecursivo, se utiliza da técnica dividir para conquistar. Sua idéia básica é que é mais fácilcriar uma sequência ordenada a partir de duas outras também ordenadas. Para isso, eledivide a sequência original em pares de dados, as ordena, depois as agrupa em sequênciasde quatro elementos, e assim por diante, até ter toda a sequência dividida em apenas duaspartes. Sua complexidade tanto para o pior quanto para o melhor caso é O(n log n). Seuponto 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 deentrada, ou seja, complexidade espacial O(1), mas a sua implementação é extremamentecomplicada.

Página 16 de 27www.handbookdeti.com.br

Page 18: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

7. Assuntos relacionados: Programação, Algoritmos de Ordenação,Banca: FCCInstituição: TRT 15a RegiãoCargo: Analista Judiciário - Tecnologia da InformaçãoAno: 2009Questã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 determi-nada 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 elemen-tos sejam acessados de forma mais eciente. Os métodos de ordenação mais conhecidos eutilizados 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 únicosbaseados na ordenação troca são o BubbleSort e o QuickSort. Portanto, a resposta da ques-tão é a alternativa D. Tais algoritmos são classicados como de troca por que seus processosde ordenação se dão através de trocas entre pares de elementos do vetor. Embora o Bub-bleSort e o QuickSort se baseiem em trocas, seu funcionamento geral e o seu desempenhodiferem substancialmente.

O BubbleSort é, talvez, o método simples de ordenação, que funciona através de sucessivastrocas entre pares de elementos do vetor. O método realiza varreduras no vetor, trocandopares adjacentes de elementos sempre que o próximo elemento for menor que o anterior.

Página 17 de 27www.handbookdeti.com.br

Page 19: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Após uma varredura, o maior elemento está corretamente posicionado no vetor e não pre-cisa mais ser comparado. Dessa forma, após a i-ésima varredura, os i maiores elementosestão ordenados. A complexidade algorítmica de tempo do BubbleSort é O(n2).

O Quicksort adota uma estratégia conhecida como divisão e conquista. Por isso, usual-mente, o Quicksort é implementado utilizando-se o paradigma recursivo. No primeiro passodo QuickSort, um elemento da lista é escolhido como pivô. Em seguida, a lista é rearran-jada (por meio de trocas de posição entre os elementos) de modo que todos os elementosanteriores ao pivô sejam menores que ele, e todos os elementos posteriores ao pivô sejammaiores que ele. Ao m desse processo, que denomina-se particionamento, o pivô estará emsua posição nal e haverá duas sublistas não ordenadas.

Em seguida, o algoritmo QuickSort é reaplicado a cada uma das sublistas, sendo a baseda 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çãonal e não será mais manipulado na iteração seguinte. A complexidade algorítmica de tempodo QuickSort é O(nlgn).

A seguir, exemplos de implementação do bubble sort e do quicksort usando a linguagemde 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 27www.handbookdeti.com.br

Page 20: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

8. Assuntos relacionados: Estruturas de Dados, Algoritmos de Ordenação,Banca: FCCInstituição: TRT 16a RegiãoCargo: Analista Judiciário - Tecnologia da InformaçãoAno: 2009Questã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 ele-mentos já ordenados e o seguinte com o restante dos elementos ainda não ordenados. Oprimeiro elemento é colocado no primeiro segmento. Retira-se o primeiro elemento do seg-mento desordenado e insere-se no segmento ordenado em sua posição correta. Repete-seo processo para os demais elementos do vetor. A complexidade de tempo deste algoritmoé de O(n2). Exemplos de algoritmos de ordenação por inserção são a inserção direta e oincremento decrescente (Shell sort).

Na ordenação por troca, comparam-se dois elementos e trocam-se suas posições se o se-gundo elemento é menor do que o primeiro. A complexidade de tempo deste algoritmo é deO(n2). 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 esseelemento com o item que está na primeira posição do vetor. Repete-se este procedimentopara o n − 1 elementos restantes. A complexidade de tempo deste algoritmo é de O(n2).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, aproxi-madamente n/2. Ordena recursivamente cada sub-vetor (dividindo-se novamente, quandopossí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 orde-naçã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 buscade 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 27www.handbookdeti.com.br

Page 21: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

O algoritmo de busca binária é aplicado quando os elementos de um vetor estão ordena-dos. A busca é realizada por meio de sucessivas divisões do espaço de busca (divisão econquista), comparando o elemento buscado (chave) com o elemento no meio do vetor. Seo 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 metadeposterior do vetor. E nalmente, se o elemento do meio vier depois da chave, a busca conti-nua na metade anterior do vetor. A complexidade de tempo deste algoritmo é de O(log2(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 27www.handbookdeti.com.br

Page 22: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

9. Assuntos relacionados: Programação, Algoritmos de Ordenação, Método de Ordenaçãoda Bolha, Bubble Sort,Banca: CesgranrioInstituição: PetrobrasCargo: Analista de Sistemas Pleno - ProcessosAno: 2006Questão: 53

O seguinte algoritmo, chamado ordena, implementa um conhecido método de ordenaçãopara 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 trocassã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étododa bolha. Entre os algoritmos de ordenação, o bubblesort é classicado como um algoritmode ordenação por seleção e troca, pois o processo de ordenação baseia-se na comparação ena troca entre elementos em um vetor.

O nome bubblesort tem origem em uma analogia feita com um tubo cheio de bolhas dediferentes tamanhos. Se o vetor de tamano N for imaginado na vertical, com elemento daposição N em cima e o elemento da posição 1 embaixo, durante cata etapa do processo deordenação o menor elemento subirá até encontrar um elemento menor ainda, como se umabolha subisse dentro de um tubo de acordo com sua densidade.

Para analisar melhor o algoritmo, vamos adicionar numeros as linhas, para que possamosfazer referencia a cada um dos passos relevantes do algoritmo.

Página 21 de 27www.handbookdeti.com.br

Page 23: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

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á oloop implementado na linha 5, garante que o elemento corrente só seja comparado com oselementos 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 8até a linha 12, ocorre o processo de troca de posição entre os elementos do vetor, de modoque o menor elemento que antes. Portanto, já podemos armar que o algoritmo irá execu-tar 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 al-goritmo for executado recebendo como parâmetros o vetor 5, 3, 1, 2, 4. Para isso, teremosque 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. Opasso 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. Comisso, a resposta da questão é a alternativa A.

Página 22 de 27www.handbookdeti.com.br

Page 24: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

10. Assuntos relacionados: Algoritmos de Ordenação, Heapsort,Banca: ESAFInstituição: Secretaria do Tesouro Nacional (STN)Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento deSistemas de InformaçãoAno: 2008Questão: 24

Considere a execução do algoritmo de ordenação Heap (ou Heap Sort), em sua versão em-local (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 dedados chamada heap. Ele ordena localmente (in-place), signicando que apenas um númeroconstante de elementos do arranjo é armazenado fora do arranjo de entrada em qualquerinstante. Em outras palavras, um algoritmo in-place pode até utilizar estruturas auxiliaresde 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 bi-nária praticamente completa, sendo que cada nó dessa árvore corresponde a um elementodo arranjo que armazena o valor no nó. Um arranjo A, com uma quantidade de elementosdenida 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 satis-fazem 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 elementoem um heap máximo é armazenado na raiz, e a subárvore que tem raiz em um nó contémvalores menores que o próprio nó. Um heap mínimo, organizado de forma oposta, satisfaz aseguinte 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 27www.handbookdeti.com.br

Page 25: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

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 deheap, o que pode ser feito com as sub-rotinas MAX-HEAPFY e MIN-HEAPFY. Para o casode 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 6= 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 assima propriedade de heap máximo. A função de MAX-HEAPFY é possibilitar que o valor emA[i] ocupe o lugar adequado na estrutura, de tal forma que a subárvore com raiz no índicei 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 efe-tua tal operação:

BUILD-MAX-HEAP(A)

tamanho-do-heap[A] ← comprimento[A]

for i ← b comprimento[A]/2 c 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 27www.handbookdeti.com.br

Page 26: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

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 aexecuçã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 procedimentospreviamente apresentados para ordenar o arranjo A. E é essa a função do algoritmo HeapSort.

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 deprocessamento apresentada na Figura 4.

Página 25 de 27www.handbookdeti.com.br

Page 27: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

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 parao candidato denir saídas. Questão prejudicada.

Página 26 de 27www.handbookdeti.com.br

Page 28: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

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

Page 29: Algoritmos - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_algoritmos.pdf · tal alorv é denotado pela notação O. Se um algoritmo, no seu pior caso,

Índice Remissivo

Árvore B, 8Árvore Binária de Busca, 12Árvores Binárias, 12

Algoritmos, 4, 6Algoritmos de Ordenação, 15, 17, 19, 21, 23

Bubble Sort, 21Busca Binária, 10Busca Sequencial, 10

Complexidade de Algoritmos, 4, 6

Estruturas de Dados, 12, 19

Heapsort, 15, 23

Método de Ordenação da Bolha, 21Métodos de Busca, 8

Ordenação por Árvore de Decisão, 15Ordenação por Comparação, 15Ordenação por Inserção, 15Ordenação por Intercalação, 15

Pesquisa Binária, 8Programação, 17, 21

Quicksort, 15

28