Você está na página 1de 4

Estruturas de Informação

lista de exercı́cios 06

1. Ordenação via partição

Imagine que nós aplicamos o procedimento Partiç~


ao() sobre a lista L

1 n 1 k n
x ⇒ x
| {z } | {z }
<x >x

E imagine que depois nós ordenamos os dois lados da partição usando o algoritmo da bolha

1 k n
x

Claramente, esse procedimento ordena a lista completamente.

a) Analise o tempo de execução desse algoritmo no melhor caso.

b) Analise o tempo de execução desse algoritmo no pior caso.

2. Ordenação-2n/3

Imagine que nós ordenamos os primeiros 2n/3 elementos da lista L usando o algoritmo da
bolha
1 2n/3 n

Daı́, nós ordenamos os últimos 2n/3 elementos da lista usando o algoritmo da bolha

1 n/3 n

Finalmente, nós ordenamos os primeiros 2n/3 elementos da lista outra vez usando o
algoritmo da bolha
1 2n/3 n

a) Ao final desse processo, a lista está completamente ordenada?


Porque?

b) Analise o tempo de execução desse procedimento.

1
3. Ordenação par-ı́mpar

Uma outra ideia para tornar o algoritmo da bolha mais eficiente consiste em acelerar o
procedimento Varredura().
Quer dizer, a ideia consiste em comparar elementos à distância 2 — (e trocá-los de posição,
se necessário)

L x y
y < x : troca

Na prática, isso corresponde a fazer a varredura primeiro sobre as posições pares, e depois
sobre as posições ı́mpares.
E daı́, se a gente executa o algoritmo da bolha com essa versão do procedimento Varredura()
- o algoritmo ordena as posições pares da lista em separado
- e ordena as posições ı́mpares da lista em separado

1 3 5 ... n-1

2 4 6 ... n

Finalmente, nós podemos aplicar a varredura tradicional repetidamente, até que a lista
fique completamente ordenada

1 n

a) Analise o tempo de execução desse algoritmo no melhor caso para a segunda etapa.

b) Analise o tempo de execução desse algoritmo no pior caso para a segunda etapa.

4. Ordenação borboleta

Imagine que nós ordenamos as duas metades da lista L usando o algoritmo da bolha

1 n/2 n

Daı́, nós comparamos pares de elementos da seguinte maneira

2
sempre trocando os elementos de posição, quando o elemento da esquerda é maior do que
o elemento da direita.
Finalmente, nós ordenamos as duas metades da lista outra vez usando o algoritmo da
bolha
1 n/2 n

a) Ao final desse processo, a lista está completamente ordenada?


Porque?

b) Analise o tempo de execução desse procedimento.


5. Outra ordenação- n

Imagine que nós ordenamos blocos de tamanho n da lista L usando o algoritmo da bolha

1 n

√ √ √
n n n

Daı́, nós reorganizamos os elementos da seguinte maneira

1 n

| {z } | {z } | {z }
1o elemento 2o elemento último elemento
de cada bloco de cada bloco de cada bloco

Finalmente, nós aplicamos o procedimento Varredura() repetidamente, até que a lista


fique completamente ordenada.

a) Analise o tempo de execução desse algoritmo no melhor caso.

b) Analise o tempo de execução desse algoritmo no pior caso.

6. Ordenação com elementos repetidos



Imagine que L é uma lista de tamanho n que contém no máximo n elementos distintos.

a) Apresente um algoritmo que ordena a lista L em tempo menor do que O(n2 ).

b) Analise o tempo de execução do seu algoritmo.

3
7. Busca na lista infinita

Imagine que você tem uma lista ordenada infinita

...

onde só o que isso quer dizer é que nós não temos a menor ideia de qual é o seu tamanho.
Além disso, imagine que nós queremos saber se o número k está na lista ou não.
Bom, como nós não sabemos o tamanho da lista, nós não podemos calcular a posição
central.
E como nós não podemos calcular a posição central, nós não podemos fazer a busca binária.

Mas, será que você consegue de fazer uma busca inteligente nessa lista?

Apresente o algoritmo mais eficiente que você conseguir para verificar se o número k está
presente na lista ou não.

E depois, analise o tempo de execução do seu algoritmo.

8. Mediana

A mediana de um conjunto A de tamanho n é aquele elemento que


- é menor do que outros n/2 elementos
- é maior do que outros n/2 − 1 elementos
Por exemplo, se

A = { 1, 3, 6, 7, 10, 11, 15, 17, 19, 21 }

a mediana de A é o elemento 10.


Certo.
Agora considere duas listas ordenadas de tamanho n

1 n
U
1 n
V

Apresente um algoritmo que encontra a mediana do conjunto formado pelos elementos de


U e V, em tempo O(log2 n).

Você também pode gostar