• Nenhum resultado encontrado

Ordenação em tempo linear

N/A
N/A
Protected

Academic year: 2022

Share "Ordenação em tempo linear"

Copied!
56
0
0

Texto

(1)

Ordenação em tempo linear

CLRS cap 8

(2)

Counting Sort

Recebe inteirosn ek, e um vetorA[1. .n]

onde cada elemento é um inteiro entre 1 ek.

Devolve um vetorB[1. .n]com

os elementos deA[1. .n]em ordem crescente. COUNTINGSORT(A,n)

1 para i ←1até k faça 2 C[i]←0

3 para j ←1 atén faça 4 C[A[j]]←C[A[j]] +1 5 para i ←2até k faça 6 C[i]←C[i] +C[i−1]

7 para j ←n decrescendo até1 faça 8 B[C[A[j]]]←A[j]

9 C[A[j]]←C[A[j]]−1 10 devolvaB

(3)

Counting Sort

Recebe inteirosn ek, e um vetorA[1. .n]

onde cada elemento é um inteiro entre 1 ek.

Devolve um vetorB[1. .n]com

os elementos deA[1. .n] em ordem crescente.

COUNTINGSORT(A,n) 1 para i ←1até k faça 2 C[i]←0

3 para j ←1 atén faça 4 C[A[j]]←C[A[j]] +1 5 para i ←2até k faça 6 C[i]←C[i] +C[i−1]

7 para j ←n decrescendo até1 faça 8 B[C[A[j]]]←A[j]

9 C[A[j]]←C[A[j]]−1 10 devolvaB

(4)

Counting Sort

Recebe inteirosn ek, e um vetorA[1. .n]

onde cada elemento é um inteiro entre 1 ek.

Devolve um vetorB[1. .n]com

os elementos deA[1. .n] em ordem crescente.

COUNTINGSORT(A,n) 1 para i ←1até k faça 2 C[i]←0

3 para j ←1 atén faça 4 C[A[j]]←C[A[j]] +1 5 para i ←2até k faça 6 C[i]←C[i] +C[i−1]

7 para j ←n decrescendo até1 faça 8 B[C[A[j]]]←A[j]

9 C[A[j]]←C[A[j]]−1 10 devolvaB

(5)

Consumo de tempo

linha consumo na linha

1 Θ(k)

2 O(k)

3 Θ(n)

4 O(n)

5 Θ(k)

6 O(k)

7 Θ(n)

8 O(n)

9 O(n)

10 Θ(1)

total ????

linha consumo na linha

1 Θ(k)

2 O(k)

3 Θ(n)

4 O(n)

5 Θ(k)

6 O(k)

7 Θ(n)

8 O(n)

9 O(n)

10 Θ(1)

total Θ(k+n)

(6)

Consumo de tempo

linha consumo na linha

1 Θ(k)

2 O(k)

3 Θ(n)

4 O(n)

5 Θ(k)

6 O(k)

7 Θ(n)

8 O(n)

9 O(n)

10 Θ(1)

total Θ(k+n)

(7)

Counting Sort

COUNTINGSORT(A,n) 1 para i ←1até k faça 2 C[i]←0

3 para j ←1 atén faça 4 C[A[j]]←C[A[j]] +1 5 para i ←2até k faça 6 C[i]←C[i] +C[i−1]

7 para j ←n decrescendo até1 faça 8 B[C[A[j]]]←A[j]

9 C[A[j]]←C[A[j]]−1 10 devolvaB

Consumo de tempo: Θ(k+n)

Sek =O(n), o consumo de tempo éΘ(n).

(8)

Radix Sort

Algoritmo usado para ordenar

I inteiros não-negativos comd dígitos I cartões perfurados

I registros cuja chave tem vários campos

dígito 1: menos significativo dígitod: mais significativo

RADIXSORT(A,n,d)

1 para i ←1até d faça 2 ORDENE(A,n,i)

ORDENE(A,n,i): ordenaA[1. .n]pelo i-ésimo dígito dos números emA por meio de um algoritmoestável.

(9)

Radix Sort

Algoritmo usado para ordenar

I inteiros não-negativos comd dígitos I cartões perfurados

I registros cuja chave tem vários campos dígito 1: menos significativo

dígitod: mais significativo

RADIXSORT(A,n,d)

1 para i ←1até d faça 2 ORDENE(A,n,i)

