É importante entender sobre análise de algoritmos ?

Usar a ideia de loop invariante e algoritmo por recorrência por indução ?

Seja mais específico, o que está precisando de fato?

1 curtida

Se você se refere a análise quanto a desempenho, também conhecido como custo, a resposta é: depende.
Veja, você sempre deve ter em mente que existem dois caminhos: o “funciona” e o “funciona e é o melhor cenário possível”.
Se você for desenvolver algo só para funcionar, então, não importa se o algoritmo utilizado é o mais custoso ou é o mais performático.

Por outro lado (e em geral), se você precisa garantir que o que você desenvolveu faz o que precisa e, ao mesmo tempo, tem o melhor desempenho possível, aí, amigo, você precisa.
Afinal, apenas para ordenação de elementos, você tem inúmeros algoritmos…

2 curtidas

Acho que a pergunta pra essa resposta poderia ser mais completa, mas sobre ser custoso ou performático , acho que isso acaba em um vazio na resposta : que tal assim A análise de algoritmos estuda a correção e o desempenho de algoritmos. Em outras palavras, a análise de algoritmos procura respostas para perguntas do seguinte tipo: “Este algoritmo resolve o meu problema?” , veja essa matéria""
No sul de Londres, D`Aloísio teve então a ideia de criar um algoritmo que fosse capaz de resumir os resultados de busca automaticamente, organizando as notícias e priorizando itens mais importantes. Click aqui, veja essa fonte sobre algoritmo

1 curtida

Alguma noção básica é sempre interessante. É importante entender o que significa a notação big-O, a diferença de um algoritmo que executa em tempo O(1), O(log n), O(n), O(n log n), O(n²), O(n!) e como isso está relacionado com as estruturas de dados mais usadas. Por exemplo, é importante entender que uma busca em uma lista tem tempo de execução O(n), enquanto que em uma HashMap/Dictionary tem tempo O(1). Isso é o suficiente para a maioria das aplicações Web e apps que tem no mercado, dado que a maioria é basicamente ler formulário -> processar -> gravar no banco ou então o sentido contrário.

A coisa muda de figura se você pretender trabalhar com pesquisa acadêmica, em algum setor de P&D ou em alguma aplicação de nicho. Porque aí sim, se você precisar de fato criar um algoritmo novo você precisa de uma prova que ele funciona e em quanto tempo ele executa.

2 curtidas

Na prática, na maioria dos casos, é inviável provar a corretude de um programa maior do que um algoritmo de ordenação ou algo do tipo (algoritmos de livros de algoritmos). Isso acontece por dois motivos principais: I/O e transferência de controle direta/indireta. Essas duas características de um programa fazem com que sua prova de corretude fique quase impossível.

Por isso, ao invés de tentar provar que o programa está certo em todos os casos por definição, a gente usa o método científico/empírico e prova com testes de software, que mostram que o programa funciona nos casos testados pelo menos.

A prova de corretude é muito mais importantes no meio acadêmico, quando se quer publicar artigos ou coisas do gênero.


Uma curiosidade: é por causa da falta de regras sobre transferências de controle que a programação estruturada foi inventada: diminuir o impacto da transferência de controle num programa cheio de jumps/gotos. A ideia era que se você conseguisse provar a corretude de pequenos blocos de código (if, for, while, etc.), seria mais fácil compor uma prova de um algoritmo maior. Ainda assim, as linguagens fornecem mecanismos de transferência de controle que dificultam muito a prova de corretude. No C ainda tem goto, por exemplo.

2 curtidas

Não tanto quanto a análise de espaguete.

3 curtidas

Veja bem… assim como qualquer ciência é preciso comprovar algo de fato e isso se torna possível com a matemática e testes empíricos. Na Ciência da Computação, o cerne de estudo é algoritmos. Então se você é uma acadêmico a resposta é SIM. Pois, entender o desempenho, complexidade espacial e provar que o algoritmo funciona é até mais importante do que de fato implementá-lo nesse meio. Pela minha pouca experiência no mercado de trabalho, entender o básico e ter noção sobre análise de algoritmos já é o suficiente. Até mesmo porque, essa é uma área muito ampla de estudo e possuir uma noção teórica básica e procurar obter mais experiência de implementá-lo, testá-lo e comprovar o seu funcionamento por métodos práticos é o que o mercado de trabalho mais necessita. Dizer que você não precisa entender nada sobre análise, é forçado demais. Dizer que você precisa saber tudo sobre, também é. A questão é, o que você pretender ser e fazer? Entendeu? Meu conselho como estudante e profissional é… estude teoria e prática juntos, assim você saberá dar a prioridade para uma ou outra área de estudo.

1 curtida