Mapeamento de Rotas Turísticas Inerentes a Analise da
Complexidade de Algoritmos
Ferraz Augusto Diogo Manuel1, Daniel Hahn da Silveira1, Sidney Roberto da Silva Webba1, Priscyla Waleska Targino de Azevedo Simões2, Paulo João
Martins2, Kristian Madeira2
¹Acadêmico do Curso de Ciência da Computação - Departamento de Ciência da
Computação - Universidade do Extremo Sul Catarinense (UNESC) – Criciúma / SC
²Professor(a) do Curso de Ciência da Computação - Departamento de Ciência da
Computação - Universidade do Extremo Sul Catarinense (UNESC) – Criciúma / SC
{ferraz_manuel, danielhahn8, sidney_webba }@hotmail.com, { pri, pjm, kma }@unesc.net
Resumo. Esta pesquisa abrange o trabalho apresentado pelas disciplinas de
Teoria de Grafos, Análise de Algoritmos e Estrutura de Dados II, na 4°fase do Curso de Ciência da Computação da Universidade do Extremo Sul Catarinense. Assim, este artigo busca descrever o desenvolvimento de um sistema de gerenciamento de rotas para pontos turisticos a partir de conceitos de algoritmos associativos da biblioteca padrão do C++, e do algoritmo de Warshall utilizado para representação da acessibilidade das rotas inerentes ao problema, além da analise da eficiencia dos algoritmos utilizados. As principais classes utilizadas foram Cliente e Destino, a primeira permitindo cadastrar os turistas e a segunda, os pontos turísticos devidamente especificados. O aplicativo foi desenvolvido na linguagem C++, no ambiente Dev C++. Pode-se concluir que os objetivos foram alcançados e que os conceitos interdisciplinares puderam ser correlacionados.
Palavras chaves: Estrutura de Dados, Teoria dos Grafos, Algoritmo de Warshall, Container Map, Análise e Eficiência de Algoritmos, Rotas Turisticas.
1. Introdução
O problema apresentado indica como escolher uma rota entre os municípios da cidade de Luanda localizada em Angola, e para a sua resolução é utilizado o algoritmo de Warshall, para determinação da acessibilidade entre os pontos turísticos, e o container Map para representação associativa das informações. Os conceitos pesquisados no desenvolvimento do artigo foram: estrutura de dados (ED), containeres da biblioteca padrão de gabaritos (STL), teoria dos grafos, algoritmo de Warshall, linguagem C++, e análise e complexidade de algoritmos. Considerando estes conceitos este artigo tem como objetivo desenvolver um aplicativo de gerenciamento turístico a partir de conceitos supracitados.
1.1. Estruturas de Dados
O estudo das ED é um componente fundamental no aprendizado da ciência da computação, sobre o qual muitos outros campos da ciência são construídos.
Segundo Lopes (1997), as estruturas e os algoritmos representam a base a partir da qual a tecnologia de software é desenvolvida. O uso de algoritmos eficientes depende muito do emprego de ED adequadas.
Segundo Drozdek (2008), na linguagem C++ um container é uma ED que contém alguns objetos que usualmente são do mesmo tipo. Considera-se que tipos diferentes de containeres organizam os objetos dentro deles de maneira diferente, formando blocos de construção fundamentais da Standard Template Library (STL). Dentre os containeres, os associativos são representados por bases de dados relativamente simples, que armazenam dados, como estruturas (structs), classes, entre outros, e cada item de dado possui um valor associado conhecido como sua chave.
O container Map é uma classe que pertence aos containers associativos da STL. Conforme descrito por Gooddrich (2004) um objeto Map armazena seus elementos em ordem por meio dos seus valores de chave. Pode-se especificar a ordem das chaves como um 3° parâmetro, e se não for especificada uma ordem-padrão é utilizada somente crescente. O container map aumenta a eficiência na recuperação de informações quando comparado a outros algoritmos, reduzindo o tempo de resposta. O seu tempo de execução O(log n).
1.2. Teoria dos Grafos e Algoritmo de Warshall
Um grafo é uma estrutura G = (V,E) onde V é um conjunto discreto e E uma família cujos elementos (não vazios) são definidos em função dos elementos de V. Informalmente grafo representa um conjunto não vazio de nós (vértices) e um conjunto de arcos (arestas) tais que cada arco conecta dois nós.
Citando Gersting (2004, pg 339), "Para um grafo G com n nós, o algoritmo de Warshall calcula uma seqüência de n+1 matrizes M0, M1, M2, M3... Mn. Para cada K, 0<=k<=n, Mk[i,j] = 1 se, e somente se, existe caminho em G de ni para nj cujos nós interiores (isso é, nós que não são extremidades do caminho) pertencem apenas ao conjunto de nós {n1, n2,..., nk}, semelhante a álgebra de boole".
A álgebra de Boole pode ser vista como um conjunto B no qual estão definidas duas operações binárias, e uma formalização que generaliza, ou modela os casos considerados.
As matrizes booleanas são matrizes que têm apenas elementos iguais a 0 ou 1. Assim, pode-se definir uma operação booleana de multiplicação A×B para matrizes usando multiplicação e soma booleanas, ao contrario de multiplicação e adição usuais.
Multiplicação booleana : x^y = min(x,y) Adição booleana: x v y = max(x,y) Figura 1.
Para executar o algoritmo de Warshall é necessário um trabalho total de O(n3), medido pelo número de operações boleanas E/OU realizadas.
2. Estudo de Caso
O presente estudo de caso apresenta uma implementação voltada ao estudo da acessibilidade entre bairros, tendo como critério o comprimento do caminho de acesso ao bairro selecionado. Os clientes são os turistas que buscam visitar alguns locais da referida cidade, e têm como opção de escolha pontos turísticos localizados em 9 bairros diferentes da cidade de Luanda (Figura 2). A partir da multiplicação boolena de matrizes e do algoritmo de Warshall é determinada a rota de acesso ao bairro cujo ponto turístico deva ser visitado.
Figura 2. Mapa dos Municípios da Cidade de Luanda As classes definidas são apresentadas no diagrama ilustrado na figura 3.
Figura 3. Diagrama UML das principais classes usadas na implementação
2.1. Implementação do Aplicativo
Inicialmente o aplicativo foi desenvolvido na linguagem de programação C++ mas em diferentes ambientes e sistemas operacionais, onde cada membro da equipe
utilizou um ambiente e sistema operacional distinto: NetBeans com o uso dos sistemas operacionais MacOSX e Linux; CodeBlocks com o uso do sistema operacional Windows Vista, e Dev C++ com o uso do sistema operacional Windows Xp. Ao final padronizou-se todos os códigos no ambiente Dev C++ e sistema operacional a fim de facilitar o gerenciamento de recursos gráficos na interface.
Foi utilizado o algoritmo Warshall para a criação da matriz de acessibilidade dos bairros, e a multiplicação de matrizes booleanas para criação das matrizes de comprimento n, onde o valor de n é informado pelo o usuário. O sistema fornece inserção, remoção, alteração e consulta de cadastros bem como a criação de relatórios diários (Figura 4).
Figura 4. Imagem das telas do Programa
3. Conclusão
Pode-se concluir que o objetivo foi alcançado, com o desenvolvimento de um aplicativo voltado ao gerenciamento de rotas turísticas baseado nos conceitos apresentados nas disciplinas de Estrutura de Dados II, Teoria dos Grafos e Análise de Algoritmos, durante o primeiro semestre de 2008. Considera-se que os conceitos puderam ser aplicados e inter-relacionados ressaltando a aplicabilidade dos conceitos das disciplinas acima para a resolução do problema.
Referencias
Drozdek, A. (2008) "Estrutura de Dados e Algoritmos em C++". 1 ed. São Paulo: Cengage Learning.
Netto, P. O. B. (2006) "Grafos: Teoria, Modelo e Algoritmos". 4 ed. São Paulo: Edgard Blucher.
Gersting, J. L.. (2004) "Fundamentos Matemáticos para Ciência da Computação". 5 ed. Rio de Janeiro. LTC-Livros Tecnicos e Cientificos S.A..
Gooddrich, M. T.. (2004) "Projeto de Algoritmos". 1 ed. São Paulo. Bookman.
Lopes, A. V. (1999) "Estrutura de Dados para Construção de Software". 1 ed. Rio Grande do Sul. Ulbra.