Este relatório apresenta os resultados de um trabalho prático de cálculo numérico utilizando o método de interpolação polinomial de diferenças divididas para estimar o tempo de ordenação de 95.000 elementos usando o algoritmo BubbleSort. O polinômio interpolador foi calculado e aplicado para estimar o tempo em 109 segundos.
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
1. Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Biológicas
Departamento de Computação
Cálculo Numérico
Primeiro Trabalho Prático
Johnnatan Messias P. Afonso
Professor - José Álvaro Tadeu Ferreira
Ouro Preto
5 de maio de 2010
3. 1 Denição do Problema
Realizando testes com o método de ordenação BubbleSort obteve-se o seguinte
resultado de tempo, em segundos, para as quantidades de elementos a serem orde-
nados:
Figura 1: Tabela
Através dessa tabela de resultados deseja-se obter uma estimativa de tempo para
que o algoritmo ordene 95.000 elementos.
2 Modelagem Matemática
A função é crescente no intervalo x = [25000;150000], logo podemos resolver esse
problema utilizando interpolação polinomial.
3 Solução Numérica
Utilizarei o Método das Diferenças Divididas para estimar o tempo para ordenar
95000 (noventa e cinco mil) elementos de um vetor, uma vez que esse método realiza
menos operações aritméticas quando comparado ao Método de Lagrange.
4 Obtenção dos Resultados
Figura 2: Tabela dos Resultados
O polinômio interpolador é:
p(x) = y0 + (x−x0)DY0 + (x−x0)(x−x1)D2
Y0 + (x−x0)(x−x1)(x−x2)D3
Y0 +
(x−x0)(x−x1)(x−x2)(x−x3)D4
Y0 + (x−x0)(x−x1)(x−x2)(x−x3)(x−x4)D5
Y0
1
4. Sabe-se que:
Dr
Yi =
Dr−1
Yi+1 − Dr−1
Yi
Xi+r − Xi
;
i = 0, 1, 2, ..., n
r = 0, 1, 2, ..., n − r
(1)
Sendo
D0
Yi = Yi ; i = 0, 1, 2, ..., n (2)
Então podemos calcular as diferenças divididas de ordem 1, 2, 3, 4 e 5 nesse caso:
4.1 Primeira Ordem
DYi =
Yi+1 − Yi
Xi+1 − Xi
, i = 0, 1, 2, ..., n − 1 (3)
DY0 =
Y1 − Y0
X1 − X0
= 0, 000773 (4)
DY1 =
Y2 − Y1
X2 − X1
= 0, 00147 (5)
DY2 =
Y3 − Y2
X3 − X2
= 0, 00213 (6)
DY3 =
Y4 − Y3
X4 − X3
= 0, 00252 (7)
DY4 =
Y5 − Y4
X5 − X4
= 0, 00358 (8)
4.2 Segunda Ordem
D2
Yi =
DYi+1 − DYi
Xi+2 − Xi
, i = 0, 1, 2, ..., n − 2 (9)
D2
Y0 =
DY1 − DY0
X2 − X0
= 0, 000000012 (10)
D2
Y1 =
DY2 − DY1
X3 − X1
= 0, 000000011 (11)
D2
Y2 =
DY3 − DY2
X4 − X2
= 0, 000000009 (12)
D2
Y3 =
DY4 − DY3
X5 − X3
= 0, 000000021 (13)
2
5. 4.3 Terceira Ordem
D3
Yi =
D2
Yi+1 − D2
Yi
Xi+3 − Xi
, i = 0, 1, 2, ..., n − 3 (14)
D3
Y0 =
D2
Y1 − D2
Y0
X3 − X0
= −1, 3x10−14
(15)
D3
Y1 =
D2
Y2 − D2
Y1
X4 − X1
= −2, 5x10−14
(16)
D3
Y2 =
D2
Y3 − D2
Y2
X5 − X2
= 1, 714x10−13
(17)
4.4 Quarta Ordem
D4
Yi =
D3
Yi+1 − D3
Yi
Xi+4 − Xi
, i = 0, 1, 2, ..., n − 4 (18)
D4
Y0 =
D3
Y1 − D3
Y0
X4 − X0
= −1, 26x10−19
(19)
D4
Y1 =
D3
Y2 − D3
Y1
X5 − X1
= 1, 785x10−18
(20)
4.5 Quinta Ordem
D5
Yi =
D4
Yi+1 − D4
Yi
Xi+5 − Xi
, i = 0, 1, 2, ..., n − 5 (21)
D5
Y0 =
D4
Y1 − D4
Y0
X5 − X0
= −1, 528x10−23
(22)
4.6 O Resultado
Para calcular a estimativa de tempo foram escolhidos os pontos:
(80000;77,80),(100000;120,40),(120000;170,90).
Figura 3: Pontos escolhidos
3
6. Portanto:
p(x) = 77, 80+(x−80000)(0, 00213)+(x−80000)(x−100000)(0, 000000009) (23)
p(95000) = 77, 80+(95000−80000)(0, 00213)+(95000−80000)(95000−100000)(0, 000000009)
(24)
p(95000) = 109,075 ∼= 109 segundos
5 Análise dos Resultados
O resultado obtido é coerente com o polinômio do problema, uma vez que 95000 ∈
[80000; 100000] e ainda, de forma correspondente, 109 ∈ [77, 80; 120, 40].
6 Bubble Sort
BubbleSort é um simples método de ordenação que verica todas as posições do
vetor a m de ordená-lo, comparando todos os elementos.
Para esse trabalho utilizou-se o seguinte algoritmo em C:
void BubbleSort ( TArray∗ pA)
{
int i , j ;
TItem aux ;
5 for ( i =0; i pA−Size −1; i ++)
{
for ( j =1; jpA−Size −i ; j++)
{
if (pA−P o s i t i o n s [ j ] . keypA−P o s i t i o n s [ j −1]. key )
10 {
aux = pA−P o s i t i o n s [ j ] ;
pA−P o s i t i o n s [ j ]=pA−P o s i t i o n s [ j −1];
pA−P o s i t i o n s [ j −1]=aux ;
}
15 }
}
}
Programa 1: Algoritmo BubbleSort
Ainda é possível otimizá-lo bastando-se incluir uma variável trocaque veri-
que se houve uma troca de posições dos elementos do vetor, diminuindo o tempo
necessário para a execução do algoritmo bem como o número de comparações.
Possui ordem de complexidade em número de comparações On2
, isto é:
O(n) =
n−2
i=0
n − i − 1 =
n−2
i=0
n −
n−2
i=0
i −
n−2
i=0
1 =
n2
− n
2
(25)
[1]
Na prática esse algoritmo não é comumente utilizado para ordenação de uma
grande quantidade de elementos, uma vez que é muito lento para execução, por isso
4
7. frequentemente, em computação, utiliza-se o método QuickSort. O QuickSort é o
algoritmo de ordenação interna (Memória RAM) mais rápido que se conhece e em
seu melhor caso possui ordem de complexidade n log(n), ou seja, O(n log(n)). [2]
Referências
[1] David Menotti. Algoritmos e Estruturas de Dados I: Ordenação I SelectSort,
InsertSort, BubbleSort. 2009.
[2] David Menotti. Algoritmos e Estruturas de Dados I: Ordenação III QuickSort.
2009.
5