Comment formuler rigoureusement un problème de calcul?


20

J'interagis souvent avec des gens qui veulent demander un algorithme pour un problème de calcul (ou sa complexité), mais ils ne l'expriment pas de manière rigoureuse pour nous (les informaticiens) à comprendre.

Les renvoyer à des livres comme CLRS n'est pas utile parce que les exemples là-bas ont généralement une manière assez simple de les énoncer rigoureusement, par exemple, étant donné la liste d'adjacence d'un graphique et deux sommets qui y sont calculent le chemin le plus court entre ces sommets.

Existe-t-il un bon livre (ou une autre ressource) où une personne ayant une connaissance minimale de la CS peut apprendre comment formuler et énoncer des problèmes de calcul d'une manière rigoureuse et compréhensible pour les informaticiens?

De préférence, le livre devrait avoir de nombreux exemples sur la façon de formuler rigoureusement des problèmes de calcul à partir de divers domaines et d'exemples réels.


Clarification

Pour rendre la question plus spécifique, supposons qu'ils connaissent la terminologie mathématique / CS de base comme les ensembles, les fonctions, les graphiques, les listes, etc. au niveau des étudiants CS de 1ère / 2ème année (ce qui est le cas avec les personnes que j'ai en esprit). Par exemple, ils ont lu des manuels d'introduction comme Aho et Ullman (bien qu'ils ne l'aient peut-être pas complètement compris).


2
Je pense que c'est une bonne question, mais je ne sais pas s'il y a une bonne réponse. J'ai l'impression que c'est un peu demander "Y a-t-il un moyen d'apprendre à quelqu'un qui n'est pas informaticien à penser comme un informaticien?" Et la réponse à cette question est «oui, faites-en un informaticien». Cela dit, certains chercheurs en génie logiciel ont peut-être fait des études sur des choses comme celle-ci.
jmite

3
De plus, je pense que c'est à cela que servent les cas d'utilisation, dans une certaine mesure. Si quelqu'un ne comprend pas comment formuler correctement son problème, énumérez un certain nombre de scénarios de ce qu'il aimerait qu'un programme donné fasse, et le comportement attendu dans chaque cas. Le programmeur développe ensuite une spécification à partir de cela. Cela dit, je suis un théoricien, pas un ingénieur, donc si je me trompe, n'hésitez pas à me corriger.
jmite

@jmite, merci pour les commentaires. Vous avez raison de dire qu'une partie du génie logiciel consiste à essayer de comprendre ce que veut un client (je pense qu'ils appellent cela l' analyse des exigences ). Mais c'est généralement pour les grands projets. Je ne parle pas de tels projets, mais de simples questions comme celles que nous recevons sur ce site qui ne sont pas rigoureusement énoncées. J'ai vu des livres enseigner aux gens comment énoncer une déclaration de façon logique avec de nombreux exemples. J'espère qu'il y a quelque chose de similaire pour les algorithmes et les problèmes de calcul.
Kaveh

1
Cela dit, je suis d'avis que cela nécessite une certaine façon de penser qui n'est pas facilement acquise, surtout par les adultes. J'ai essayé d'amener les gens à abandonner les trucs techniques et à expliquer le problème aussi simplement que possible en termes d'objets du quotidien. Le problème est qu'ils oublient généralement certaines contraintes, ou ils la font sonner comme une opération qui est O (N) dans leur système réel est O (1), et ainsi de suite. Je vais donc me retrouver avec quelque chose de très proche d'une définition rigoureuse du mauvais problème.
svinja

2
d'une certaine manière, ce qui est demandé est contradictoire, car la formulation rigoureuse des problèmes est exactement l'une des compétences clés acquises qui sépare les profanes des spécialistes / professionnels ...
vzn

Réponses:


3

une bonne ressource sur / pour cela, assez bien connue des universitaires mais pas si largement connue en dehors des spécialistes, est l'écriture mathématique par Donald E. Knuth, Tracy L. Larrabee et Paul M. Roberts. il y a un livre publié, des vidéos de conférences et un ensemble de notes. il est plus écrit du point de vue des personnes qui tentent de maîtriser l'écriture mathématique, par exemple pour créer des articles, mais tous les conseils sont hautement applicables au cas des profanes qui tentent de formuler des problèmes avec précision. L'écriture mathématique, tout en étant formidable à apprendre, est l'approche scientifique pour définir / formuler rigoureusement - et comme les détails du livre, résoudre , par exemple via des algorithmes ou des preuves - des problèmes computationnels / algorithmiques.

aussi, le texte classique de Garey & Johnson, Computers & Intractability ne décrit pas exactement comment formuler les problèmes avec précision, mais il donne de nombreux exemples, et divers "modèles" théoriques / conceptuels / techniques, organisés en sections de problèmes similaires, qui peuvent être utilisé comme "blocs de construction" pour décrire les problèmes de calcul / algorithmique.


Merci vzn, ce sont de bonnes ressources sur l'écriture des mathématiques mais je ne cherche pas quelque chose de différent. Le problème n'est pas d'écrire bien en mathématiques mais des ressources pour que les gens apprennent à formuler les problèmes de calcul suffisamment clairement pour qu'un expert puisse comprendre ce que la personne qui pose la question cherche et les aider.
Kaveh

yw; vous dites que ce sont deux choses différentes, et dans les mots / phrases elles le sont, mais je dis qu'elles sont [pour emprunter une phrase d'ingénierie logicielle] "étroitement couplées"
vzn


0

Achetez le livre Algorithms and Data Structures de Robert Lafore.

Sur ce livre, chaque algorithme est expliqué comme une histoire, un peu comme une poésie. Ensuite, donnez à la personne la version Lafore d'un algorithme, puis la version CLRS.

Peut-être que comme ça, la personne aura une idée de la façon de traduire d'une description intuitive à une description rigoureuse.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.