ORDENE(A,n,i): ordenaA[1. .n]pelo i-ésimo dígito dos números emA por meio de um algoritmoestável.

(10)

Radix Sort

Algoritmo usado para ordenar

I inteiros não-negativos comd dígitos I cartões perfurados

I registros cuja chave tem vários campos dígito 1: menos significativo

dígitod: mais significativo RADIXSORT(A,n,d)

1 para i ←1até d faça 2 ORDENE(A,n,i)

ORDENE(A,n,i): ordenaA[1. .n]pelo i-ésimo dígito dos números emA por meio de um algoritmoestável.

(11)

Radix Sort

Algoritmo usado para ordenar

I inteiros não-negativos comd dígitos I cartões perfurados

I registros cuja chave tem vários campos dígito 1: menos significativo

dígitod: mais significativo RADIXSORT(A,n,d)

1 para i ←1até d faça 2 ORDENE(A,n,i)

ORDENE(A,n,i): ordenaA[1. .n]pelo i-ésimo dígito dos números emA por meio de um algoritmoestável.

(12)

Estabilidade

Um algoritmo de ordenação éestávelse sempre que, inicialmente,A[i] =A[j]parai <j, a cópia A[i]termina em uma posição menor do vetor que a cópiaA[j].

Isso só é relevante quando temosinformação satélite. Quais dos algoritmos que vimos são estáveis?

I inserção direta? seleção direta? bubblesort? I mergesort?

I quicksort? I heapsort? I countingsort?

(13)

Estabilidade

Um algoritmo de ordenação éestávelse sempre que, inicialmente,A[i] =A[j]parai <j, a cópia A[i]termina em uma posição menor do vetor que a cópiaA[j].

Isso só é relevante quando temosinformação satélite.

Quais dos algoritmos que vimos são estáveis? I inserção direta? seleção direta? bubblesort? I mergesort?

I quicksort? I heapsort? I countingsort?

(14)

Estabilidade

Um algoritmo de ordenação éestávelse sempre que, inicialmente,A[i] =A[j]parai <j, a cópia A[i]termina em uma posição menor do vetor que a cópiaA[j].

Isso só é relevante quando temosinformação satélite.

Quais dos algoritmos que vimos são estáveis?

I inserção direta? seleção direta? bubblesort? I mergesort?

I quicksort? I heapsort? I countingsort?

(15)

Estabilidade

Um algoritmo de ordenação éestávelse sempre que, inicialmente,A[i] =A[j]parai <j, a cópia A[i]termina em uma posição menor do vetor que a cópiaA[j].

Isso só é relevante quando temosinformação satélite.

Quais dos algoritmos que vimos são estáveis?

I inserção direta? seleção direta? bubblesort?

I mergesort?

I quicksort?

I heapsort?

I countingsort?

(16)

Consumo de tempo do Radixsort

Depende do algoritmo ORDENE.

Se cada dígito é um inteiro de 1 ak, então podemos usar oCOUNTINGSORT.

Neste caso, o consumo de tempo éΘ(d(k+n)).

Sed é limitado por uma constante (ou seja, sed =O(1)) ek =O(n), então o consumo de tempo éΘ(n).

(17)

Consumo de tempo do Radixsort

Depende do algoritmo ORDENE.

Se cada dígito é um inteiro de 1 ak, então podemos usar oCOUNTINGSORT.

Neste caso, o consumo de tempo éΘ(d(k+n)).

Sed é limitado por uma constante (ou seja, sed =O(1)) ek =O(n), então o consumo de tempo éΘ(n).

(18)

Consumo de tempo do Radixsort

Depende do algoritmo ORDENE.

Se cada dígito é um inteiro de 1 ak, então podemos usar oCOUNTINGSORT.

Neste caso, o consumo de tempo éΘ(d(k+n)).

Sed é limitado por uma constante (ou seja, sed =O(1)) ek =O(n), então o consumo de tempo éΘ(n).

(19)

Consumo de tempo do Radixsort

Depende do algoritmo ORDENE.

Se cada dígito é um inteiro de 1 ak, então podemos usar oCOUNTINGSORT.

Neste caso, o consumo de tempo éΘ(d(k+n)).

Sed é limitado por uma constante (ou seja, sed =O(1)) ek =O(n), então o consumo de tempo éΘ(n).

(20)

Bucket Sort

Recebe um inteiron e um vetor A[1. .n] onde cada elemento é um número no intervalo[0,1).

