Como formular um problema computacional rigorosamente?

20

Costumo interagir com pessoas que desejam solicitar um algoritmo para um problema computacional (ou sua complexidade), mas não o expressam de maneira rigorosa para que nós (cientistas da computação) entendamos.

Referenciá-los a livros como o CLRS não é útil porque os exemplos geralmente têm uma maneira bastante direta de declarar rigorosamente, por exemplo, dada a lista de adjacências de um gráfico e dois vértices nele, o caminho mais curto entre esses vértices.

Existe algum livro bom (ou algum outro recurso) em que uma pessoa com conhecimento mínimo em CS possa aprender como alguém deve formular e declarar problemas computacionais de maneira rigorosa e compreensível para os cientistas da computação?

De preferência, o livro deve ter muitos exemplos de como formular problemas computacionais rigorosamente a partir de vários exemplos do domínio e do mundo real.


Esclarecimento

Para tornar a questão mais específica, vamos supor que eles conheçam a terminologia básica de matemática / CS, como conjuntos, funções, gráficos, listas, etc. no nível do 1º / 2º ano do estudante de graduação em CS (que é o caso das pessoas que eu tenho em mente). Por exemplo, eles leram alguns livros introdutórios como Aho e Ullman (embora possam não ter entendido completamente).

Kaveh
fonte
2
Acho que essa é uma boa pergunta, mas não sei se há uma boa resposta. Sinto que está meio que perguntando "Existe uma maneira de ensinar alguém que não é cientista da computação a pensar como cientista da computação?" E a resposta para isso é "sim, faça deles um cientista da computação". Dito isto, alguns pesquisadores de engenharia de software podem ter feito estudos sobre coisas como essa.
jmite
3
Além disso, acho que é para isso que servem os casos, até certo ponto. Se alguém não entender como formular adequadamente seu problema, liste uma série de cenários do que eles gostariam que um determinado programa fizesse e o comportamento esperado em cada caso. O programador então desenvolve uma especificação a partir disso. Dito isto, sou uma pessoa teórica, não um engenheiro, por isso, se estiver errado, fique à vontade para me corrigir.
jmite
@ jmite, obrigado pelos comentários. Você está certo de que parte da engenharia de software é tentar entender o que um cliente deseja (acho que eles chamam de análise de requisitos ). Mas isso geralmente é para grandes projetos. Não estou falando sobre esses projetos, mas perguntas simples, como as que temos neste site, que não são rigorosamente declaradas. Vi livros ensinando as pessoas a declarar uma afirmação na lógica com muitos exemplos. Espero que exista algo semelhante para algoritmos e problemas computacionais.
Kaveh
1
Dito isto, sou da opinião de que exige uma certa maneira de pensar que não é facilmente adquirida, principalmente pelos adultos. Tentei levar as pessoas a abandonar o material técnico e explicar o problema da maneira mais simples possível em termos de objetos do cotidiano. O problema é que eles geralmente esquecem algumas restrições ou fazem parecer que uma operação que é O (N) no sistema atual é O (1) e assim por diante. Então, terminarei com algo muito próximo de uma definição rigorosa do problema errado.
SJJJ
2
de certa forma, o que é solicitado é contraditório, porque a formulação de problemas com rigor é exatamente uma das principais habilidades aprendidas que separa leigos de especialistas / profissionais ...
vzn

Respostas:

3

um bom recurso a esse respeito, bastante conhecido pelos acadêmicos, mas não tão amplamente conhecido fora dos especialistas, é o Mathematics Writing de Donald E. Knuth, Tracy L. Larrabee e Paul M. Roberts. há um livro publicado, vídeos de palestras e um conjunto de notas. é mais escrito da perspectiva de pessoas que tentam dominar a escrita matemática, por exemplo, para criar trabalhos, mas todos os conselhos são altamente aplicáveis ​​ao caso de leigos que tentam formular problemas com precisão. a escrita matemática, embora formidável para aprender, é a abordagem científica para definir / formular rigorosamente - e como o livro detalha, resolve , por exemplo, através de algoritmos ou provas - problemas computacionais / algorítmicos.

Além disso, o texto clássico da Garey & Johnson, Computers & Intratability , não descreve exatamente como formular problemas com precisão, mas fornece muitos exemplos e diversos "padrões" teóricos / conceituais / técnicos, organizados em seções de problemas semelhantes, que podem ser usado como "blocos de construção" para descrever problemas computacionais / algorítmicos.

vzn
fonte
Obrigado vzn, esses são bons recursos para escrever matemática, mas não estou procurando algo diferente. A questão não está escrevendo bem em matemática, mas recursos para as pessoas aprenderem a formular problemas computacionais com clareza suficiente para que um especialista possa entender o que a pessoa que está fazendo a pergunta está procurando e ajudá-los.
Kaveh
yw; você diz essas são duas coisas diferentes, e em palavras / frases que são, mas & I dizem que são [para emprestar uma frase de engenharia de software] "intimamente ligado"
vzn
3

apenas deparei com este bom / limpo, incomum, relativamente novo / desconhecido árbitro em sua home page de Emmanuele Viola , professor (T) CS da Northeastern University) aparentemente não publicado em outro lugar. 41pp. começa com conceitos matemáticos muito básicos, por exemplo, implicação e, em seguida, abrange tópicos avançados, como o teorema de Erdős-Szekeres e a teoria de Ramsey .

vzn
fonte
0

Compre o livro Algoritmos e estruturas de dados de Robert Lafore.

Neste livro, todo algoritmo é explicado como uma história, muito parecido com uma poesia. Em seguida, forneça à pessoa a versão Lafore de um algoritmo e, posteriormente, a versão CLRS.

Talvez assim, a pessoa tenha uma ideia de como traduzir da descrição intuitiva para a rigorosa.

user5193682
fonte