ermac comparaÇÃo entre algoritmos empregando mÉtricas e conceitos bÁsicos, funcionando como...

7

Click here to load reader

Upload: geraldo-pereira

Post on 29-Jul-2015

107 views

Category:

Documents


2 download

DESCRIPTION

COMPARAÇÃO ENTRE ALGORITMOS: EMPREGANDO MÉTRICAS E OMPARAÇÃO CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOSGeraldo Pereira Rocha FilhoE-mail: [email protected] EResumo:Trata-se da comparação entre algoritmos, destacando o conhecimento matemático. Os algoritmos de ordenação são apresentados e examinados, considerando os princípios de analise de algoritmo. Os resultados mostram a importância de um projeto na construção de um algoritmo e permitem decidir qual algoritmo para uma determinada situação.

TRANSCRIPT

Page 1: ERMAC COMPARAÇÃO ENTRE ALGORITMOS EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

II Encontro Regional de Matemática Aplicada e Computacional

COMPARAÇÃO ENTRE ALGORITMOS:CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE

ANÁLISE, CONSTRUÇÃO E

1Universidade Estadual do Sudoeste da BahiaEstrada do Bem Querer, Km 4, Bairro Universitário, 45000

E

Abstract. It is the comparison between algorithms, emphasizing mathematical

knowledge. The sorting algorithms are

the principles of algorithm analysis. The results show the importance of a

project to build an algorithm and they can decide which algorithm to a given

situation.

Resumo: Trata-se da

conhecimento matemático.

examinados, considerando os

resultados mostram a importância de um projeto na construção de um

algoritmo e permitem decidir qual algoritmo

1. Considerações Iniciais

Algoritmos são conjuntos de passos sequênciais que não possuetêm um objetivo específico e que devempossuir esforços finitos. Neste ultimo caso, quanto menor for o tempo e esforço, mais rápido e eficaz será o algoritmoárea da computação quanto engenharias, dentre outras. atender um telefone celularobjeto, obtê-lo, apertar a tecla tempo necessário para atender onde o celular está localizado, como alcançápara finalizar o processo de atendimento mais rapidamente. Algoritmo serve como um norteadorexecução dos algoritmos. Abaixo,

Figura 1. Ilustração de Black Box de um algoritmo genérico.

De fato, existem diferentes métodos na Computação para saber se um algoritmo

II ERMAC 2011II Encontro Regional de Matemática Aplicada e Computacional

Vitória da Conquista, Bahia24 à 27 de Outubro de 2011

OMPARAÇÃO ENTRE ALGORITMOS: EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE

ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

Geraldo Pereira Rocha Filho1 Universidade Estadual do Sudoeste da Bahia

Estrada do Bem Querer, Km 4, Bairro Universitário, 45000-000, Vitória da Conquista, BA, Brasil

E-mail: [email protected]

It is the comparison between algorithms, emphasizing mathematical

knowledge. The sorting algorithms are showed and examined by considering

the principles of algorithm analysis. The results show the importance of a

t to build an algorithm and they can decide which algorithm to a given

se da comparação entre algoritmos, destacando

conhecimento matemático. Os algoritmos de ordenação são apresentados e

, considerando os princípios de analise de algoritmo. Os

mostram a importância de um projeto na construção de um

decidir qual algoritmo para uma determinada situação

rações Iniciais

mos são conjuntos de passos sequênciais que não possuem ambigum um objetivo específico e que devem, também, serem feitos em um tempo finito e

possuir esforços finitos. Neste ultimo caso, quanto menor for o tempo e esforço, mais rápido e eficaz será o algoritmo em questão. Tal conceito de algoritmo serve tanto para a área da computação quanto para as demais áreas adjacentes, matemática, física,

A idéia de algoritmo também é percebível no dia a dia, como atender um telefone celular, por exemplo. Para esse processo, é necessário encontrar o

lo, apertar a tecla “aceitar”, levar o item na orelha e falar tempo necessário para atender ao telefone celular varia de pessoa para pessoa. Saber

r está localizado, como alcançá-lo e o que falar é um fator determinante para finalizar o processo de atendimento mais rapidamente. Assim, a

