Come formulare rigorosamente un problema computazionale?


20

Interagisco spesso con persone che vogliono chiedere un algoritmo per un problema computazionale (o la sua complessità), ma non lo esprimono in modo rigoroso per noi (informatici) per capire.

Riferirli a libri come CLRS non è utile perché gli esempi di solito hanno un modo abbastanza semplice di affermare rigorosamente, ad esempio dato l'elenco di adiacenza di un grafico e due vertici in esso calcolano il percorso più breve tra quei vertici.

Esiste un buon libro (o qualche altra risorsa) in cui una persona con una minima conoscenza della CS può imparare come formulare e dichiarare i problemi computazionali in modo rigoroso e comprensibile agli scienziati informatici?

Preferibilmente il libro dovrebbe avere molti esempi di come formulare rigorosamente problemi computazionali da vari domini e esempi del mondo reale.


Una precisazione

Per rendere la domanda più specifica, supponiamo che conoscano la terminologia matematica / CS di base come insiemi, funzioni, grafici, elenchi, ecc. A livello di studente universitario di 1 ° / 2 ° anno (che è il caso delle persone che ho in mente). Ad esempio, hanno letto alcuni libri di testo introduttivi come Aho e Ullman (anche se potrebbero non averlo compreso del tutto).


2
Penso che questa sia una buona domanda, ma non so se c'è una buona risposta. Sento che è come chiedere "C'è un modo in cui possiamo insegnare a qualcuno che non è un informatico a pensare come un informatico?" E la risposta è "si, rendili uno scienziato informatico". Detto questo, alcuni ricercatori di ingegneria del software potrebbero aver fatto studi su cose come questa.
jmite,

3
Inoltre, penso che questo sia ciò a cui servono i casi d'uso, in una certa misura. Se qualcuno non capisce come formulare correttamente il proprio problema, elenca una serie di scenari su cosa vorrebbe fare un determinato programma e il comportamento previsto in ciascun caso. Il programmatore quindi sviluppa una specifica da questo. Detto questo, sono una persona teorica, non un ingegnere, quindi se sbaglio, sentiti libero di correggermi.
jmite,

@jmite, grazie per i commenti. Hai ragione che parte dell'ingegneria del software è cercare di capire cosa vuole un cliente (penso che lo chiamino analisi dei requisiti ). Ma questo è di solito per grandi progetti. Non sto parlando di tali progetti, ma di semplici domande come quelle che riceviamo su questo sito che non sono rigorosamente dichiarate. Ho visto libri che insegnano alle persone come dichiarare una dichiarazione in logica con molti esempi. Spero che ci sia qualcosa di simile per algoritmi e problemi computazionali.
Kaveh,

1
Detto questo, sono dell'opinione che richieda un certo modo di pensare che non sia facilmente acquisibile, specialmente dagli adulti. Ho cercato di convincere la gente a lasciar perdere le cose tecniche e spiegare il problema nel modo più semplice possibile in termini di oggetti di uso quotidiano. Il problema è che di solito dimenticano qualche vincolo o lo fanno sembrare come un'operazione che è O (N) nel loro sistema reale è O (1) e così via. Quindi finirò con qualcosa di molto vicino a una definizione rigorosa del problema sbagliato.
svinja

2
in un certo senso, ciò che viene richiesto è contraddittorio, perché la formulazione rigorosa dei problemi è esattamente una delle abilità apprese chiave che separa i laici da specialisti / professionisti ...
vzn

Risposte:


3

una buona risorsa per / per questo, abbastanza conosciuta dagli accademici ma non così ampiamente conosciuta al di fuori degli specialisti, è la Scrittura matematica di Donald E. Knuth, Tracy L. Larrabee e Paul M. Roberts. c'è un libro pubblicato, video di lezioni e una serie di appunti. è più scritto dal punto di vista delle persone che tentano di padroneggiare la scrittura matematica, ad esempio per creare documenti, ma tutti i consigli sono altamente applicabili al caso dei laici che cercano di formulare problemi con precisione. la scrittura matematica mentre è formidabile da imparare è l'approccio scientifico per definire / formulare rigorosamente - e come i dettagli del libro, risolvere , ad esempio tramite algoritmi o prove - problemi computazionali / algoritmici.

inoltre, il classico testo Garey & Johnson, Computer e intrattabilità non descrive esattamente come formulare esattamente i problemi, ma fornisce molti esempi e diversi "modelli" teorici / concettuali / tecnici, organizzati in sezioni di problemi simili, che possono essere usato come "blocchi" per descrivere problemi computazionali / algoritmici.


Grazie vzn, queste sono belle risorse sulla scrittura di matematica ma non sto cercando qualcosa di diverso. Il problema non sta scrivendo bene in matematica ma risorse per le persone per imparare a formulare i problemi computazionali in modo abbastanza chiaro in modo che un esperto possa capire ciò che la persona che sta ponendo la domanda sta cercando e aiutarli.
Kaveh,

yw; dici che sono due cose diverse, e in parole / frasi lo sono, ma io dico che sono [prendere in prestito una frase di ingegneria del software] "strettamente accoppiate"
vzn


0

Acquista il libro Algorithms and Data Structures da Robert Lafore.

In questo libro, ogni algoritmo è spiegato come una storia, molto simile a una poesia. Quindi, fornire alla persona la versione di un algoritmo di Lafore e successivamente la versione di CLRS.

Forse in questo modo, la persona avrà un'idea di come tradurre da una descrizione intuitiva a una rigorosa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.