A .47 .93 .82 .12 .42 .03 .62 .38 .77 .91

Devolve um vetorC[1. .n]com

os elementos deA[1. .n]em ordem crescente.

C .03 .12 .38 .42 .47 .62 .77 .82 .91 .93

(21)

Bucket Sort

Recebe um inteiron e um vetor A[1. .n] onde cada elemento é um número no intervalo[0,1).

A .47 .93 .82 .12 .42 .03 .62 .38 .77 .91

Devolve um vetorC[1. .n]com

os elementos deA[1. .n]em ordem crescente.

C .03 .12 .38 .42 .47 .62 .77 .82 .91 .93

(22)

Bucket Sort

Recebe um inteiron e um vetor A[1. .n] onde cada elemento é um número no intervalo[0,1).

A .47 .93 .82 .12 .42 .03 .62 .38 .77 .91

Devolve um vetorC[1. .n]com

os elementos deA[1. .n] em ordem crescente.

C .03 .12 .38 .42 .47 .62 .77 .82 .91 .93

(23)

Bucket Sort

Recebe um inteiron e um vetor A[1. .n] onde cada elemento é um número no intervalo[0,1).

A .47 .93 .82 .12 .42 .03 .62 .38 .77 .91

Devolve um vetorC[1. .n]com

os elementos deA[1. .n] em ordem crescente.

C .03 .12 .38 .42 .47 .62 .77 .82 .91 .93

(24)

Exemplo

.47 .93 .82 .12 .42 .03 .62 .38 .77 .91

B[0] : .03 B[1] : .12 B[2] : B[3] : .38 B[4] : .42 .47 B[5] :

B[6] : .62 B[7] : .77 B[8] : .82 B[9] : .91 .93

(25)

Exemplo

.47 .93 .82 .12 .42 .03 .62 .38 .77 .91

B[0] : .03 B[1] : .12 B[2] : B[3] : .38 B[4] : .47 .42 B[5] :

B[6] : .62 B[7] : .77 B[8] : .82 B[9] : .93 .91

B[0] : .03 B[1] : .12 B[2] : B[3] : .38 B[4] : .42 .47 B[5] :

B[6] : .62 B[7] : .77 B[8] : .82 B[9] : .91 .93

(26)

Exemplo

.47 .93 .82 .12 .42 .03 .62 .38 .77 .91

B[0] : .03 B[1] : .12 B[2] : B[3] : .38 B[4] : .42 .47 B[5] :

B[6] : .62 B[7] : .77 B[8] : .82 B[9] : .91 .93

(27)

Exemplo

.47 .93 .82 .12 .42 .03 .62 .38 .77 .91

B[0] : .03 B[1] : .12 B[2] : B[3] : .38 B[4] : .42 .47 B[5] :

B[6] : .62 B[7] : .77 B[8] : .82 B[9] : .91 .93

.03 .12 .38 .42 .47 .62 .77 .82 .91 .93

(28)

Bucket Sort

Recebe um inteiron e um vetor A[1. .n] onde cada elemento é um número no intervalo[0,1).

Devolve um vetorC[1. .n]com

os elementos deA[1. .n] em ordem crescente.

BUCKETSORT(A,n)

1 para i ←0até n−1faça 2 B[i]←NIL

3 para i ←1até n faça 4 INSIRA(B[bn A[i]c],A[i]) 5 para i ←0até n−1faça 6 ORDENELISTA(B[i]) 7 C ←CONCATENE(B,n) 8 devolva C

(29)

Bucket Sort

Recebe um inteiron e um vetor A[1. .n] onde cada elemento é um número no intervalo[0,1).

Devolve um vetorC[1. .n]com

os elementos deA[1. .n] em ordem crescente.

BUCKETSORT(A,n)

1 para i ←0até n−1faça 2 B[i]←NIL

3 para i ←1até n faça 4 INSIRA(B[bn A[i]c],A[i]) 5 para i ←0até n−1faça 6 ORDENELISTA(B[i]) 7 C ←CONCATENE(B,n) 8 devolva C

(30)

Bucket Sort

BUCKETSORT(A,n)

1 para i ←0até n−1faça 2 B[i]←NIL

3 para i ←1até n faça 4 INSIRA(B[bn A[i]c],A[i]) 5 para i ←0até n−1faça 6 ORDENELISTA(B[i]) 7 C ←CONCATENE(B,n) 8 devolva C

INSIRA(p,x): inserex na lista apontada porp