mo serve como um norteador para o estudo da construção, investigação e Abaixo, figura 1, uma abstração de um algoritmo genérico.

Figura 1. Ilustração de Black Box de um algoritmo genérico.

xistem diferentes métodos na Computação para saber se um algoritmo

II ERMAC 2011 II Encontro Regional de Matemática Aplicada e Computacional

Vitória da Conquista, Bahia 24 à 27 de Outubro de 2011

EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE

EXECUÇÃO DE ALGORITMOS

000, Vitória da Conquista,

It is the comparison between algorithms, emphasizing mathematical

examined by considering

the principles of algorithm analysis. The results show the importance of a

t to build an algorithm and they can decide which algorithm to a given

destacando o

apresentados e

analise de algoritmo. Os

mostram a importância de um projeto na construção de um

para uma determinada situação.

m ambiguidades e que serem feitos em um tempo finito e

possuir esforços finitos. Neste ultimo caso, quanto menor for o tempo e esforço, mais tmo serve tanto para a

matemática, física, no dia a dia, como ssário encontrar o

, levar o item na orelha e falar “alô”. Porém o telefone celular varia de pessoa para pessoa. Saber

falar é um fator determinante ssim, a Análise de

para o estudo da construção, investigação e itmo genérico.

Figura 1. Ilustração de Black Box de um algoritmo genérico.

xistem diferentes métodos na Computação para saber se um algoritmo

Page 2: ERMAC COMPARAÇÃO ENTRE ALGORITMOS EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

está se comportando de forma eficiente e eficaz. Um método viável é medir o tempo computacional, em milissegundo, para notar o desempenho do algoritmo em determinada situação. É preciso ter em mente que o tempo irá variar a depender do tamanho da entrada, quanto maior a entrada mais tempo de processamento será necessário.

Um dos grandes males na construção de um algoritmo, é que a maioria não leva em conta a complexidade na hora de idealizar um projeto. Toscani e Veloso (2008) expõem sobre esse assunto, em especial, quando discorre que o processo seria mais eficiente se o tema exposto também fosse levado em consideração.

Para colocar em prática a análise do algoritmo é fundamental saber o que é desempenho e como alcançá-lo, conhecer o que é uma cota assintótica superior, inferior e limite assintótico, ter noção de qual estratégia (método Guloso, Dinâmico e Dividir para Conquistar) a ser usada e escolher um algoritmo para fazer a análise.

2. Idéias básicas para a análise de algoritmos.

“Algoritmos são o cerne da computação. Um programa codifica um algoritmo de modo a ser executado em um computador, resolvendo assim um problema.” (TOSCANI; VELOSO, 2008, p. 1). Na prática, é fundamental que a eficiência e eficácia, em relação ao dispêndio de tempo e de memória, estejam andando juntas.

Um algoritmo é construído e depois analisado quanto à sua complexidade. “O processo, entretanto, seria mais eficaz se a complexidade fosse um fator integrante do projeto do algoritmo.” (TOSCANI; VELOSO, 2008, p. 27). Ter em mente idéias como complexidade (otimista, media e pessimista em relação ao tempo de execução), crescimento assintótico1 e estratégias de construção de algoritmos, são fundamentais para uma boa análise e implementação dos algoritmos. Segundo Ziviani (1999), os algoritmos de ordenação são bons exemplos para fazer a sua análise em tempo de execução e examinar sua estratégia de projeto. Por esse motivo, os utilizaremos aqui no processo de comparação, mostrando quais os algoritmos mais eficazes para uma determinada situação.

2.1. Desempenho

Cormen et. al. (2002) discorre sobre a análise do algoritmo, dizendo que:

“analisar um algoritmo significa prever os recursos de que o algoritmo necessitará. Ocasionalmente, recursos como memória, largura de banda de comunicação ou hardware de computador são a principal preocupação, mas com freqüência é o tempo de computação que desejamos medir.” (CORMEN ET. AL., 2002, p. 16).

As analises dos algoritmos de ordenação serão feitas, no tópico 3, com uma máquina que possui as seguintes configurações:

• Processador Core2 Duo P8700 2,53GHz (velocidade do clock).

• Memória cachê 3 MB.

• Memória RAM 3 GB DDR3 1066MHz.

Pode-se construir ou esquadrinhar um algoritmo por meio de três estratégias:

1 O crescimento assintótico de uma função - f(x) - é a analise do comportamento a ser observado quando

o x da função tende ao infinito.

Page 3: ERMAC COMPARAÇÃO ENTRE ALGORITMOS EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

método Guloso, Dinâmico e Dividir para Conquistar. Segundo Toscani e Veloso (2008), essas três estratégias baseiam-se na idéia de decomposição de problema complexos em outros mais simples, cujas soluções serão combinadas para fornecer uma solução para o problema original. As técnicas mencionadas têm como objetivos facilitar a construção do algoritmo e auxiliar a compreensão na hora de sua análise.

Tomaremos como analise o tempo de execução tanto no pior caso (analise pessimista) quanto nos casos médio e otimista dos algoritmos. Com base em Cormen et. al. (2002), o pior caso mostra que um algoritmo é um limite superior2 sobre o tempo de execução para qualquer entrada, ou seja, no pior caso, temos a certeza de que ele nunca será pior para qualquer entrada n.

2.2. Crescimento Assintótico

Segundo Ziviani (1999) em “muitas situações podem existir vários algoritmos para resolver o mesmo problema, sendo, pois necessário escolher aquele que é o melhor” (ZIVIANI, 1999, p. 4), tendo em vista que “o custo de utilização de um algoritmo pode ser medido de várias maneiras, uma das formas mais adequada é utilizando um modelo matemático.” (ZIVIANI, 1999, p. 4). Para Toscani e Veloso (2008), o comportamento assintótico de um algoritmo é o mais procurado, já que, para um volume grande de dados, a complexidade torna-se mais importante. O algoritmo assintoticamente mostra-se mais eficiente e é o melhor para todas as entradas; exceto, talvez, para entradas relativamente pequenas. Portanto, para fazer uma comparação/analise, pode-se utilizar:

• Cota Assintótica Superior.

• Cota Assintótica Inferior.

• Limite Assintótico.

Mostramos, no logo abaixo, uma síntese dos conceitos trabalhados por Toscani e Veloso (2008) e por Cormen et. al.(2002), para melhor entender o funcionamento da referida comparação/analise.

2.2.1. Cota Assintótica Superior

Para definir uma Conta Assintótica Superior (CAS), usar-se a notação O em que F(n) é O (G(n)).

O(G(n)) = F(n) : existem constantes positivas c e n0 tais que;

0<=F(n)<=cG(n) para todo n>= n0.

Usamos a notação O para dar um limite superior sobre uma função, dentro de um fator constante. Para todos os valores n à direita de n0, o valor da função F(n) está em ou abaixo de G(n).

2.2.2. Cota Assintótica Inferior

Da mesma forma que a notação O fornece um CAS, a notação Ω fornece uma Cota Assintótica Inferior, para denotar que F(n) é Ω (G(n)).

Ω (G(n)) = F(n) : existem constantes positivas c e n0 tais que;

2 Os tópicos 2.2.1, 2.2.2 e 2.2.3 mostram matematicamente quais algoritmos são mais rápido do que

outros por meio de expressões matemáticas.

Page 4: ERMAC COMPARAÇÃO ENTRE ALGORITMOS EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

0<= c G(n)<= F(n) para todo n>= n0.

Para todos os valores n à direita de n0, o valor de F(n) está em ou acima de G(n).

2.2.3. Limite Assintótico

Para Toscani e Veloso (2008) e Cormen et. al.(2002), a notação Θ define um Limite Assintótico exato e a partir da notação O e Ω pode-se construir Θ.

Para duas funções quaisquer F(n) e G(n), temos F(n) é Θ(G(n)) se e somente se F(n) é O(G(n)) e F(n) é Ω(G(n)).

Θ(G(n)) = F(n): existem constantes positivas c1, c2 e n tais que;

