Utilização do algoritmo Warshall para Localização de Rotas em um

Propaganda
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.
Download