ORDENELISTA(p): ordena a lista apontada porp CONCATENE(B,n): devolve a lista obtida da

concatenação das listas apontadas porB[0], . . . ,B[n−1].

(31)

Bucket Sort

BUCKETSORT(A,n)

1 para i ←0até n−1faça 2 B[i]←NIL

3 para i ←1até n faça 4 INSIRA(B[bn A[i]c],A[i]) 5 para i ←0até n−1faça 6 ORDENELISTA(B[i]) 7 C ←CONCATENE(B,n) 8 devolva C

INSIRA(p,x): inserex na lista apontada porp ORDENELISTA(p): ordena a lista apontada porp

CONCATENE(B,n): devolve a lista obtida da

concatenação das listas apontadas porB[0], . . . ,B[n−1].

(32)

Bucket Sort

BUCKETSORT(A,n)

1 para i ←0até n−1faça 2 B[i]←NIL

3 para i ←1até n faça 4 INSIRA(B[bn A[i]c],A[i]) 5 para i ←0até n−1faça 6 ORDENELISTA(B[i]) 7 C ←CONCATENE(B,n) 8 devolva C

INSIRA(p,x): inserex na lista apontada porp ORDENELISTA(p): ordena a lista apontada porp CONCATENE(B,n): devolve a lista obtida da

concatenação das listas apontadas porB[0], . . . ,B[n−1].

(33)

Consumo de tempo

Suponha que os números emA[1. .n]são uniformemente distribuídos no intervalo[0,1).

Suponha que oORDENELISTAseja o INSERTIONSORT.

SejaXi o número de elementos na listaB[i]. Seja

Xij =

1 se o j-ésimo elemento foi para a listaB[i] 0 se o j-ésimo elemento não foi para a listaB[i]. Observe queXi =P

jXij.

Yi: número de comparações para ordenar a lista B[i].

(34)

Consumo de tempo

Suponha que os números emA[1. .n]são uniformemente distribuídos no intervalo[0,1).

Suponha que oORDENELISTAseja o INSERTIONSORT. SejaXi o número de elementos na listaB[i].

Seja Xij =

1 se o j-ésimo elemento foi para a listaB[i] 0 se o j-ésimo elemento não foi para a listaB[i]. Observe queXi =P

jXij.

Yi: número de comparações para ordenar a lista B[i].

(35)

Consumo de tempo

Suponha que os números emA[1. .n]são uniformemente distribuídos no intervalo[0,1).

Suponha que oORDENELISTAseja o INSERTIONSORT. SejaXi o número de elementos na listaB[i].

Seja Xij =

1 se o j-ésimo elemento foi para a lista B[i]

0 se o j-ésimo elemento não foi para a listaB[i].

Observe queXi =P

jXij.

Yi: número de comparações para ordenar a lista B[i].

(36)

Consumo de tempo

Suponha que os números emA[1. .n]são uniformemente distribuídos no intervalo[0,1).

Suponha que oORDENELISTAseja o INSERTIONSORT. SejaXi o número de elementos na listaB[i].

Seja Xij =

1 se o j-ésimo elemento foi para a lista B[i]

0 se o j-ésimo elemento não foi para a listaB[i].

Observe queXi =P

jXij.

Yi: número de comparações para ordenar a lista B[i].

(37)

Consumo de tempo

Suponha que os números emA[1. .n]são uniformemente distribuídos no intervalo[0,1).

Suponha que oORDENELISTAseja o INSERTIONSORT. SejaXi o número de elementos na listaB[i].

Seja Xij =

1 se o j-ésimo elemento foi para a lista B[i]

0 se o j-ésimo elemento não foi para a listaB[i].

Observe queXi =P

jXij.

Yi: número de comparações para ordenar a lista B[i].

(38)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2. LogoE[Yi]≤E[Xi2] =E[(P

jXij)2]. E[(X

j

Xij)2] = E[X

j

X

k

XijXik]

= E[X

j

Xij2+X

j

X

k6=j

XijXik]

(39)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2.

LogoE[Yi]≤E[Xi2] =E[(P

jXij)2]. E[(X

j

Xij)2] = E[X

j

X

k

XijXik]

= E[X

j

Xij2+X

j

X

k6=j

XijXik]

(40)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2. LogoE[Yi]≤E[Xi2] =E[(P

jXij)2].

E[(X

j

Xij)2] = E[X

j

X

k

XijXik]