0<= c1G(n)<=F(n)<= c2G(n) para todos n>n0.

Sendo assim, uma função F(n) pertence ao conjunto Θ(G(n)) se existem constantes positivas c1 e c2 tais que ela possa ser “imprensada” entre c1G(n) e c2G(n), para um valor de n suficientemente grande.

3. Caso de Uso entre algoritmos levando em consideração o tempo de execução.

Visto alguns conceitos básicos, cuja importância se reflete, entre outros casos, no processo de se fazer a analise do comportamento assintótico e de tempo de execução, utilizamos como ferramenta DEV C++, que é um Ambiente de Desenvolvimento Integrado (IDE – Integrated Development Environment), para fazer a analise. Para obter uma melhor precisão do tempo (temporização) de execução do algoritmo, a biblioteca Windows.h junto com suas funções QueryPerformanceFrequency e QueryPerformanceCounter também é utilizada3. Ressalva-se que essa biblioteca terá o funcionamento análogo se utilizado em outros sistemas operacionais.

Os algoritmos de ordenação (Insertion sort, Quick sort e Heap sort) são utilizados para fazer a analise. Isso porque, eles constituem bons modelos para resolver problemas computacionais, além de eles serem muito utilizados na vida cotidiana.

“(...)Imagine como seria difícil utilizar um catálogo telefônico se os nomes das pessoas não estivessem listados em ordem alfabética. A atividade de colocar as coisas em ordem está presente na maioria das aplicações onde os objetos armazenados têm que ser pesquisados e recuperados, tais como dicionários, índices de livros, tabelas e arquivos.” (ZIVIANI, 1999, p. 69).

O tempo de execução do algoritmo é analisado a partir do seguinte trecho de código:

3 Para um aprofundamento na questão da biblioteca e suas funções indicamos, como busca, o sitio:

http://support.microsoft.com/?ln=pt-br.

Page 5: ERMAC COMPARAÇÃO ENTRE ALGORITMOS EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

Algoritmo 1 Tempo De Execução/Ação

/* irá obter a frequência do timer: */

QueryPerformanceFrequency((LARGE_INTEGER *)&freq);

/* irá obter o numero de “ticks”: */

QueryPerformaceCounter ((LARGE_INTEGER *)&start);

/* ... Trecho de código a ser analisado como, a exemplo,

Insertion sort, Quick sort e Heap sort. */

/* irá ver qual foi o numero de “ticks” que o algoritmo

utilizou na sua execução: */

QueryPerformanceCounter ((LARGE_INTEGER *)&stop);

/* irá obter o resultado em Milissegundos: */

tempo = ((double)stop-(double)start) / (double)freq;

As análises feitas com os algoritmos de ordenação pelos autores Toscani e Veloso (2008); Cormen et. al. (2002) e Ziviani (1999), são estudadas e apresentadas logo abaixo.

De acordo com esses estudiosos, o tempo de execução no pior caso do Insertion sort, Quick sort são de Θ(n²). Isso porque, este possui pior caso quando é ordenado em ordem inversa; já o Quick sort, a sua pior execução está relacionado como a sua partição4 é feita. Ressalta-se o fato de ele possuir tempo de execução media de Θ(nlogn). O Heap sort utiliza uma estrutura de dados chamada heap (monte), para armazenar e manipular informações durante a sua execução. Este desempenha tanto no pior caso quanto no caso médio complexidade Θ(nlogn), por isso ele figura como uma boa escolha, pois alguns algoritmos de ordenação rápidos possuem tempo de execução grande em cenário ruim. As tabelas5 seguintes mostram o tempo de execução em milissegundos versus o tamanho da entrada n, para o algoritmo Insertion sort, Quick sort e Heap sort. Eles são analisados em tempo de execução em milissegundos na ordem aleatória, crescente e descendente para entradas 10000, 50000 e 100000.

Entrada

Insertion sort Quick sort Heap sort

10000 0.14018 ms 0.00135 ms 0.0028 ms 50000 3.399 ms 0.00735 ms 0.01664 ms 100000 13.550 ms 0.01588 ms 0.03654 ms

