Engenharia de algoritmosA engenharia de algoritmos foca no design, análise, implementação, otimização, caracterização e avaliação experimental dos algoritmos de computadores, preenchendo a lacuna entre a teoria dos algoritmos e as aplicações práticas destes na engenharia de software. [1] Trata-se de uma metodologia geral para pesquisa algorítmica.[2] OrigensEm 1995, um relatório de um workshop promovido pela NSF "com a finalidade de avaliar os objetivos atuais e direções da comunidade de teoria da computação" identificou a velocidade lenta da adopção de insights teóricos pelos praticantes como uma questão importante e sugeriu medidas para
Mas, também, abordagens algorítmicas promissoras têm sido negligenciadas devido às dificuldades de análise matemática.[2] O termo "engenharia de algoritmo" foi pela primeira vez usado com especificidade em 1997, com a organização do primeiro Workshop de Engenharia de Algoritmo (WAE97).[4] Diferenças da Teoria dos AlgoritmosA Engenharia de Algoritmo não pretende substituir ou competir com a teoria de algoritmos, mas tenta enriquecer, aperfeiçoar e reforçar suas abordagens formais com algorítmica experimental (também chamada algorítmica empírica). Desta forma, pode fornecer novos insights sobre a eficiência e desempenho dos algoritmos em casos que
MetodologiaAlguns pesquisadores descrevem a metodologia da Engenharia de Algoritmo como um ciclo consistindo do design, análise, implementação e avaliação experimental, junto com outros aspectos como modelos de máquina ou entradas realísticas. Eles argumentam que igualar a engenharia de algoritmo com algorítmica experimental é muito limitado, pois ver design e análise, implementação e experimentação como atividades separadas ignora o laço crucial entre esses elementos da engenharia de algoritmo.[2] Modelos realísticos e entradas reaisApesar de aplicações especificas estarem fora da metodologia da engenharia de algoritmo, elas desempenham um papel importante na modelagem dos padrões realísticos do problema e da máquina subjacente, bem como no fornecimento de "entradas reais e outros parâmetros de design para expetimentos".[2] DesignComparada com a teoria dos algoritmos, que usualmente foca-se no comportamento assintótico dos algoritmos, engenheiros algorítmicos levar em conta outros requerimentos: a simplicidade do algoritmo, a exequibilidade em linguagens de programação no hardware real, e a possibilidade de reuso do código. Além disso, fatores constantes dos algoritmos tem tanto impacto nas entradas reais que algumas vezes um comportamento assintótico pessimista de um algoritmo tem uma melhor performance na prática devido aos baixos fatores constantes. AnáliseAlguns problemas podem ser resolvidos com algoritmos heurísticos e randomizados de maneira simples e mais eficiente que em algoritmos determinísticos. Infelizmente, isso faz com que mesmo algoritmos randomicos simples seja difícil de analisar, pois há "dependência sutis que devem ser levadas em conta".[2] ImplementaçãoGrandes lacunas semânticas entre insights teóricos, algoritmos formulados. linguagens de programação e hardware lançam um desafio para implementaçõe eficientes até para algoritmos simples, já que pequenos detalhes de implementação podem ter efeitos de propagação no comportamento de execução. A única maneira confiável de comparar diversas implementações para um algoritmo é gastar uma considerável quantidade de tempo no ajuste e na análise, rodando tais algoritmos em várias arquiteturas, e examinando o código de máquina gerado.[2] ExperimentosVeja: Algorítmica experimental Engenharia de AplicaçõesImplementações de algoritmos usado em experimentos diferem de maneira significativa do código utilizável em aplicações. Enquanto o primeiro prioriza a prototipação rápida, performance e instrumentação, o último requer "testes minuciosos, facilidade de manutenção, simplicidade e ajustes para classes especificas de entrada".[2] Bibliotecas de algoritmosBibliotecas estáveis e bem testadas de algoritmos, como a LEDA, exercem um importante papel na transferência tecnológica ao acelerar a adoção de novos algoritmos em aplicações. Essas bibliotecas reduzem o investimento necessário e o risco para profissionais, uma vez que remove o fardo de entender e implementar resultados obtidos nas pesquisas acadêmicas. ConferênciasRealizaram-se algumas conferências anuais para engenharia de algoritmo:
O Workshop on Algorithm Engineering (WAE'97) de 1997 foi sediado em Veneza (Itália) entre 11 e 13 de setembro. O terceiro International Workshop on Algorithm Engineering (WAE'99) foi sediado em Londres, UK em julho de 1999.[6] O primeiro Workshop on Algorithm Engineering and Experimentation (ALENEX99) foi sediado em Baltimore, Maryland nos dias 15 e 16 de janeiro de 1999.[7] Ele foi patrocinado pela DIMACS, pelo Center for Discrete Mathematics and Theoretical Computer Science (na Rutgers University), com suporte adicional do SIGACT, o Grupo Especial de Interesse em Algoritmos e Teoria da Computação da ACM, e da SIAM, a Sociedade de Matemática Industrial e Aplicada.[7] Referências
|