Eu resolvo muitos problemas, principalmente do Top Coder. Vou obter respostas para muitos, mas na maioria das vezes acabo com uma solução ineficiente.
Nas implementações do mundo real - realmente importa que uma solução para o problema seja eficiente? Se sim, como posso melhorá-lo?
problem-solving
Formigas
fonte
fonte
Respostas:
A melhor solução é aquela que (em ordem crescente de importância) é eficiente, sustentável e feita .
^^^ Essa é a única coisa que você realmente precisa tirar desta resposta. ^^^
Eficiência é importante . Talvez um pouco menos do que costumava ser devido à nossa abundância de hardware, mas o desempenho é um recurso . Em uma competição, a eficiência é obviamente importante. Você deve saber escrever código eficiente. Mais importante, você deve conhecer as práticas recomendadas que produzirão código eficiente e de bom desempenho, sem sacrificar a pontualidade ou a capacidade de manutenção de um aplicativo. É aqui que a profundidade da experiência com uma plataforma e idioma gera muitos rendimentos.
Mais importante (em 95% dos casos), é ter uma solução finalizável e sustentável. Sem um produto acabado , não importa a eficiência ou a manutenção da solução. Se você demorar um tempo extraordinário para rastrear e corrigir um bug ou adicionar um novo recurso, não importa a eficiência da solução. Mas eficiência e desempenho são indubitavelmente importantes, não importa o que alguém possa dizer.
fonte
Eu concordo com Mike Cellini, a única coisa que gostaria de acrescentar é.
Algo é "suficientemente eficiente"? Por exemplo, do ponto de vista do usuário, não há muita diferença entre uma função que é concluída em 0,00001 segundos ou uma que é concluída em 0,1 segundos, mesmo que uma seja muito mais eficiente que a outra. Uma função que é concluída em 10 minutos não é muito diferente (para o usuário) de uma função que é concluída em 12 minutos. Nos dois casos, o usuário tomaria uma xícara de café ou continuaria com outra tarefa.
Cheguei a ver a eficiência como "um usuário eficiente" e não um algoritmo eficiente.
fonte
Em geral, a solução mais importante para um problema será a que realmente existe e é válida para os casos como eles existem para o seu problema. Em outras palavras, evite a otimização prematura até que você realmente saiba que possui um código ineficiente ou um código eficiente que precisa ser mais rápido.
Além disso, não esqueça que a melhor solução para o seu aplicativo pode não ser a solução geral do caso. Caso e argumento, alguns anos atrás, um professor deu à nossa turma um problema no qual deveríamos imprimir os 10 primeiros números de um determinado tipo (desculpe, minha memória me falha quanto ao tipo, mas esse era um dos números mais incomuns classes) e fomos submetidos a um teste para verificar se o número era do tipo especificado. Essa foi a extensão do problema que nos foi dado e fomos informados de que era devido no dia seguinte, com a solução mais eficiente recebendo crédito total. A seguinte palestra do professor resumiu os resultados:
A solução final foi considerada a mais eficiente pelo professor. Acontece que o problema era realmente um exercício para entender completamente o problema e não apenas sair e encontrar a solução mais eficiente.
O ponto acima é que, quando se trata de encontrar um problema para uma solução eficiente, geralmente é melhor dedicar algum tempo para garantir que você realmente entenda qual é o problema antes de começar a escrever o código ou tentar otimizar o código. Se você pode armazenar um conjunto de valores de referência em uma matriz constante, é melhor fazer isso do ponto de vista de desempenho do que tentar escrever algum algoritmo sofisticado.
Da mesma forma, não esqueça que, para a maioria dos aplicativos, as únicas pessoas que tendem a ver código ineficiente (quando não é desnecessariamente ineficiente!) São os próprios desenvolvedores. Se você escrever um código limpo que faça exatamente o que é necessário, é provável que na maioria das vezes os usuários não notem problemas de desempenho ao trabalhar com o programa e quando otimizem apenas as partes mencionadas. você.
fonte
Isso depende da estrutura do concurso, mas geralmente sim: o desempenho é considerado na maioria das vezes, de acordo com a documentação deles . Às vezes, como no link posterior, você precisa caçar, mas citar:
A melhor maneira de melhorar isso é escrever um código eficiente, que você já está fazendo. Mesmo se você concluir o trabalho, dedique algum tempo a melhorar sua eficiência - mesmo após a competição - e isso será recompensado.
Você provavelmente também deseja investir em teoria, como livros sobre algoritmos , que podem oferecer duas coisas: ferramentas mais eficientes para resolver um problema específico e mecanismos mais eficientes para identificar qual é o problema que você tem que resolver.
Por fim, os cursos de ciência da computação estão cada vez mais disponíveis on - line e cobrem o histórico que você precisa melhorar.
fonte
A eficiência de uma solução depende de vários fatores. O mais importante é saber o que seu usuário deseja. Aqui estão alguns exemplos.
Como tornar seu código mais eficiente:
Há um campo inteiro para a otimização, mas as duas dicas acima devem pelo menos começar.
fonte
Para uma competição, você precisa entender quem são os juízes e o que eles são - se eles estão procurando ótimos codificadores e nada mais, então você receberá elogios por um código mais eficiente.
Por via de regra, no mundo real, isso não importa. Uma das idéias principais do desenvolvimento de software é "Não otimizar o que você não conhece precisa ser otimizado" e, em seguida, "Otimizar somente quando tiver sido provado que é necessário"
Muitos profissionais argumentam que isso leva a códigos ineficientes e inchados que não podem ser facilmente corrigidos e, em alguns casos extremos (sobre os quais eles cantam como se fosse o que a maioria dos codificadores faz o dia todo, todos os dias), eles estão corretos. No entanto, poucos projetos de desenvolvimento de software mediram os resultados "Desempenho: mais rápido que o necessário, Custo: Quem se importa, Prazo de entrega: em algum momento desta década" No mundo real, geralmente é "Quero barato, quero ontem, quero para funcionar ".
fonte