Você está na página 1de 13

Tempos de execuo

Estruturas de Dados e Projeto de Algoritmos


I

Humberto Longo

I
I

Instituto de Informtica
Universidade Federal de Gois

I
I
I

Ps-Graduao em Cincia da Computao, 2015

INF/UFG EDPA 2015/1 Humberto Longo

(1 1 de 1025)

Instrues de mquina

Qualquer processador capaz de executar um nmero limitado


de instrues.

Qualquer instruo executada em um determinado perodo


de tempo (um nmero inteiro de ciclos de CPU).
Uma linguagem assembly tem um traduo quase uma-a-uma
para instrues de mquina.
I

Linguagem de programao de baixo nvel.

Outras linguagens de programao so consideradas de alto


nvel:
I
I

instrues de mquina;
operaes;
instrues de controle;
instrues condicionais e loops;
funes;
funes recursivas.

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (136 183 de 1025)

Instrues de mquina

Elementos para a determinao de tempos de execuo


assintticos:

A linguagem de programao C (e C++, sem objetos e outras


abstraes) pode ser considerada como uma linguagem de
programao de nvel mdio:
I

H abstrao, mas a linguagem est intimamente ligada a


recursos padres.
H uma relao direta entre os operadores presentes na
linguagem e as instrues de mquina.

Fortran, Pascal, Java, C++, C#,. . .


O adjetivo alto refere-se ao nvel de abstrao suportado pela
linguagem.

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (137 183 de 1025)

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (138 183 de 1025)

Operadores

Operadores

Uma vez que cada instruo de mquina pode ser executada


num nmero fixo de ciclos, podemos assumir que cada
operao exige um nmero fixo de ciclos.
O tempo necessrio para qualquer operador (1), incluindo:
Recuperar/armazenar variveis na memria.
Atribuio de varivel:
=
Operaes aritmticas:
+ * / % ++
Operaes lgicas:
&& || !
Operaes bit a bit:
& | << >>
Operaes relacionais:
== != < > <= >=
Alocar e liberar memria: new delete

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (139 183 de 1025)

Blocos de operaes

Alocao e liberao de memria so as operaes mais lentas,


por um fator significativo.
I
I

Exigem a comunicao com o sistema operacional.


Tempo adicional necessrio para chamar as rotinas de
construo e destruio do objeto que usar a memria
alocada.

Aps alocada a memria, o construtor executado.


I

O construtor pode no ser executado em tempo (1).

INF/UFG EDPA 2015/1 Humberto Longo

Sequncia de blocos

Raramente ocorrem grandes blocos de operaes sem


quaisquer declaraes adicionais de controle.

Se cada operao executada em tempo (1), qualquer


nmero fixo de operaes tambm executado em tempo
(1):

Tempo total de execuo:


(1) + (n) + (1) = (1 + n + 1) = (n).

(1)

// Trocar contedo
// de variveis
int temp = x;
x = y;
y = temp;

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (140 183 de 1025)

// Atualizar sequncia
// de variveis
++i;
anterior = atual;
atual = proximo;
proximo = tabela_valores[i];

Anlise de algoritmos (141 183 de 1025)

template <typename T>