= E[X

j

Xij2+X

j

X

k6=j

XijXik]

(41)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2. LogoE[Yi]≤E[Xi2] =E[(P

jXij)2].

E[(X

j

Xij)2] = E[X

j

X

k

XijXik]

= E[X

j

Xij2+X

j

X

k6=j

XijXik]

(42)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2. LogoE[Yi]≤E[Xi2] =E[(P

jXij)2].

E[(X

j

Xij)2] = E[X

j

X

k

XijXik]

= E[X

j

Xij2] +E[X

j

X

k6=j

XijXik]

(43)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2. LogoE[Yi]≤E[Xi2] =E[(P

jXij)2].

E[(X

j

Xij)2] = E[X

j

X

k

XijXik]

= X

j

E[Xij2] +X

j

X

k6=j

E[XijXik]

(44)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2. Ademais, E[Yi] ≤ X

j

E[Xij2] +X

j

X

k6=j

E[XijXik].

Observe queXij2 é uma variável aleatória binária.

Vamos calcular sua esperança:

E[Xij2] = Pr[Xij2 =1] = Pr[Xij =1] = 1 n.

(45)

Consumo de tempo

Xi: número de elementos na lista B[i]

Xij =

1 se oj-ésimo elemento foi para a lista B[i]

0 se oj-ésimo elemento não foi para a listaB[i].

Yi: número de comparações para ordenar a lista B[i].

Observe queYi ≤Xi2. Ademais, E[Yi] ≤ X

j

E[Xij2] +X

j

X

k6=j

E[XijXik].

Observe queXij2 é uma variável aleatória binária.

Vamos calcular sua esperança:

E[Xij2] = Pr[Xij2 =1] = Pr[Xij =1] = 1 n.

(46)

Consumo de tempo

Para calcularE[XijXik]para j 6=k, primeiro

note queXij e Xik são variáveis aleatórias independentes.

Portanto,E[XijXik] =E[Xij]E[Xik]. Ademais,E[Xij] = Pr[Xij =1] = 1n. Logo,

E[Yi] ≤ X

j

1 n +X

j

X

k6=j

1 n2

= n

n +n(n−1) 1 n2

= 1+ (n−1)1 n

= 2−1 n.

(47)

Consumo de tempo

Para calcularE[XijXik]para j 6=k, primeiro

note queXij e Xik são variáveis aleatórias independentes.

Portanto,E[XijXik] =E[Xij]E[Xik].

Ademais,E[Xij] = Pr[Xij =1] = 1n. Logo,

E[Yi] ≤ X

j

1 n +X

j

X

k6=j

1 n2

= n

n +n(n−1) 1 n2

= 1+ (n−1)1 n

= 2−1 n.

(48)

Consumo de tempo

Para calcularE[XijXik]para j 6=k, primeiro

note queXij e Xik são variáveis aleatórias independentes.

Portanto,E[XijXik] =E[Xij]E[Xik].

Ademais,E[Xij] = Pr[Xij =1] = 1n.

Logo,

E[Yi] ≤ X

j

1 n +X

j

X

k6=j

1 n2

= n

n +n(n−1) 1 n2

= 1+ (n−1)1 n

= 2−1 n.

(49)

Consumo de tempo

Para calcularE[XijXik]para j 6=k, primeiro

note queXij e Xik são variáveis aleatórias independentes.

Portanto,E[XijXik] =E[Xij]E[Xik].

Ademais,E[Xij] = Pr[Xij =1] = 1n. Logo,

E[Yi] ≤ X

j

1 n +X

j

X

k6=j

1 n2

= n

n +n(n−1) 1 n2

= 1+ (n−1)1 n

= 2−1 n.

(50)

Consumo de tempo

Agora, sejaY =P

iYi.

Note queY é o número de comparações realizadas peloBUCKETSORTno total.

AssimE[Y] é o número esperado de comparações realizadas pelo algoritmo, e tal número determina o consumo assintótico de tempo doBUCKETSORT. Mas entãoE[Y] =P

iE[Yi]≤2n−1=O(n).

O consumo de tempo esperado doBUCKETSORT

quando os números emA[1. .n]são

uniformemente distribuídos no intervalo [0,1) é O(n).

(51)

Consumo de tempo

Agora, sejaY =P

iYi.

Note queY é o número de comparações realizadas peloBUCKETSORTno total.

