Anais do 15 DESENVOLVIMENTO DE ALGORITMOS DE

Propaganda
Anais do 15O Encontro de Iniciação Científica e Pós-Graduação do ITA – XV ENCITA / 2009
Instituto Tecnológico de Aeronáutica, São José dos Campos, SP, Brasil, Outubro, 19 a 22, 2009.
DESENVOLVIMENTO DE ALGORITMOS DE COMUTAÇÃO
AUTOMÁTICA DE TELECOMUNICAÇÕES ENTRE PLATAFORMAS DE
COLETA DE DADOS E ESTAÇÕES DE MONITORAMENTO E
CONTROLE
Ricardo Silva Carvalho
Bolsista PIBIC-CNPq, Instituto Tecnológico de Aeronáutica – ITA
[email protected]
Prof. Dr. Adilson Marques da Cunha
Orientador, professor do Instituto Tecnológico de Aeronáutica – ITA
[email protected]
Ricardo Godoi Vieira
Co-orientador, aluno de mestrado do Instituto Tecnológico de Aeronáutica – ITA
[email protected]
Resumo. O propósito deste artigo é dotar o Projeto Integrado de Cooperação Amazônica para a Modernização do Monitoramento
Hidrológico (ICA-MMH B) de algoritmos apropriados para comutação automática eficiente dos canais de comunicação entre
Plataformas de Coleta de Dados – PCDs e Estações de Monitoramento e Controle – EMCs, com a finalidade de melhorar a
eficiência no envio de dados hidrológicos e meteorológicos, otimizando a troca de dados e reduzindo custos operacionais. Para tal,
inicialmente estudou-se tecnologias envolvidas no desenvolvimento de algoritmos, além de ser criada uma base em Engenharia de
Software, para posteriormente, ser realizado um estudo de caso baseado no Projeto ICA-MMH B, onde foi utilizada a linguagem
Java para o desenvolvimento de um software para testar a implementação dos algoritmos desenvolvidos.
Palavras chave: Engenharia de Software, Algoritmos, Engenharia de Telecomunicações.
1. Introdução
O Projeto de Integração e Cooperação Amazônica para Modernização do Monitoramento Hidrológico (ICA-MMH
B) tem por finalidade a elaboração, para uma região hidrográfica de referência, de um sistema-piloto para modernização
e integração de Plataformas de Coleta de Dados (PCDs) hidrológicas capazes de gerenciar, receber e transmitir, com
eficiência, os dados obtidos, que servirão como base para gestão de recursos hídricos.
Por meio desse sistema, serão disponibilizadas as informações, em tempo real, para diferentes entidades e para a
sociedade, como insumos para o desenvolvimento de estudos e para a tomada de decisões. A disponibilização dessas
informações contribuirá, também, para o apoio à tomada de decisões no campo econômico, principalmente as inerentes
às atividades agrícolas, pesqueiras e de navegação, assim como no campo da segurança.
Além dos pontos de coletas, estão previstas algumas Estações de Monitoramento e Controle – EMCs que receberão
os dados hidrológicos das PCDs, através de três formas de telecomunicações (via celular, rádio frequência ou satélite),
garantindo a redundância e a interrogação, em tempo real, e disponibilizando, em seguida, todas as informações em um
banco de dados que poderá ser acessado através da Internet.
O desenvolvimento desse sistema como um todo deverá contribuir para: o progresso científico e tecnológico
nacional na área de coleta, transmissão, tratamento e difusão de dados; a melhoria da atuação do poder público no
gerenciamento de recursos hídricos; e o desenvolvimento da cooperação técnica com países limítrofes na área de
monitoramento hidrológico.
Devido ao grau de complexidade no qual o Projeto se encontra inserido, torna-se necessária a adoção de um
conjunto de metodologias bem definidas, por meio das quais todas as etapas do Projeto possam ser concluídas, da forma
esperada.
Frente ao exposto, para completar com êxito o objetivo do Projeto ICA-MMH B, percebeu-se a necessidade de
utilização eficiente dos canais de comunicação a serem utilizados pelas PCDs para o envio e o recebimento de dados
para as Estações de Monitoramento e Controle (EMCs).
Visando satisfazer essas necessidades, optou-se pelo desenvolvimento de algoritmos computacionais para a
comutação automática dos canais de telecomunicações entre PCDs e EMCs, otimizando-se o desempenho das mesmas
e reduzindo-se gastos de energia, no processo de troca de dados.
2. Desenvolvimento de base do projeto
2.1. RUP – Rational Unified Process
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
Iniciou-se esta pesquisa por meio do aprendizado do Processo Unificado da Rational (Rational Unified Process RUP), que consiste de um conjunto de práticas coletadas de Engenharia de Software que aumenta a produtividade da
equipe de desenvolvedores e oferece melhores práticas relacionadas a software através de diretrizes, templates e
orientações sobre ferramentas para atividades críticas de desenvolvimento de software.
O RUP baseia-se em um desenvolvimento iterativo e uma seqüência de passos incrementais, oferecendo ao projeto
um processo evolutivo e refinado, constantemente ao longo do desenvolvimento. Apesar de ser considerado um
processo preferencialmente aplicável em grandes projetos, o RUP pode ser facilmente adaptado e empregado em
projetos menores.
O RUP obedece a uma arquitetura geral de duas estruturas principais, fases e disciplinas, distribuídas de forma
iterativa e incremental, conforme representado na Fig. 1.
Figura 1. Gráfico modelo de iteração.
2.2. UML – Unified Modeling Language
A Linguagem de Modelagem Unificada (Unified Modeling Language - UML) é uma linguagem visual utilizada
para modelar sistemas computacionais por meio do paradigma de orientação a objetos. É a linguagem padrão para
visualizar, especificar e documentar os artefatos de um sistema intensamente baseado em software, podendo ser usada
em vários processos, durante todo o ciclo de desenvolvimento, e com diferentes tecnologias de implementação.
É importante notar que a UML é um modelo de linguagem e não um método. Um método pressupõe um modelo de
linguagem e um processo, já o modelo de linguagem é a notação que o método usa para descrever o projeto, que é
separado em passos a serem seguidos ou processos.
No contexto do trabalho desenvolvido nesta pesquisa, leva-se em consideração o fator de reusabilidade, essencial
para economizar tempo no processo de manutenção do sistema, para que seja possível realizar uma manutenção com
facilidade e rapidez, sem a indesejável produção de novos erros.
Devido ao foco deste projeto não ser o de modelagem do sistema, mas sim o de desenvolvimento de algoritmos
para a comutação de telecomunicações, a UML será utilizada apenas como ferramenta auxiliar na construção de apenas
dois diagramas, o de Casos de Uso e o de Classes.
O Diagrama de Casos de Uso é usado para identificar como o sistema se comporta nas várias situações que podem
ocorrer durante as suas operações. Os componentes deste diagrama são os atores (entidades) que interagem com o
sistema, e os casos de uso (seqüências de ações) que o sistema executa e produz um resultado de valor para o ator.
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
Os Diagramas de Classes são os mais encontrados em sistemas de modelagem orientados a objetos. Estes
diagramas são utilizados para ilustrar a visão estática do projeto de um sistema, mostrando a sua estrutura de classes,
especificando os métodos e atributos de cada uma, bem como a forma com que estas se encontram relacionadas entre si.
2.3. SysML (Systems Modeling Language)
A Linguagem de Modelagem de Sistemas (Systems Modeling Language – SysML) é uma extensão de um
subconjunto da UML que objetiva a sua especificação, análise, desenho, verificação e validação, o que inclui hardware,
software, dados, pessoas, processos e infra-estrutura. Procurando trazer para a engenharia de sistemas um padrão de
modelagem baseado na UML, a SysML é mantida pela OMG (Object Management Group) em conjunto com o INCOSE
(International Council on Systems Engineering).
Fazendo um paralelo com as classes da UML, em SysML, os blocos representam os elementos básicos de estrutura.
Eles fornecem um conceito amplo para descrever a estrutura de elementos ou sistemas tais como tipos de hardware e
software, dados, procedimentos, pessoas, etc.
Devido à abordagem seguinte feita ao sistema em questão, decidiu-se por não fazer a modelagem SysML para este
projeto.
2.4. XML (eXtensible Markup Language)
Procurando-se otimizar o desempenho dos algoritmos a serem desenvolvidos, sentiu-se a necessidade de
implementar uma linguagem para a descrição sucinta de dados hidrológicos, de fácil implementação e eficientemente
adaptável, de modo que pudesse ser ampla e facilmente utilizada em outros pontos do Projeto ICA-MMH B. A
Linguagem de Marcação Extensível, eXtensible Markup Language – XML, atende a todos os requisitos, pois consiste
em um formato que descreve dados estruturados.
A XML baseia-se em uma estrutura também similar a do HTML, na qual se faz uso de tags, elementos e atributos
para estruturar o documento XML. No entanto, devido à extensibilidade da XML, as tags são plenamente customizáveis,
criando a possibilidade de uma estrutura universal e ao mesmo tempo particular para descrever dados hidrológicos.
2.5. Algoritmos de ordenação
Em ciência da computação, um algoritmo de ordenação é um algoritmo que coloca elementos de uma lista numa
determinada ordem. As ordenações mais usadas são as numéricas e as lexicográficas. A ordenação eficiente é
importante para otimizar o uso de outros algoritmos que necessitam de listas ordenadas de alguma maneira para
funcionarem corretamente. Devido ao limitado uso de ordenação nos algoritmos utilizados, viu-se a necessidade de
estudar atentamente os algoritmos de ordenação Bubblesort e Quicksort.
Bubblesort é um método de ordenação de dados bem direto e simples, utilizado amplamente no ensino de
algoritmos de ordenação. O algoritmo começa no início do conjunto de dados, compara os dois primeiros elementos, e
se o primeiro é maior que o segundo, troca as posições dos mesmos. Isso continua para cada par de elementos
adjacentes até o final do conjunto de dados. Então, começa novamente com os dois primeiros elementos, repetindo até
que nenhuma troca de posição tenha ocorrido na última passagem. Enquanto que simples, o algoritmo é extremamente
ineficiente e raramente é usado, a não ser em educação.
Já o Quicksort é um algoritmo que segue o princípio de dividir para conquistar, que tem por base operações de
particionamento: para particionar uma lista, escolhe-se um elemento, chamado pivô, movem-se todos os elementos
menores que o pivô para antes dele e todos os maiores para depois dele. Após um particionamento, o algoritmo ordena
recursivamente as sublistas menores e maiores. Implementações eficientes do Quicksort são tipicamente ordenações
instáveis e de certa forma complexas, mas estão entre os algoritmos de ordenação mais rápidos na prática, o que torna o
Quicksort um dos algoritmos de ordenação mais populares atualmente. O ponto mais complexo do Quicksort reside na
escolha de um bom elemento pivô, constantemente escolhas erradas de pivôs podem resultar numa performance
bastante lenta, no entanto, se a cada passo da recursão do algoritmo, o elemento mediano é escolhido como pivô, o
algoritmo tem ótima performance.
Após comparação de eficiência, e devido ao destino no projeto do algoritmo de comutação automática, optou-se
pela utilização do Quicksort como algoritmo de ordenação, sendo que o mesmo será utilizado para o tipo “double”.
2.6. Algoritmos de criptografia
No âmbito da criptografia, o algoritmo Data Encryption Standard (DES) é um dos mais conhecidos e mais antigos,
sendo desenvolvido pela IBM em 1974. Com a tecnologia atual, tal algoritmo já pode ser facilmente quebrado,
portanto, optou-se pela utilização do Triple DES, um algoritmo mais atual que aplica o DES três vezes em cada bloco
de dados, e, apesar de ser mais lento, é muito mais seguro.
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
O Triple DES usa, portanto, três chaves de 64 bits (o tamanho máximo da chave é de 192 bits, embora o
comprimento atual seja de 56 bits). Os dados são encriptados com a primeira chave, decriptados com a segunda chave e
finalmente encriptados mais uma vez com a terceira chave, como mostra a Fig. 2. Sendo outro modo mais rápido com o
uso de duas chaves, em vez de três. A variante mais simples do Triple DES opera da seguinte forma: DES( C3 ;
DES( C2 ; DES( C1 ; MSG ))), onde MSG é o bloco de mensagem a ser criptografado e C1, C2 e C3 são chaves DES.
Devido a sua maior confiabilidade, o Triple DES tornou-se um algoritmo popular como alternativa ao DES, sendo
adotado pelo ANS X9.17, ISO 8732, e pelo Privacy-Enhanced Mail (PEM).
Figura 2. Esquema de atuação do algoritmo de criptografia Triple DES.
2.7. Engenharia de Telecomunicações
Procurando entender a comunicação de antenas, com o objetivo de relacionar intensidades de recepção e
transmissão, estudou-se a chamada Fórmula de Friis (ou Lei de Friis), que relaciona a potência transmitida de uma
antena para outra em determinadas condições ideais [9]. Na sua forma mais simples, tem-se que, dadas duas antenas, a
razão da potência recebida pela antena de recepção, Pr, sobre a potência transmitida à antena de transmissão, Pt, pela
Fórmula de Friis, é dada pela Eq. (1).
(1)
Utilizando-se da Eq. (1) para relacionar intensidades, tem-se a Eq. (2), onde Gt e Gr são os ganhos das antenas de
transmissão e recepção, respectivamente, λ é o comprimento de onda e R é a distância entre elas.
(2)
Portanto, para o algoritmo de estimativa de energias, pode-se considerar, por simplicidade, que a potência aplicada
em todas as antenas é aproximadamente a mesma. Deste modo, baseando-se na Fórmula de Friis e na consideração feita
acima, sabendo-se a intensidade recebida em uma antena, estima-se um valor (CE – Coeficiente de Energia) que quanto
maior o valor, menor será a energia gasta pela PCD para enviar dados para antena de transmissão correspondente.
Logo, tem-se finalmente a Eq. (3).
(3)
Vale lembrar que as considerações de energia de transmissão e recepção concluídas são válidas devido ao fato de
todos os parâmetros da Fórmula de Friis serem recíprocos, o que faz com que exista uma analogia emissão-recepção.
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
Para ser possível o cálculo da distância entre as PCDs e os meios de telecomunicações, a partir das coordenadas
geográficas (latitude, longitude), utilizaram-se os conceitos de trigonometria esférica.
3. Estudo de caso
3.1. Definição
O escopo do projeto a ser desenvolvido foi feito a partir de uma análise básica dos requisitos do Projeto ICA-MMH
B, focando no processo de comunicação PCD–Meios de Telecomunicações.
As plataformas de coleta de dados – PCD, adquirem dados hidrometeorológicos e enviam via satélite, celular ou
radiofreqüência para as EMC – Estações de Monitoramento e Controle. Como muitas vezes há a necessidade de envio
de dados críticos coletados por alguma PCD, deve haver a comutação dos meios possíveis de telecomunicações
dependendo do nível de urgência dos dados e de outros parâmetros, como nível de bateria da PCD e tempo de envio de
cada meio de telecomunicação.
O início ocorre quando PCD solicita a melhor forma de envio ao software, o que faz com que o mesmo analise os
dados coletados, comparando-os com uma base de dados padrão, que nesse caso foi arbitrária, pelo software ser de
caráter de teste dos algoritmos. Com essa comparação e o nível de bateria da PCD, defini-se então a prioridade dos
dados, que será mensurada como um valor inteiro de zero a três, sendo que zero representa a prioridade sendo
unicamente minimização dos gastos com energia e três unicamente urgência no tempo de envio.
Em seguida, o software recebe sinais dos meios de telecomunicações disponíveis. As localizações dos meios de
telecomunicações e das PCDs utilizadas no software foram arbitrárias, dentro de limites plausíveis.
Feita a determinação dos meios de telecomunicações, o software utiliza-se dos algoritmos desenvolvidos para
calcular e ordenar de forma crescente os tempos de envio dos dados da PCD para cada meio de telecomunicação e as
estimativas de gastos de energia para o envio de dados da PCD para cada meio de telecomunicação.
Com a ordem dos tempos de envio, a ordem dos gastos de energia, a prioridade de envio e a porcentagem de bateria
restante da PCD, o software determina o melhor meio de telecomunicação para o caso dos dados em questão,
informando também data e hora de envio.
Vale lembrar que os dados são moldados em um arquivo XML e no final da execução do software, o mesmo
criptografa os dados para um envio seguro utilizando os algoritmos do Triple DES.
3.2. Modelagem
Após uma análise do Projeto ICA-MMH B e definida a proposta para o desenvolvimento do estudo de caso, podese iniciar a modelagem, que no caso estudado é bem simples, já que o software não é de grande porte. Na Figura 3 é
mostrado o diagrama de casos de uso e na Fig. 4 o diagrama de classes.
Figura 3. Diagrama de casos de uso
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
Figura 4. Diagrama de classes
Os métodos contidos nas classes são basicamente getter’s e setter’s (métodos que permitem acessar e modificar os
atributos do objeto). Além disso, tal diagrama não contém todas as classes do software, apenas as mais importantes.
Isso ocorre porque as classes que não foram incluídas representam os algoritmos desenvolvidos em si, não tendo
relevância maior nesse diagrama.
3.3. Escopo
Após a definição dos requisitos do sistema, bem como a modelagem das classes necessárias, pode-se dar início ao
processo de desenvolvimento do sistema, gerando como resultado o código-fonte do projeto. Nessa fase da pesquisa, foi
utilizada como principal ferramenta o ambiente de desenvolvimento NetBeans IDE 6.5.
Para a leitura do arquivo dados.xml, que contém todos os dados coletados pela PCD num dado instante, utilizou-se
a classe XMLtoJava.java, feita unicamente para o modo como o arquivo dados.xml foi escrito, com duas coletas de
dados hidrológicos. A mesma retornava todas as informações coletadas pela PCD para um objeto da classe
DadosHidrologicos.
Com o intuito de se definir a prioridade de envio, analisando o objeto da classe DadosHidrologicos resultando da
conversão do arquivo XML, utilizou-se a classe Prioridade.java, que comparava os dados do objeto com alguns valores
definidos padronizados. O código-fonte da classe Prioridade.java é mostrado na Fig. 5.
Figura 5. Código-fonte da classe Prioridade.java.
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
No cálculo da estimativa do tempo de envio necessário para a comunicação entre a PCD e os meios de
telecomunicações, utilizou-se a classe OrdemTempo.java, que obtinha a hora atual e comparava com os horários de
disponibilidade dos meios de telecomunicações, considerando os horários em que os satélites passam e os horários de
menor conflito das operadoras, além de levar em conta uma janela de tempo para envio dos dados pela PCD. Na Figura
6, tem-se o código-fonte de OrdemTempo.java.
Figura 6. Código-fonte da classe OrdemTempo.java.
No cálculo da estimativa do gasto de energia necessário para a comunicação entre a PCD e os meios de
telecomunicações, utilizou-se a classe OrdemEnergia.java, que calculava o coeficiente de energia discutido na seção
4.8, utilizando trigonometria esférica para obter relações de distâncias entre a PCD e os meios de telecomunicações. O
código-fonte da classe OrdemEnergia.java é mostrado na Fig. 7.
Figura 7. Código-fonte da classe OrdemEnergia.java.
Para ordenar os valores de estimativa de tempo e de energia calculados através de métodos static das classes
OrdemTempo.java e OrdemEnergia.java, utilizou-se a classe Ordenar.java. O método static ordem utiliza-se do
Quicksort para ordenar os valores de estimativa de tempo ou de energia calculados e, em seguida, devolve valores de
referência dos meios de telecomunicações ordenados, em vez das estimativas. Já o método static negativos retorna a
quantidade de valores com estimativas de tempo negativas, tal valor é importante, pois se deve ignorar posteriormente o
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
cálculo com tais valores, já que ser negativo significa que o momento de utilizar aquele meio de telecomunicação já
passou.
Para calcular a melhor forma de envio para os dados utilizados em um instante, utilizou-se a classe
FormaDeEnvio.java. Tal classe checa a porcentagem de energia da bateria, setando a prioridade com minimização de
gastos com energia caso a bateria esteja abaixo de 20%. Em seguida, a partir das ordens das estimativas dos tempos de
envio e das energias gastas por cada meio de telecomunicação, além dos valores de prioridade dos dados, o algoritmo
implementado no método static calculaMelhor encontra o meio de telecomunicação mais ideal para cada caso, usando
os valores de prioridade como peso de aproximações das somas das funções dos tempos e das energias,
desconsiderando tempos menores que zero. Na Figura 8, segue o código-fonte de FormaDeEnvio.java.
Figura 8. Código-fonte da classe FormaDeEnvio.java.
Finalmente o software utiliza todas as classes do pacote cripto do projeto para criptografar o arquivo dados.xml,
resultando no arquivo dadosEncriptados.xml. Para que o caminho inverso possa ser testado, o software também decripta
o arquivo dadosEncriptados.xml resultando no arquivo dadosDecriptados.xml. O algoritmo de criptografia pode ser
checado como funcionando perfeitamente quando os valores de dados.xml e dadosDecriptados.xml são os mesmos.
3.4. Testes
A escolha dos testes realizados foi feita de tal forma que fosse possível percorrer todos os possíveis valores de
prioridade, além de algumas vezes encontrar casos de meios de telecomunicação que não podem ser utilizados devido à
hora de disponibilidade. Para se modificar a prioridade, mudou-se valores de parâmetros no arquivo de dados coletados
dados.xml. Já para observar tempos de envio negativos, foram modificados parâmetros dos sinais dos meios de
telecomunicação internamente no código fonte da classe principal main. Na Figura 9 e na Fig. 10, tem-se exemplos de
saída de dois testes efetuados com sucesso.
Figura 9. Primeira saída de teste
Anais do XV ENCITA 2009, ITA, Outubro, 19-22, 2009
,
Figura 10. Segunda saída de teste
4. Conclusão
Através dos estudos bibliográficos e de projeto desenvolvidos, foi possível analisar e validar satisfatoriamente
algoritmos eficientes e seguros para comutação automática de meios de telecomunicações. Foi notório o fato de que
algumas tecnologias antes não previstas tiveram que ser adicionadas para estudo ao longo do decorrer do projeto, ao
passo que outras não foram tão necessárias. Não obstante, todas tiveram crucial validade na pesquisa realizada.
Durante a realização da pesquisa, pode-se notar que a análise de mais um tipo de abordagem é bastante válida, em
termos de comparação de performance, especialmente em se tratando de algoritmos. Além disso, através do estudo de
caso feito com sucesso, onde se escreveu cerca de mil linhas de código em linguagem Java, ficou clara a enorme
importância dos diagramas UML e de todo o processo de Engenharia de Software utilizado para a conclusão do projeto.
Ao final deste Trabalho de Iniciação Científica, tendo em vista os resultados obtidos, observou-se que o
cronograma definido na proposta da presente pesquisa foi devidamente cumprido, o que possibilitou ao pesquisador
efetuar, de forma eficiente, a sua capacitação nas tecnologias envolvidas, bem como realizar um estudo de caso válido.
5. Agradecimentos
Agradeço aos profissionais da Área de Computação do Instituto Tecnológico de Aeronáutica – ITA que muito me
apoiaram em toda a trajetória desta Pesquisa: ao Prof. Dr. Adilson Marques da Cunha e ao Aluno de Pós-Graduação do
ITA Ricardo Godoi Vieira. Através da oportunidade desta pesquisa, conhecimentos extremamente importantes da área
de computação foram aprendidos, principalmente, os relacionados com conceitos de Engenharia de Software e Análise
de Algoritmos.
Agradeço também ao CNPq, que vinculado ao Ministério da Ciência e Tecnologia (MCT), vem apoiando as
pesquisas brasileiras e contribuindo diretamente para a formação de jovens pesquisadores, investindo e promovendo o
aumento da produção de conhecimento, e gerando novas oportunidades para os jovens universitários, que possuem o
objetivo de adquirir conhecimentos acadêmicos que vão além do que lhes são oferecidos nas grades-padrão de ensino
de suas respectivas Universidades.
6. Referências
GUEDES, Gilleanes T. A., 2007, “UML: Uma Abordagem Prática”, Editora Novatec, 3ª Ed..
XML Tutorial. Disponível em http://www.w3schools.com/xml/default.asp.
Udi MANBER, 1989, “Introduction to Algorithms: A Creative Approach”, Addison-Wesley.
Th.H. CORMEN, Ch.E. LEISERSON, R.L. RIVEST, C. STEIN, 2001, “Introduction to Algorithms”, 2nd edition, MIT
Press & McGraw-Hill.
RIOS, L. G. e PERRI, E. B., 2002, “Engenharia de Antenas”. 2ª. ed. Edgard Blucher.
Download