void
update_capacity( int delta ) {

T *array_old = array;
int capacity_old = array_capacity;

array_capacity += delta;
array = new T[array_capacity];

(n)

for (int i = 0; i < capacity_old; ++i) {


array[i] = array_old[i];
}

(1)

delete[] array_old;

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (142 183 de 1025)

Sequncia de blocos

Executar trs blocos de cdigos: (1), (n2 ), e (n).


I

Ao considerar uma soma, tomar o termo dominante.

Anlise de algoritmos (143 183 de 1025)

Instrues de controle

Na maioria dos casos, o tempo de execuo da condio


(1).
2
3
4
5
6
7
8

i f ( condio )
{
// b l o c o 1 de i n s t r u e s
}
else
{
// b l o c o 2 de i n s t r u e s
}

INF/UFG EDPA 2015/1 Humberto Longo

Dado qualquer conjunto de instrues de controle aninhadas,


sempre necessrio trabalhar de dentro para fora.
I

Determinar primeiro os tempos de execuo das instrues


mais internas e depois das demais (de dentro para fora).

INF/UFG EDPA 2015/1 Humberto Longo

O tempo de execuo de uma instruo condicional :

Condicionais: if, switch.


Repeties controladas: for, while, do-while.

Anlise de algoritmos (144 183 de 1025)

Instrues de controle

1. o tempo de execuo da condio (de teste), mais


2. o tempo de execuo do bloco de instrues executado a partir
do resultado do teste.
I

Declaraes que potencialmente alteram o fluxo de execuo:


I

Tempo total: (n ln(n) + n1,5 ) = (n1,5 ).

INF/UFG EDPA 2015/1 Humberto Longo

Tempo total: (1 + n2 + n) = (n2 ).

Executar dois blocos de cdigos: (n ln(n)) e (n1,5 ).


I

Instrues de controle

Em alguns casos, fcil determinar qual instruo deve ser


executada:
1
2
3
4
5
6
7
8
9
10
11

Anlise de algoritmos (145 183 de 1025)

int fatorial ( int n )


{
i f ( n == 0 )
{
return 1;
}
else
{
return n f a t o r i a l ( n 1 );
}
}

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (146 183 de 1025)

Instrues de controle

Instrues de controle

Em outros casos, menos bvio.


I

1
2
3

Ex.: encontrar o maior valor armazenado em uma matriz


unidimensional.

i n t find_max ( i n t V , i n t n )
{
max = V [ 0 ] ;

1. Se os valores esto ordenados (ascendente) a varivel max ser


atualizada a cada iterao;
2. Se os valores esto ordenados (descendente), a varivel max
no ser atualizada nenhuma vez;
3. Se os valores esto aleatria e uniformemente distribudos, o
que se pode afirmar?

f o r ( i n t i = 1 ; i < n ; ++i )
{
max = (V [ i ] > max ) ? V [ i ] : ;
}

5
6
7
8

Se conhecida alguma informao sobre a distribuio dos


valores armazenados na matriz, o que se pode concluir a
respeito da atualizao do valor da varivel max?

9
10
11

r e t u r n max ;

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (147 183 de 1025)

Instrues de controle de loop

2
3
4

f o r ( i n t i = 0 ; i < N ; ++i )
{
// b l o c o de i n s t r u e s .
}

A inicializao, o teste da condio de parada e o incremento


geralmente so declaraes individuais (1).

Assim, o tempo de execuo de uma declarao for (1),


pois, pelo menos, a inicializao e um teste da condio de
parada devem ocorrer.

Se o bloco de instrues dentro do for no depende da


varivel de controle (i no exemplo abaixo), o tempo de
execuo do for (nf (n)):

Declarao equivalente:
1
2
3
4
5
6

int i = 0;
// i n i c i a l i z a o
w h i l e ( i < N) // c o n d i o de p a r a d a
{
// b l o c o de i n s t r u e s
++i ;
// i n c r e m e n t o
}

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (148 183 de 1025)

Instrues de controle de loop

Declarao for do C++ para repetio de blocos de


operaes:
1

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (149 183 de 1025)

1
2
3
4

f o r ( i n t i = 0 ; i < n ; ++i )
{
// b l o c o de i n s t r u e s (f (n)) .
}

Se o corpo bloco de instrues O(f (n)), ento o tempo de


execuo do for O(nf (n)).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (150 183 de 1025)

Instrues de controle de loop

Instrues de controle de loop

Se o loop interno (n), o loop externo (n2 ):


1
2
3
4
5
6
7
8

i n t sum = 0 ;
f o r ( i n t i = 0 ; i < n ; ++i )
{
f o r ( i n t j = 0 ; j < n ; ++j )
{
sum += 1 ;
// (1)
}
}

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (151 183 de 1025)

Instrues de controle de loop

Tempo condicionado: f (n) =

(1)

Suponha que a cada iterao realizada uma pesquisa linear


em uma matriz 1 m.

A busca linear (interna ao loop) O(m) e, portanto, o loop


O(nm).
1
2
3
4

INF/UFG EDPA 2015/1 Humberto Longo

(1), se sets = n;
(n), caso contrrio.

void
Disjoint_sets::clear() {

if (sets == n) {

return;
}


(1)

i=0

for (int i = 0; i < n; ++i) {

parent[i] = i;

tree_height[i] = 0;
}

2
3
4

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (152 183 de 1025)

Se o bloco de instrues dentro do loop depende da varivel (i


no exemplo abaixo) e o tempo de execuo do bloco
O(f (i, n)), ento o tempo de execuo do loop :
!
n1
X
O (1) +
((1) + O(f (i, n))) .

max_height = 0;
num_disjoint_sets = n;

(n)

f o r ( i n t i = 0 ; i < n ; ++i )
{
// b u s c a l i n e a r em m a t r i z 1 m O(m) .
}

Anlise de declaraes de repetio


(

Anlise de algoritmos (153 183 de 1025)

f o r ( i n t i = 0 ; i < n ; ++i )
{
// b l o c o de i n s t r u e s O(f (i, n)) .
}

(1) a complexidade das instrues de controle do loop.

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (154 183 de 1025)

Anlise de declaraes de repetio


I

Anlise de declaraes de repetio

No exemplo abaixo, o loop interno


I

((1) + i((1) + (1))) = (i)

e o loop externo :
(1) +

n1
X

!
((1) + (i))

= (1) + (n) +

i=0

n1
X

No exemplo abaixo, o bloco de instrues mais interno (linha


8) (1) e os loops (linhas 6, 4 e 2) so (j), (i2 ) e
(n3 ), respectivamente:
1

!!

i=0

= (n2 ).

5
6
1
2
3
4
5
6
7
8

i n t sum = 0 ;
f o r ( i n t i = 0 ; i < n ; ++i )
{
f o r ( i n t j = 0 ; j < i ; ++j )
{
sum += i + j ;
}
}

INF/UFG EDPA 2015/1 Humberto Longo

8
9
10
11

Anlise de algoritmos (155 183 de 1025)

Sequncias de instrues

INF/UFG EDPA 2015/1 Humberto Longo

Bloco de instrues seguido por um outro bloco de instrues


(executados em srie):
I

Se o primeiro bloco O(f (n)) e o segundo O(g(n)), ento o


tempo de execuo de dois blocos de cdigo O(f (n) + g(n)).
Geralmente, para algoritmos que no contm chamadas de
funo, O(f (n) + g(n)) simplificado para O(f (n)) ou
O(g(n)).

< i ; ++j )
k < j ; ++k )
+ k;

Anlise de algoritmos (156 183 de 1025)

Considere os seguintes problemas relativos a pesquisar uma


lista com n valores aleatrios:
1. encontrar a valor mximo, e
2. descobrir se a lista contm um valor especfico.

Qual a descrio mais apropriada para o tempo de execuo


dos algoritmos para os dois problemas?
I

INF/UFG EDPA 2015/1 Humberto Longo

n ; ++i )

Sequncias de instrues

I
I

i n t sum = 0 ;
for ( int i = 0; i <
{
for ( int j = 0; j
{
for ( int k = 0;
{
sum += i + j
}
}
}

Anlise de algoritmos (157 183 de 1025)

O problema 1 exige que cada elemento da lista seja


examinado. Assim, o algoritmo (n).
No problema 2, a procura por um valor especfico pode
terminar antes. Por exemplo, o valor procurado pode ser o
primeiro da lista. Assim, o algoritmo O(n).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (158 183 de 1025)

Sequncias de instrues

Funes

I
I

Resumo:
I
I

Se o termo dominante (), ento o resultado ().


Se o termo dominante O(), ento o resultado O().
I

Exemplos:
I
I
I
I

O(n) + O(n2 ) + O(n4 ) = O(n + n2 + n4 ) = O(n4 ).


O(n) + (n2 ) = (n2 ).
O(n2 ) + (n) = O(n2 ).
O(n2 ) + (n2 ) = (n2 ).

Uma funo (ou sub-rotina) um bloco de instrues que foi


isolado, seja por representar operaes repetidas (ex. funes
matemticas) ou por ser um grupo de instrues especficas
(ex. tarefas de inicializao).
Uma funo pode ser chamada a partir de qualquer ponto de
um algoritmo. Para isso necessrio:
I
I
I
I
I
I

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (159 183 de 1025)

Funes

preparar o ambiente adequado;


lidar com os argumentos (parmetros) da funo;
desviar a execuo do algoritmo para a funo;
executar a funo;
lidar com os valores de retorno;
limpar o ambiente utilizado.

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (160 183 de 1025)

Funes

Como chamada de funes uma tarefa comum, a maioria dos


processadores modernos tm instrues que executam a maior
parte destes passos com uma ou poucas instrues.
Vamos supor que a sobrecarga necessria para fazer uma
chamada de funo (1).
I

Como a chamada de qualquer funo requer essa sobrecarga,


vamos supor que sempre (1).
impossvel que a chamada de qualquer funo gere um
tempo de execuo nulo.

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (161 183 de 1025)

Dada uma funo proc(n) (na qual o tempo de funcionamento


depende de n), vamos associar o tempo de execuo de
proc(n) a alguma funo Tproc (n).

Como o tempo de execuo de qualquer funo (1), vamos


incluir no tempo de execuo de uma funo o tempo
necessrio para a chamada e o retorno da mesma.

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (162 183 de 1025)

Funes
I

Funes recursivas

Tset_union (m, n) = Tf ind (m) + Tf ind (n) + (1):

2Tf ind

void
Disjoint_sets::set_union(int m, int n) {

m = find( m );
n = find( n );

(1)

Fatorial:
(1)

if (m == n) {
return;
}

T (n 1) + (1)

--num_disjoint_sets;
if (tree_height[m] >= tree_height[n]) {
parent[n] = m;
if (tree_height[m] == tree_height[n]) {
++(tree_height[m]);
max_height = std::max( max_height, tree_height[m] );
}
} else
parent[m] = n;

int fatorial( int n ) {



if (n <= 1) {
return 1;
 } else {
return n * fatorial( n - 1 );
}
}

O tempo de execuo desta funo pode ser expresso como:


(
(1),
se n 1;
T (n) =
T (n 1) + (1), se n > 1.

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (163 183 de 1025)

Funes recursivas

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (164 183 de 1025)

Funes recursivas

para k = n 1:
T (n) = T (n 1) + (1)

T (n) T (n (n 1)) + (n 1)c1

T (n 1) + c1
= (T (n 2) + c1 ) + c1 = T (n 2) + 2c1
= T (n 3) + 3c1
..
.

= T (1) + (n 1)c1
= (1) + c1 n c1
c2 + c1 n c1
= c1 n + (c2 c1 ).

= T (n k) + kc1

Logo, pode-se concluir que:


T (n) O(n)
T (n) (n).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (165 183 de 1025)

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (166 183 de 1025)

Funes recursivas

Funes recursivas
Selection sort

Selection sort
1
2
3

void s e l e c t i o n S o r t ( i n t array ,
i f ( n <= 1 )
return ;

int n ) {

(1)

i n t posn = 0 ;
i n t max = a r r a y [ p o s n ] ;

5
6

(1)

//
caso especial:
if (n <= 1){

return;
}

0 ou 1 itens devem ser classificados

// assume que o primeiro elemento o maior



int posn = 0
int max = array[posn];

f o r ( i n t i = 1 ; i < n ; ++i ) {
i f ( a r r a y [ i ] > max ) {
posn = i ;
max = a r r a y [ p o s n ] ;
}
}

8
9
10
11
12
13
14

i n t tmp = a r r a y [ n 1 ] ;
a r r a y [ n 1 ] = a r r a y [ posn ] ;
a r r a y [ p o s n ] = tmp ;

15
16
17
18
19
20

s e l e c t i o n S o r t ( array , n 1 ) ;

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (167 183 de 1025)

INF/UFG EDPA 2015/1 Humberto Longo

Funes recursivas

Funes recursivas

Selection sort

Selection sort

(n)

// Procura entre os demais elementos.


// Se um maior encontrado,
// atualiza a posio e o valor do maior.

for (int i = 1; i < n; ++i) {


if (array[i] > max) {

posn = i;

max = array[posn];

};
};

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (169 183 de 1025)

(1)

T (n 1)

Anlise de algoritmos (168 183 de 1025)

//
Troca a posio do maior com o ltimo.
int tmp = array[n - 1];
array[n - 1] = array[posn];
array[posn] = tmp;
// Classifica os demais elementos.
[sort( array, n - 1 );

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (170 183 de 1025)

Funes recursivas

Funes recursivas

Selection sort

Selection sort

Relao de recorrncia:
(
(1),
se n 1;
T (n) =
T (n 1) + (n), se n > 1.

Relao de recorrncia:
T (n) T (n 1) + c1 n
= (T (n 2) + c1 (n 1)) + c1 n
= T (n 2) + c1 n + c1 (n 1)

Verso simplificada:

= T (n 3) + c1 n + c1 (n 1) + c1 (n 2)
..
.
n
n
X
X
= T (1) + c1
i = (1) + c1
i

(
c2 ,
se n 1;
T (n)
T (n 1) + c1 n, se n > 1.

i=2

max{c1 , c2 }

n
X
i=1

i=2

i = max{c1 , c2 }

n(n + 1)
2

(n ).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (171 183 de 1025)

INF/UFG EDPA 2015/1 Humberto Longo

Funes recursivas

Funes recursivas

Busca binria

Busca binria

Cdigo C:
1
2
3
4
5

i n t b u s c a B i n a r i a ( i n t V , i n t cha ve ,
{
i n t i n f = 0 ; // L i m i t e i n f e r i o r
i n t s u p = n 1; // L i m i t e s u p e r i o r
i n t meio ;

Verificar o elemento central. Se no o desejado, verificar


esquerda ou direita do elemento central, conforme o caso.

Relao de recorrncia:
(
(1),
se n 1;
 n 
T (n) =
T 2 + (1), se n > 1.

Verso simplificada:

int n )

w h i l e ( i n f <= s u p )
{
meio = i n f + ( s u p i n f ) / 2 ;
i f ( c h a v e == V [ meio ] )
r e t u r n meio ; // E n c o n t r o u e l e m e n t o
else
i f ( c h a v e < V [ meio ] )
s u p = meio 1;
else
i n f = meio +1;
}
r e t u r n 1;
// No e n c o n t r o u

7
8
9
10
11
12
13
14
15
16
17
18
19

Anlise de algoritmos (172 183 de 1025)

(
c2 ,
se n 1;
 n 
T (n)
T 2 + c1 , se n > 1.
I

Mesmo essa verso simplificada pode ser difcil de resolver!

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (173 183 de 1025)

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (174 183 de 1025)

Funes recursivas

Funes recursivas

Busca binria

Busca binria

I
I

Todo inteiro positivo n est entre duas potncias de 2!


Vamos considerar apenas valores especiais de n:
I
I
I
I

k1

T (n) T (2k1 ) + c1

2
n 2 , onde k um nmero inteiro positivo.
2k1 n k lg nl+ 1.
m 

 
k
Para n 2k , n2 22 = 2k1 = 2k1 .

= T (2k2 ) + 2c1
..
.

T (1) = T (20 ) = 1.

= T (2ki ) + ic1 .
Quando 2ki = 20 i = k:
T (n) T (1) + c1 k
c2 + c1 (lg n + 1) = c1 lg n + (c1 + c2 ).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (175 183 de 1025)

Funes recursivas

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (176 183 de 1025)

Mtricas de tempo de execuo

Busca binria
I

Lembre-se que:
f (n) (g(n)) se lim

f (n)
= c, para 0 < c < .
g(n)

Logo,
lim

c1 lg n + (c1 + c2 )
lg n
c1 + c2
= lim c1
+ lim
n
ln n
ln n n ln n
= c1 lim

ln n
ln 2

Os dados associados a um problema/algoritmo podem no ser


determinsticos.
Mtricas de interesse para o tempo de execuo de um
algoritmo:
I
I
I

+0

ln n
1
= c1 lim
c1 1, 4427.
n ln 2
n

tempo de execuo de melhor caso;


tempo de execuo do caso mdio;
tempo de execuo do pior caso.

Em muitos casos, estas mtricas sero significativamente


diferentes.

Portanto, T (n) = (ln n).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (177 183 de 1025)

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (178 183 de 1025)

Mtricas de tempo de execuo

Mtricas de tempo de execuo

Mtricas do nmero de comparaes C(n) realizadas na busca


em uma lista linear:
melhor caso: o primeiro elemento da lista o elemento
procurado O(1).
pior caso: o ltimo elemento da lista o elemento
procurado (n).
caso mdio: necessrio mais informaes sobre a lista de
elementos.

Suponha que o elemento procurado est na lista, cujos


elementos esto uniformemente distribudos.

Se a lista de tamanho n, ento h uma chance


elemento procurado estar na posio i.

Assim, podemos resumir:


C(n) =

1
n

do

n
1 n(n + 1)
n+1
1 X

i=
=
,
n
n
2
2
i=1

que O(n).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (179 183 de 1025)

Mtricas de tempo de execuo

INF/UFG EDPA 2015/1 Humberto Longo

Mtricas de tempo de execuo


I

Maior elemento de uma lista.


I

Suponha uma distribuio diferente dos elementos na lista:


I

h uma chance de 50% de que o elemento procurado seja o


primeiro da lista;
para cada elemento subsequente, a probabilidade reduzida
por 12 .

Assim:

I
I

1
2
3

X
X
1
1
C(n) =
<
=1
i
2
2i
i=1

Anlise de algoritmos (180 183 de 1025)

i=1

Melhor caso O(1) (primeiro elemento o maior).


Pior caso (n) (ltimo elemento o maior).
Caso mdio: qual a probabilidade de que o i-simo elemento
seja o maior entre os i primeiros elementos?
i n t find_max ( i n t V , i n t n )
{
max = V [ 0 ] ;

f o r ( i n t i = 1 ; i < n ; ++i )
{
max = (V [ i ] > max ) ? V [ i ] : ;
}

5
6
7

Logo, o caso mdio, O(1).

8
9
10
11

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (181 183 de 1025)

r e t u r n max ;

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (182 183 de 1025)

Mtricas de tempo de execuo

Livros Texto I

Suponha que os elementos esto distribudos uniformemente


na lista.
Dada uma sub-lista de tamanho k, a probabilidade de que
qualquer um dos elementos seja o maior k1 .
Dado um valor i, h i + 1 elementos na sub-lista:
n1
X

n
n
X
X
1
1
1
C(n) =
=
=1+
i+1
i
i
i=0
i=1
i=2
n
Z n

1
dx = 1 + ln(x)
1+
1 x
1

J. L. Gersting
Fundamentos Matemticos para a Cincia da Computao.
LTC Editora, 3 Edio, 2001.
R. P. Grimaldi
Discrete and Combinatorial Mathematics An Applied Introduction.
Addison Wesley, 1994.
D. J. Velleman
How To Prove It A Structured Approach.
Cambridge University Press, 1996.
T. H. Cormen, C. E. Leiserson e R. L. Rivest.
Introduction to Algorithms.
McGraw-Hill, New York, 1990.

= 1 + ln(n) ln(1) = 1 + ln(n)


O(ln n).

INF/UFG EDPA 2015/1 Humberto Longo

Anlise de algoritmos (183 183 de 1025)

Livros Texto II
C. H. Papadimitriou, U. V. Vazirani e S. Dasgupta.
Algoritmos.
Mcgraw-Hill Brasil, 2009.
U. Manber.
Algorithms: A Creative Approach.
Addison-Wesley, 1989.
D. E. Knuth.
The Art of Computer Programming. Volume 1 Fundamental Algorithms.
Addison Wesley, 1998.
D. E. Knuth.
The Art of Computer Programming. Volume 2 Sorting and Searching.
Addison Wesley, 1998.
N. Ziviani.
Projeto de Algoritmos com Implementaes em Pascal e C.
Editora Thomson. 2a Edio. 2004.

INF/UFG EDPA 2015/1 Humberto Longo

Bibliografia (1025 1025 de 1025)

INF/UFG EDPA 2015/1 Humberto Longo

Bibliografia (1024 1025 de 1025)