Pergunta

Por algoritmos definição é independente do meio em que são executados. Por exemplo. Eu uso tabelas do Excel para brincar com estruturas de dados e fazer algum movimento / baralhar / marcação experimentos antes de implementar um algoritmo em uma linguagem de programação.

O que ferramentas e técnicas que você usa para projetar e simular a função de um algoritmo? Como você usa programas de desenho? A linguagem de especificação especial?

Foi útil?

Solução

Os algoritmos são independentes da linguagem, é verdade. Mas qualquer meio que você usa é uma linguagem, período. Usando Excel significa que você está usando a "linguagem" excel (linhas, colunas, células, etc.) para expressar um pouco do seu algoritmo. Talvez não o produto completo, terminado, mas você expressou em Excel.

diagramas UML são uma linguagem para expressar um algoritmo. Um esboço no papel é uma linguagem para expressão. É difícil separar o algoritmo ideal platônico de todas as representações concretas. Não importa o que você faz, você está expressando-a em alguma linguagem.

O truque é separar o algoritmo de características e limitações linguísticas específicas.

Qualquer "informal" notação vai ajudar fazer isso. Inglês (ou outra língua natural), matemática, diagramas, etc., são todos os candidatos para expressar um algoritmo em uma linguagem que é livre de peculiaridades de implementação e problemas.

Eu começo com uma visão geral em Inglês. texto simples, nem MS-Word ou algo onde a formatação é uma distração.

Para que as coisas realmente complexas, um pouco de matemática suplementares ajuda a colocar afirmações formais em todo o estado do programa.

Além disso, Diagramas UML ajuda. Eu uso Argo UML - barato e eficaz

.

Para saber mais sobre este tema, que você quer ler sobre os sistemas de verificação formal .

Outras dicas

Normalmente, eu esboçar-lo no papel, em seguida, tentar uma rápida implementação em Common Lisp e testá-lo no REPL.

Eu não usar uma ferramenta como tal, mas muitas vezes eu vou áspero fora um algoritmo em um langauge scripting alto nível, como Groovy antes de implementá-lo em Java.

Eu acho que, com langauges de script de nível superior que você não precisa se preocupar muito sobre a língua e você pode mais concentrar-se no algoritmo. Então, quando você tem provado o algoritmo, você pode porta-lo uma linguagem mais restritiva.

Eu normalmente uso um quadro branco (eu tenho um no trabalho e dois em casa) para esboçar o algoritmo áspero, e para experimentar um pequeno exemplo de um problema. Se eu precisar de código que se eu escrever um protótipo em Python.

Eu normalmente só usar um programa de desenho quando eu preciso para escrever documentos de especificação formal. Estes normalmente mostrar um projeto nível superior algoritmos, porém, como o uso de Visio para diagramas UML.

Eu acho que depende da complexidade do algoritmo.

Muitas vezes eu vou realmente desenhar um esboço rápido de um fluxograma em algum papel. Há alguns excelentes ferramentas de diagramação disponível, mas eu ainda não encontrei um que é tão rápido como um bom esboço antiquado em um pedaço de papel.

Além disso, muitas vezes eu acabar jogando juntos um realmente 'rápido e sujo' mock up do algoritmo em um Windows Forms VB.NET ou aplicação de consola. Com alguns dos recursos mais recentes como LINQ to SQL, você pode até montar protótipos que dependem de acesso de banco de dados em um curto espaço de tempo.

Por definição algoritmos são independentes do meio em que são executados.

O que definição é que? Quem fez isso? E eles sabiam sobre vazamento abstração ?

Bons algoritmos muitas vezes deve saber sobre a plataforma que eles estão usando. Se isso não fosse verdade, programas seria automaticamente paralelizável para a GPU, e poderia ser facilmente reescrito para trabalhar com computadores quânticos.

Dito isso, muitos algoritmos fundamentais são, de facto independente de plataforma. Estranhamente, eu realmente sentir mais confortável usando C ++ para mexer com algoritmos. No entanto, ao fazer isso eu dependem fortemente de um alto nível de abstração para que eu não brincar com ponteiros ou os gostos. Por outro lado, o STL, na verdade, oferece um conjunto de ferramentas bastante rico para brincar com algoritmos.

E, mesmo que Bill, eu uso o meu quadro bastante. Na verdade, tenho um 1m * 2m quadro na minha sala de estar. Arrepiante. ; -)

Eu geralmente cortar alguma coisa em Python que implementa o algoritmo. Vou ignorar completamente qualquer sane diretrizes de codificação - por exemplo, não vou criar classes para armazenar meus dados, mas eu só vou criar tuplas cada vez maiores para conter todas as minhas informações e representar um 'objeto'. Este é apenas para obter uma versão de trabalho do algoritmo mais rápido possível. Uma vez que eu entendo, eu vou implementá-lo de uma forma mais sã na língua-alvo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top