AssimE[Y] é o número esperado de comparações realizadas pelo algoritmo, e tal número determina o consumo assintótico de tempo doBUCKETSORT. Mas entãoE[Y] =P

iE[Yi]≤2n−1=O(n).

O consumo de tempo esperado doBUCKETSORT

quando os números emA[1. .n]são

uniformemente distribuídos no intervalo [0,1) é O(n).

(52)

Consumo de tempo

Agora, sejaY =P

iYi.

Note queY é o número de comparações realizadas peloBUCKETSORTno total.

AssimE[Y] é o número esperado de comparações realizadas pelo algoritmo, e tal número determina o consumo assintótico de tempo doBUCKETSORT.

Mas entãoE[Y] =P

iE[Yi]≤2n−1=O(n).

O consumo de tempo esperado doBUCKETSORT

quando os números emA[1. .n]são

uniformemente distribuídos no intervalo [0,1) é O(n).

(53)

Consumo de tempo

Agora, sejaY =P

iYi.

Note queY é o número de comparações realizadas peloBUCKETSORTno total.

AssimE[Y] é o número esperado de comparações realizadas pelo algoritmo, e tal número determina o consumo assintótico de tempo doBUCKETSORT. Mas entãoE[Y] =P

iE[Yi]≤2n−1=O(n).

O consumo de tempo esperado doBUCKETSORT

quando os números emA[1. .n]são

uniformemente distribuídos no intervalo [0,1) é O(n).

(54)

Consumo de tempo

Agora, sejaY =P

iYi.

Note queY é o número de comparações realizadas peloBUCKETSORTno total.

AssimE[Y] é o número esperado de comparações realizadas pelo algoritmo, e tal número determina o consumo assintótico de tempo doBUCKETSORT. Mas entãoE[Y] =P

iE[Yi]≤2n−1=O(n).

O consumo de tempo esperado doBUCKETSORT

quando os números emA[1. .n]são

uniformemente distribuídos no intervalo [0,1) é O(n).

(55)

Exercícios

Exercício 7.A

Desenhe a árvore de decisão para oSELECTIONSORTaplicado aA[1. .3]

com todos os elementos distintos.

Exercício 7.B[CLRS 8.1-1]

Qual o menor profundidade (= menor nível) que uma folha pode ter em uma árvore de decisão que descreve um algoritmo de ordenação baseado em comparações?

Exercício 7.C[CLRS 8.1-2]

Mostre quelg(n!) = Ω(nlgn)sem usar a fórmula de Stirling.

Sugestão: CalculePn

k=n/2lgk. Use as técnicas de CLRS A.2.

(56)

Exercícios

Exercício 7.D[CLRS 8.2-1]

Simule a execuçãao doCOUNTINGSORTusando como entrada o vetorA[1. .11] =h7,1,3,1,2,4,5,7,2,4,3i.

Exercício 7.E[CLRS 8.2-2]

Mostre que oCOUNTINGSORTé estável.

Exercício 7.F[CLRS 8.2-3]

Suponha que oparada linha 7 do COUNTINGSORTé substituído por 7 paraj1 aténfaça

Mostre que o ainda funciona. O algoritmo resultante continua estável?

Referências

Documentos relacionados

A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se baseia no fato de que uma

A Psicologia, por sua vez, seguiu sua trajetória também modificando sua visão de homem e fugindo do paradigma da ciência clássica. Ampliou sua atuação para além da

.n ] pelo i-ésimo campo dos registros em A por meio de um algoritmo estável.... .n ] pelo i-ésimo campo dos registros em A por meio de um

Resumidamente a forma de comercialização dos apartamentos FLAT e operação de locação dos apartamentos do HOTEL para uma bandeira hoteleira proposta a seguir objetiva a

Os recursos obtidos com a alienação de Ativos Imobiliários deverão ser, nos termos deste Regulamento: (a) submetidos à Assembleia Geral de Cotista, convocada

De acordo com o Instituto Ethos (2013), a GRI foi criada com o objetivo de aumentar o nível de qualidade dos relatórios de sustentabilidade. O conjunto de diretrizes e indicadores da

Com relação ao CEETEPS, o tema desta dissertação é interessante por se inserir no Programa de Educação de Jovens e Adultos (PROEJA), sob a tutela da Coordenação de

Dentre as 33 subcategorias, crime foi a mais noticiada em todos os telejornais, com destaque para o Jornal das 8, em que 28% (N=37) das pautas policiais no período analisado