Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Algoritmo Dijkstra para rotas turísticas em São Luís
1. UNIVERSIDADE ESTADUAL DO MARANHÃO - UEMA
CENTRO DE CIÊNCIAS TECNOLÓGICA- CCT
PROGRAMA DE PÓS-GRADUAÇÃO
MESTRADO EM ENGENHARIA DA COMPUTAÇÃO E
SISTEMAS
DISCIPLINA: PROJETO DE ALGORITMO
Grafos: algoritmo de busca do menor caminho
entre os pontos turísticos de São Luís – Ma, usando
Dijkstra
Francisco Adelton Alves Ribeiro
João Batista Paiva Junior
José Wilker Luz
Lidinalva Almada Coutinho
Prof. Josenildo Silva
3. INTRODUÇÃO
• Das inúmeras utilizações dos grafos como: análise
de circuitos, análise e planejamento de projetos,
genética, linguística, ciências sociais, robótica entre
outras, uma delas é a otimização de percursos.
• Por meio da conjugação do uso de grafo e do
Algoritmo de Dijkstra é possível calcular o caminho
mais curto para realizar determinado percurso.
4. INTRODUÇÃO
Um dos algoritmos mais utilizados para resolver o
problema do Caminho Mínimo é o algoritmo de
Dijkstra. Este algoritmo garante a obtenção do
caminho ótimo entre um nó de referência do grafo
e os demais.
Nas últimas décadas, a revolução das
comunicações tem provocado uma explosão na
comunicação sem fio.
5. INTRODUÇÃO
Em especial smartphones, dispositivos e-reader e
tablets.
Com ênfase no Sistema Operacional Android, que
vem impulsionando a inovação na tecnologia móvel.
Os aplicativos Android são desenvolvidos com Java.
O Java é usado para desenvolver aplicativos
empresariais de larga escala.
6. INTRODUÇÃO
Além de permitir desenvolver aplicativos utilizando
grafos que são executados em uma variedade de
dispositivos, sem nenhum código específico para a
plataforma.
PROBLEMA
Como conseguir o menor caminho entre os principais
pontos turísticos de São Luís-Ma, utililizando o
algoritmo Dijkstra.
7. INTRODUÇÃO
OBJETIVOS
• integrar técnicas computacionais de
programação, tendo como base o algoritmo de
Dijsktra para a solução de problemas, usando
cálculo para o custo mínimo com informações
obtidas através do uso do API do Google Maps,
o qual facilita a busca de pontos turísticos
importantes na cidade de São Luís-MA.
• descrever o funcionamento do referido
algoritmo, permitindo a sua implementação a
nível informático;
8. INTRODUÇÃO
• apresentar detalhes de sua implementação de
grafos, detalhando as estruturas de dados
utilizadas e a API (métodos de criar, adicionar
vértices, arestas, percorrer etc.);
• fazer uma análise teórica sobre correção e a
complexidade do algoritmo utilizado para
resolver o problema proposto;
9. INTRODUÇÃO
• fazer previsões teóricas sobre limite de tamanho de problema
resolvível e quantidade de tempo necessário;
• realizar experimentos para verificar se a performance das
operações implementadas estão de acordo com análise
teórica;
• utilizar conjuntos de dados grandes o suficiente para
demonstrar que sua análise teoria esta correta.
• Nesse trabalho, propõe-se uma metodologia para determinar
o caminho de menor custo entre dois pontos em uma dada
região.
10. INTRODUÇÃO
• Para alcance dos objetivos propostos neste
artigo, é necessário uma sistematização das
informações relevantes para a construção do
aplicativo para dispositivos móveis que garanta
boa interatividade durante todo processo de
interação.
• busca-se desenvolver uma ferramenta
computacional que garanta aos usuários de
dispositivos móveis utilizarem a plataforma
Android para determinar o caminho de menor
custo entre os principais pontos turísticos da
cidade de São Luís-Ma.
11. INTRODUÇÃO
O artigo está estruturado da seguinte forma:
• Grafos, especificando o uso do algoritmo Dijkstra;
• Android, objetivando uma fundamentação para o uso
de ambientes de dispositivos móveis;
• O Google Maps no contexto tecnológico, contribuindo
para o desenvolvimento do aplicativo, possibilitando
o uso mais interativo no desenvolvimento de
habilidades que serão úteis para uma prática
eficiente e eficaz.
12. INTRODUÇÃO
• Metodologia utilizada, incluindo a implementação
do algoritmo Dijkstra e a sua complexibilidade; e,
• Considerações finais.
• Espera-se que as ideias e concepções
apresentadas neste trabalho tragam valiosas
contribuições no contexto da sociedade atual.
13. GRAFOS
• Origem de teoria dos Grafos: Originou-se
de jogos e recreações matemática, atribui-
se a sua criação a Leonhard Euler, ao
resolver o problema das pontes de
Königsberg em 1736.
14. GRAFOS
• Mas foram os problemas acerca de formulas
estruturais de compostos químicos, que A.
Cayley resolveu na segunda metade do século
XIX, que a começaram a desenvolver
(FEOFILOFF, 2005, p.8).
16. GRAFOS
• Conceito: Conjunto de elementos (nós ou
vértices) que se relacionam de alguma maneira
através de arcos ou arestas, tais relações podem
possuir valor ou não.
17. O ALGORITMO DE DIJKSTRA
• O Algoritmo de Dijkstra foi desenvolvido
em 1959 por Edsger Wybe Dijkstra, de
onde vem a origem do nome. Este
algoritmo se aplica em grafos simples para
determinar o caminho mínimo entre dois
vértices.
18. O ALGORITMO DE DIJKSTRA
• Ele é desenvolvido em uma árvore de
caminhos mínimos. Quando o grafo não
for simples, então procura-se transformá-
lo em um grafo simples eliminando seus
laços e eventuais arestas múltiplas
deixando apenas a com o peso menor.
20. FUNCIONAMENTO DO ALGORITMO DE
DIJKSTRA, UTILIZANDO PONTOS
TURÍSTICOS DE SÃO LUÍS-MA
Fonte: https://maps.google.com.br/maps?hl=pt-BR&tab=wl
21. FUNCIONAMENTO DO ALGORITMO DE
DIJKSTRA
Fonte: https://maps.google.com.br/maps?hl=pt-BR&tab=wl modificado pelos autores
8,6km
29,5km
15km
23,4km
21,3km
28km
17km
26,7km
22. FUNCIONAMENTO DO ALGORITMO DE
DIJKSTRA
Fonte: https://maps.google.com.br/maps?hl=pt-BR&tab=wl modificado pelos autores
8,6km
29,5km
15km
23,4km
21,3km
28km
17km
26,7km
23. FUNCIONAMENTO DO ALGORITMO DE
DIJKSTRA
Fonte: https://maps.google.com.br/maps?hl=pt-BR&tab=wl modificado pelos autores
8,6km
29,5km
15km
23,4km
21,3km
28km
17km
26,7km
24. ANDROID
• É um sistema operacional baseado no núcleo
Linux para dispositivos móveis.
• Foi desenvolvido pela Android, adquirida pelo
Google em julho de 2005. Em novembro de
2007, foi formada a Open Handset Alliance –
um consórcio compost inicialmente de 34
empresas e agora contando com 81
(www.openhandsetalliance.com/oha_member
s.html.
25. VISÃO GERAL DO ANDROID
A primeira geração de telefones Android foi
lançada em outubro de 2008. De acordo
com a Gartner, as vendas de telefones
baseados em Android nos Estados Unidos
aumentaram 707% no primeiro trimestre de
2010, em relação ao ano anterior.
26. VISÃO GERAL DO ANDROID
Em março de 2011, um estudo da Nielsen
mostrou que o Android tinha 37% da fatia
de mercado de smartphones nos Estados
Unidos, comparados com 27% do iPhone da
Apple e 22% do Blackberry.
27. CÓDIGO-FONTE ABERTO
• Uma vantagem de desenvolver aplicativos
Android é a franqueza (ou grau de
abertura) da plataforma. O sistema
operacional é de código-fonte aberto e
gratuito. Isso permite ver o código-fonte
do Android e como seus recursos são
implementados.
28. JAVA
• Os aplicativos Android são desenvolvidos com
Java – a linguagem de programação mais usada
do mundo. Essa linguagem foi uma escolha
lógica para a plataforma Android, porque é
poderosa, gratuita e de código-fonte aberto.
• Permite desenvolver aplicativos que são
executados em uma variedade de dispositivos,
sem nenhum código específico para a
plataforma.
29. ANDROID E SUAS VERSÕES
• Primeira versão do Android foi a 1.6;
• Em janeiro de 2010, o Google lançou o Android
2.1;
• Maio de 2010, chega o Android 2.2;
• Android 2.3 chega para os smartphones em
dezembro de 2010;
• Para os tablets, o Android 3.0 chega em janeiro
de 2011, que é a versão mais recente do
sistema dedicado aos smartphones.
30. GOOGLE MAPS
• É um sistema para visualização de mapas na
Web, com o diferencial de ser rápido e
interativo. A localização dos pontos nos mapas é
feita a partir de sua latitude e longitude e esta
informação é administrada pelo próprio usuário.
31. DIFERENCIAL DO GOOGLE MAPS
• Existe uma API (Application Programmming
Interface) para JavaScript, que possibilita a sua
utilização e integração, gratuitamente, com
qualquer página Web.
• Interatividade é um outro diferencial que o
Google Maps oferece.
32. REQUISITOS DE SISTEMA PARA
SOFTWARE E HARDWARE
• Para desenvolver aplicativos Android, precisa-
se de um sistema Windows®, Linux ou Mac
OS X.
• Aplicativos usados para o desenvolvimento:
– JDK (Java Development Kit), versão 5 ou 6;
– Eclipse 3.6.2 (Helios) IDE for Java Developers;
– SDK ( Software Development Kit) do Android,
versão 4.1.2;
– ADT (Android Development Tools) Plugin for
Eclipse.
33. INSTALANDO A(S) PLATAFORMA(S)
ANDROID
• Na IDE Eclipse - Selecione Window > Android SDK
and AVD Manager para exibir a janela Android
SDK and AVD Manager (Fig. 1).
34. INSTALANDO A(S) PLATAFORMA(S)
ANDROID
Selecione Available Packages . A coluna esquerda da
janela mostra Android Repository e Third party Add-
ons como opções. Expanda o nó Android Repository
para ver a lista de ferramentas e plataformas Android
disponíveis. Vamos usar os itens do Android
Repository marcados na Figura 2.
35. INSTALANDO A(S) PLATAFORMA(S)
ANDROID
• Selecionando pacotes do Android Repository
para instalar;
• Selecionando pacotes do Third party Add-ons
para instalação;
36. INSTALANDO A(S) PLATAFORMA(S)
ANDROID
Clique no botão Install Selected para exibir a janela
Choose Packages to Install (Fig. 4). Clique no botão
de opção Accept All e, em seguida, clique no botão
Install . A janela Installing Archives (Fig. 5) vai
aparecer para mostrar o status do processo de
instalação.
37. INSTALANDO A(S) PLATAFORMA(S)
ANDROID
• Quando o processo de instalação terminar, você
pode ver os itens instalados clicando em
Installed Packages na coluna esquerda da
janela Android SDK and AVD Manager . É preciso
fechar e reabrir o Eclipse.
38. USO NO EMULADOR DO ANDROID
• O emulador do Android , incluído no SDK do
Android, permite executar aplicativos Android em
um ambiente simulado em seu computador, em vez
do dispositivo Android real. Antes de executar um
aplicativo no emulador, você precisa criar um AVD
(Android Virtual Device ou Dispositivo Android
Virtual) , que define as características do
dispositivo no qual se deseja fazer o teste,
incluindo o tamanho da tela em pixels, a densidade
de pixels, o tamanho físico da tela, o tamanho do
cartão SD para armazenamento de dados e muito
mais.
39. USO NO EMULADOR DO ANDROID
• No Eclipse -
Selecione Window >
Android SDK and AVD
Manager para exibir
a janela Android SDK
and AVD Manager
(Fig. 1). Por padrão,
Virtual Devices é
selecionado na
coluna esquerda da
janela.
41. COMPLEXIDADE
• A complexidade do algoritmo de Dijkstra
implementando a fila como uma lista não ordenada
é O(n²), onde n é o número de vértices do grafo de
entrada.
• Esta variação é geralmente referenciada como
“implementação ingênua"(naive implementation).
• Talvez a primeira e mais significativa contribuição
para reduzir a complexidade da implementação
ingênua tenha sido feita por Donald Johnson que
introduziu a estrutura de dados denominada heap k-
ário.
42. COMPLEXIDADE
• Esta variação melhora o comportamento
assintótico do algoritmo de Dijkstra para grafos
esparsos. Implementando-se este algoritmo com
um heap binário (k = 2), sua complexidade é
melhorada de O(n2) para O((m + n) log n),
onde m denota o número de arestas.
• O App Turismo implementa uma algortimo
Dijkstra usando pilhas e possui uma
complexidade O((m+n) log n).
43. TEMPO DE EXECUÇÃO
- Os testes do app foram realizados em um tablet
PC, com as seguintes características:
- CPU BoxChip 1.5GHz
- Mémoria RAM: 512 MB DDRII
- Memória interna: 8GB(flash)
- Sistema Operacional: Android 4.0
45. CONSIDERAÇÕES FINAIS
• Através do estudo de grafos, percebe-se que
encontrar caminhos mínimos torna-se uma
tarefa passível de diferentes abordagens.
• O algoritmo de Dijkstra, principal foco deste
trabalho, e sem dúvida o mais aplicado em
problemas de caminhos mínimos do mundo real.
•
46. REFERÊNCIAS
CORMEN, Thomas H. et al., Algoritmos: teoria e prática : Elsevier. Rio de Janeiro 2012;
DUARTE, Alexandre. Algoritmos Avançados. Disponível em: www.slideshare.net/alexandrend/grafos-
parte-1-introduo. Acesso em: 23 de dez de 2012;
FEOFILOFF, Paulo. Algoritmos para Grafos em C via Sedgewick. Disponível em:
http://www.ime.usp.br/~pf/algoritmos_para_grafos/ Acesso em: 22 de dez 2012;
LAFORE, ROBERT. Estruturas de Dados & Algoritmos em Java. editora ciência moderna, 2004.
NEVES, Patrícia Takaki. Variações do algoritmo de Dijkstra-Campinas, [S.P.:s.n.], 2007;
NONATO, Luis G. Algoritmo de Dijkstra. Disponível em: http://www.lcad.icmc.usp.br. Acessado em:
23 de dez de 2012;
Teoria dos Grafos. Disponível em: erinaldosn.files.wordpress.com/2011/02/aula-1-conceitos.pdf. Acesso
em: 23 de dez de 2012;
ZIVIANI, Nivio. Projeto de algoritmos: com implementação em Pascal e C. 3. ed. rev. e ampl.
Cegage Learning, São Paulo 2011.