Tabela 1. Valores aleatórios com tempo de execução em milissegundos.

4 A partição do Quick sort definirá a eficiência do processo de ordenação.

5 Os resultados das tabelas foram obtidos a partir das manipulações das funções QueryPerformanceFrequency e QueryPerformanceCounter da biblioteca Windows.h, discutida neste artigo.

Page 6: ERMAC COMPARAÇÃO ENTRE ALGORITMOS EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

Entrada

Insertion sort Quick sort Heap sort

10000 0.26955 ms 0.00071 ms 0.00224 ms 50000 6.71530 ms 0.00360 ms 0.01293 ms 100000 26.531 ms 0.00726 ms 0.02746 ms

Tabela 2. Valores decrescentes com tempo de execução em milissegundos.

Entrada

Insertion sort Quick sort Heap sort

10000 0.00016 ms 0.00065 ms 0.00356 ms 50000 0.00061 ms 0.00336 ms 0.02132 ms 100000 0.00092 ms 0.00690 ms 0.04457 ms

Tabela 3. Valores crescentes com tempo de execução em milissegundos.

O tópico 4, Considerações Finais, apresenta um resultado similar ao do pesquisador Ziviani (1999), que utilizou cinco métodos de ordenação, no qual foram estudados dois métodos simples (Seleção e Inserção) que requerem O(n2) comparações e três métodos eficientes (Shellsort, Quicksort e Heapsort) e que demandam O(nlogn) comparações. O tamanho das entradas utilizadas por ele foram 500, 5000, 10000 e 30000, para todos os algoritmos. Os desempenhos desses algoritmos foram, por ele, apresentados em tabelas e analisados na ordem aleatória, ascendente e descendente, dessa forma, têm-se quadros comparativos do tempo real para os algoritmos de ordenação.

4. Considerações Finais

Analisando os dados das tabelas 1, 2 e 3 obtemos a seguinte conclusão:

À medida que a entrada n cresce, o seu tempo de execução acompanha o aumento. É notório que o Insertion sort é mais rápido quando ele está em ordem crescente - melhor caso O(n) -, e mais lento quando ele é executado em ordem decrescente e aleatória - O(n²).

O Quick sort executado em ordem aleatória e decrescente é o mais rápido de todos, mesmo no seu pior caso O(n²). A melhor forma de o pior caso ter menos probabilidade de ocorrer é fazendo uma boa escolha do pivô. Por ele utilizar a estratégia de dividir para conquistar (recursiva) é necessário ter em mente - para entrada bastante grande (n > 1000000) - que o estouro da pilha pode acontecer.

O Heap Sort ao contrário do Quick sort não precisa de nenhuma memória adicional. Destaca-se que ele mantém tempo de execução estável, independente da sua arrumação, ou seja, tanto no pior, médio ou melhor caso é de O(nlogn). Para aplicações em que o tempo de execução não poderá variar dramaticamente o Heap sort mostrou ser uma boa escolha, visto que o seu tempo de execução não é sensível a ordenação.

Os algoritmos de ordenação servem como base para observar como os mesmos se comportam para determinadas entradas. Outros algoritmos poderão ser analisados da mesma maneira, seguindo um modelo matemático.

Page 7: ERMAC COMPARAÇÃO ENTRE ALGORITMOS EMPREGANDO MÉTRICAS E CONCEITOS BÁSICOS, FUNCIONANDO COMO ORIENTAÇÃO DE ANÁLISE, CONSTRUÇÃO E EXECUÇÃO DE ALGORITMOS

Referências

CORMEN, Thomas H.; ET. AL. Algoritmos: teorias e práticas. Rio de janeiro: Elsevier, 2002.

MICROSOFT, Suporte. Disponível em <http://support.microsoft.com/?ln=pt-br>. Acesso em 6 de fev, 2011.

TOSCANI, Laira Vieira; VELOSO, Paulo A. S. Complexidade de Algoritmos. 2. ed. UFRGS, Bookman, 2008.

ZIVIANI, Nivio. Projeto de Algoritmos com Implementações Pascal e C. 4. ed. São Paulo: Pioneira, 1999.