Eu gosto de como "Introdução aos algoritmos", de Cormen et al. transmite conhecimento. Uma razão é que tudo tem a ver com problemas de programação e o livro não é implementado em nenhuma linguagem de programação específica. Essa independência de idioma fornece foco nas idéias em geral.
Então, minha pergunta é, como diz o título. Todo problema de programação solucionável é solucionável pensando desta maneira algorítmica. Não importa qual idioma, campo, etc? Se sim, dê argumentos, caso contrário, dê argumentos!
Não implementei muitos programas complexos com GUI, AI, Gráficos, etc ... Mas esses tipos de problemas também são uma questão de pensar em bons algoritmos?
algorithms
Wittgenstein
fonte
fonte
Respostas:
Depende de como você define "Problema de programação".
Em projetos do mundo real, a resposta é definitivamente um NÃO claro. A maioria dos problemas nem sequer são técnicos, mas problemas de comunicação, requisitos pouco claros etc.
Então você tem assuntos inteiros de classes de problemas que requerem quase nenhum algoritmo. Por exemplo, as GUIs geralmente são fáceis de "programar", mas o problema real envolvido é ter um bom design (do ponto de vista da usabilidade, não apenas da aparência gráfica).
Existem alguns campos em que os problemas tendem a ser muito mais algorítmicos pela natureza desse campo. Por exemplo, a IA é um assunto primordial, onde os algoritmos estão no centro. Os gráficos podem ser intensivos em algoritmos, mas dependem do que exatamente se entende por "Programação de gráficos".
Em geral, se o problema que você está resolvendo programaticamente é adequado para uma representação matemática, você está inserindo a área algorítmica. Obviamente, este é apenas um indicador aproximado, pois você pode criar modelos matemáticos para praticamente tudo. Mas para a maioria das coisas você normalmente não consideraria fazê-lo.
Exemplo final: se o problema for criar uma GUI que permita a inserção de dados para objetos de negócios, você não pensaria muito em formulações matemáticas. Se, no entanto, o problema for criar uma GUI que esteja mudando dinamicamente e realoque elementos com base em algum valor de importância, é muito mais provável que você acabe com um modelo matemático e uma implementação algorítmica.
fonte
i++
como nosso novo overlord .. erm .. algoritmo.O que você quer dizer com problema de programação?
De acordo com a Wikipedia:
o que significa que a programação em geral é inerentemente maior do que traduzir algoritmos por meio de código.
Para dar um exemplo, um problema de programação que tenho agora é que tenho que lidar com um código-fonte de espaguete herdado adicionando testes de unidade e refatorando-o . Também envolve adicionar comentários nos lugares certos, normalizar a capitalização de nomes, etc. Não tem nada ou pouco a ver com algoritmos.
Da mesma forma, muitas tarefas do desenvolvedor não estão relacionadas a algoritmos. Exemplo: internacionalização. Da mesma maneira, muitos aplicativos (CRUD, por exemplo) não usam muito algoritmos em seu código-fonte (sem falar no código subjacente da estrutura).
Agora, se você estiver assumindo que em "problema de programação", "programação" é sinônimo de tradução de algoritmos por meio de código, sim, logicamente qualquer problema seria um problema de algoritmo:
A × n = B × n
seA = B
.fonte
Eu acho que a resposta é enfaticamente não . Algoritmos são apenas blocos de construção em um conjunto de habilidades muito maior.
Eu me formei em CS, especializado em AI
Lá, o problema fundamental, pelo menos na minha opinião, era encontrar boas representações para obter informações. Essas representações devem tentar corresponder às estruturas de conhecimento que estão na cabeça das pessoas e facilitar os tipos de manipulações e alterações que são feitas sobre elas.
Em termos de programação diária, isso significa que o problema básico é identificar a linguagem específica de domínio (DSL) correta para a situação em questão. Existem muitas maneiras de criar DSLs. A programação comum, na qual classes, variáveis e métodos são definidos, de fato, cria uma DSL, pois permite que você diga coisas (mapeie suas estruturas mentais para codificar) que você não poderia dizer sem elas.
Os algoritmos também são importantes, mas são apenas parte da história.
fonte
Suponho que você possa dizer que todos os programas de computador são algoritmos, porque você está prescrevendo uma sequência de instruções para alcançar o resultado desejado. No entanto, alguns dos problemas mais difíceis não estão na comunicação de um programa para um computador, mas na comunicação de um programa para humanos que estarão testando e modificando o software.
Em outras palavras, os computadores não se importam se o seu código é completamente incompreensível para os seres humanos. Eles vão funcionar muito bem de qualquer maneira. O desafio é tornar o código claro o suficiente para que todos os bugs se destacem como um dedo dolorido.
Curiosamente, as coisas técnicas que aprendi na faculdade sobre algoritmos há muito são ofuscadas pelo que aprendi sozinho desde então. Neste ponto, se eu quisesse obter um terceiro diploma universitário para me ajudar no meu trabalho, seria na composição em inglês.
fonte
A maioria dos problemas de programação são na verdade problemas de administração do sistema.
Essa é uma resposta irreverente, mas descobri que isso é verdade com mais frequência do que se poderia esperar. Não sei quantas vezes encontrei falhas porque o DNS foi configurado incorretamente na máquina de teste, ainda está sendo executado um processo obsoleto que está sobrecarregando a CPU / memória / portas, o programa está sendo executado com o ID do usuário errado e, portanto, está errado. permissões, o disco foi particionado incorretamente e, assim, o espaço acabou, a versão errada do arquivo de configuração foi instalada etc.
Acertar os algoritmos geralmente é apenas uma pequena parte do problema. O resto do problema é colocar o programa para trabalhar, resolvendo problemas reais no mundo real.
fonte
Eu pensaria que sim, todos os problemas de programação são solucionáveis pensando de maneira algorítmica. Afinal, um algoritmo é apenas um conjunto de instruções que informa ao computador o que fazer.
Tomando alguns dos exemplos acima
Em termos de programação e até design, conhecerá padrões / regras que levam a designs de GUI eficazes, fáceis de usar e eficientes. Essas regras devem ser reduzidas a um algoritmo que, se seguido, deve ajudar a produzir uma GUI amigável. De fato, as etapas reais de colocar os controles na GUI também podem ser reduzidas a um algoritmo
Mas a maneira pela qual você aborda a adição de testes de unidade pode ser descrita por um algoritmo como
O problema com a maioria das respostas Sim é que as pessoas estão pensando em algoritmos em termos de classificação QuickSort, Bubble, em vez de um conjunto de instruções que reduz uma descrição vaga e detalhada de um problema a um conjunto de regras / lógicas claramente definidas.
fonte