Utilização do algoritmo Warshall para Localização de Rotas em um Serviço de Moto-Entrega Anderson Torquato Cardoso1, Rodrigo Rocha da Silva1, Carlos Antonio Rodrigues1, Priscyla Waleska Targino de Azevedo Simões2, Paulo João Matins2, Kristian Madeira2 1 Acadêmico do curso de Ciência da Computação – Unidade Acadêmica de Ciências, Engenharias e Tecnologias - Universidade do Extremo Sul Catarinense (UNESC) – Criciúma, SC - Brasil 2 Professor(a) do curso de Ciência da Computação - Unidade Acadêmica de Ciências, Engenharias e Tecnologias - Universidade do Extremo Sul Catarinense (UNESC) – Criciúma, SC - Brasil {andgimmo, rodrigors5}@hotmail.com, [email protected], {pri, pjm, Kma}@unesc.net Resumo. A presente pesquisa representa um trabalho interdisciplinar envolvendo Estrutura de Dados II, Teoria dos Grafos e Análise de Algoritmos na 4ª fase do curso de Ciência da Computação Unesc. Seu objetivo foi desenvolver um sistema para o gerenciamento de rotas de tele-entrega a partir das Coleções do Java, algoritmo de Warshall utilizado para a representação da acessibilidade das rotas inerentes ao problema, além da análise da eficiência e complexidade dos algoritmos utilizados. As classes utilizadas foram: JanelaCriarEntrega, JanelaEntregasAbertas, MovimentaMotoBoy, MovimentaCliente, MovimentaRotas, MovimentaEntrega. O aplicativo foi desenvolvido em Java no ambiente NetBeans 6.1. Com essa pesquisa pode-se concluir que seu objetivo foi alcançado e que os conceitos abordados nas disciplinas da quarta fase puderam ser aprofundados. Palavras-chave: Estrutura de Dados; Coleções do Java; Map; Teoria dos Grafos; Algoritmo de Warshall; Análise de Algoritmos; Tele-Entrega. 1. Introdução A partir dos conceitos apresentados na quarta fase do curso de Ciência da Computação da Universidade do Extremo Sul Catarinense foi possível desenvolver um aplicativo que permita correlacioná-los, assim estudou-se os seguintes assuntos: estrutura de dados, coleções de estrutura de dados em java, linguagem java, análise e complexidade de algoritmos, e algoritmo de Warshall. A partir destes conceitos, este artigo apresenta uma aplicação de serviço de Tele-Entrega para clientes do município de Içara localizado em Santa Catarina. 2. Teoria dos Grafos O projeto e análise de estruturas de dados eficientes foi há muito reconhecido como um dos temas-chave dentro da computação, pois seu estudo faz parte do núcleo essencial de disciplinas na maior parte dos cursos de Ciência da Computação ou Engenharia da Computação brasileiros. Um grafo é composto por um conjunto de nós e um conjunto de arestas e, pela forma como é composto, pode-se determinar se é regular, conexo ou acíclico. O nó representa “uma entidade”, tal como “uma fruta”,” uma pessoa” ou “um pedaço de terra”, sendo também conhecido como vértice ou ponto. E a aresta é a relação que liga dois nós, tal como “irmão”, ligando duas “pessoas”, sendo também conhecido como arco ou linha, onde G é o nome do grafo, n é o número de nós e a é o número de arestas. Por exemplo, se um grafo D possui aresta que representa a função “X é chefe de Y”, dizemos que D possui arestas orientadas, ou seja, é um grafo orientado [Villas 2003]. Entre os algoritmos de grafos, o de Warshall consiste em apresentar acessibilidade a partir de uma tabela binária, ou seja, uma matriz de adjacência que em grafos é denomina de fechamento transitivo do grafo original, ou seja, por exemplo se você puder chegar a partir do nó L ao nó M e puder chegar a partir de M a N, então poderá chegar de L a N [Lafore 2004]. Pode-se desejar ter conhecimento se um nó (lugar) pode ser alcançado a partir de outro. Por exemplo, em uma viagem de Criciúma a Salvador de avião, caso o passageiro não se importe que o vôo faça paradas intermediárias. Examinando a tabela de conectividade, é necessário buscar todas as entradas em uma linha, o que levaria tempo O(N) (onde N é o número médio de nós alcançados a partir de um dado nó). Mas caso se tenha pressa é possível saber esse tipo de informação, fazendo uma tabela, ou seja, em tempo O(1) se um nó pode ser alcançado a partir de outro [Lopes 1999]. 3. Coleções no JAVA A coleção na linguagem Java também representa as estruturas de dados que podem armazenar objetos. As interfaces de coleção definem as operações que um programa pode executar sobre cada uma. Essas implementações são cuidadosamente construídas para execução rápida e utilização eficiente da memória, e incentivam a reutilização de software fornecendo funcionalidade conveniente [Deitel e Deitel 2003]. No framework de coleções de Java, no pacote Java.util está incluído a interface Map que associa chaves a valores [Deitel e Deitel 2003]. Uma simples forma de implementar um map é armazenar suas n entradas em uma sequencia S, implementada internamente como uma lista duplamente encadeada. A execução dos métodos fundamentais, get(k), put(k, v) e remove(k), envolve busca simples sobre S procurando por uma entrada com chave k. Cada um dos métodos fundamentais leva o tempo O(1) em um map com n entradas, pois cada método pesquisa, no pior caso, em toda a sequência [Goodrich e Tamassia 2002]. 4. Estudo de Caso O aplicativo resultante desse trabalho interdisciplinar busca aplicar o paradigma de orientação a objetos em uma problemática que envolva grafos, que selecione e defina rotas para entrega de encomendas feitas por clientes, a partir de um serviço de MotoEntrega. 4.1. Definição de classes O problema e representado pelas seguintes classes ilustradas na figura 1: Cliente (com cnpj, nome e endereço); ClientesDAO (trata da gravação em arquivo do objeto cliente); MovimentaCliente (manipula os objetos clientes com opções de gravação, exclusão, alteração e pesquisa); Entrega (representa o objeto entrega com código e clientes); EntregaDAO (trata da gravação em arquivo do objeto entrega); MovimentaEntrega (manipula os objetos entregas com opções de gravação, exclusão e pesquisa); MotoBoy (representa o objeto motoboy com cpf, nome e idade); MotoBoysDAO (trata da gravação em arquivo do objeto motoboy); MovimentaMotoBoy (manipula os objetos motoboys com opções de gravação, exclusão, alteração e pesquisa); Rotas (representa o objeto rota com matrizes de adjacência e de acessibilidade); MovimentaRotas (manipula os objetos rotas com opções de pesquisas em matrizes para determinar tamanhos de caminhos). Erro! Figura 1: Diagrama de Classes 4.2. Inplementação do Aplicativo O aplicativo foi desenvolvido em Java a partir do ambiente NetBeans 6.1. Ao clicar no menu localizado na interface principal ilustrada na figura 2, apareceram duas opções, cadastros e entregas. Na opção cadastro, tem-se duas opções de cadastro e uma de pesquisa, sendo uma para clientes e a outra para motoboy. Para cadastrar um motoboy é necessário informar o CPF, nome do cliente e idade. Caso haja erro no registro, pode ser feita a alteração ou exclusão do mesmo na própria interfase. Para cadastrar um cliente é necessário informar o CNPJ, nome, endereço, possíbilitando também alterar ou excluir um cadastro. A opção de pesquisa permite localizar um cliente ou motoboy. Na opção entrega localizada, é possível criar ou consultar as entregas. Para criar uma entrega, deve-se indicar a origem da entrega, o motoboy que fará a entrega e seu destino. Para consultar uma entrega basta selecioná-la e as respectivas informações são exibidas. Figura 2: Interface do sistema 3. Conclusão Pode-se concluir com o desenvolvimento deste trabalho interdisciplinar que o objetivo foi alcançado, portanto resultou em um aplicativo voltado ao gerenciamento de rotas baseado em conceitos apresentados em Estrutura de Dados II, Teoria dos Grafos, Análise de Algoritmos, durante o 1º semestre de 2008. Referências Marcos, Vianna Villas. (1993) “Estrutura de Dados”, Rio de Janeiro: Editora Campus Ltda. Lafore, Robert. (2004) “Estrutura de Dados & Algoritmos em Java”, Rio de Janeiro: Editora Ciência Moderna Ltda. Lopes, Arthur Vargas. (1999) “Estrutura de Dados para a Construção de Software”, Canoas: Editora Ultra. Deitel, H. M. e Deitel, P. J. (2003) “Java Como Programar”, Porto Alegre: Editora Bookman. Goodrich, Michael T. e Tamassia, Roberto. (2007) “Estruturas de Dados e Algoritmos em Java”, Porto Alegre: Editora Bookman. Hubbard, John. (2006) “Teoria e Problemas da Programação com Java”, Porto Alegre: Editora Bookman. Koosis, Donald e Koosis, David. (1998) “Programação com Java”, Rio de Janeiro: Editora Campus.