I problemi dell'algoritmo di tutti i problemi di programmazione sono tutti? [chiuso]

13

Mi piace come "Introduzione agli algoritmi" di Cormen et al. trasmette conoscenza Una ragione è che tutto ha a che fare con problemi di programmazione e il libro non è implementato in nessun particolare linguaggio di programmazione. Questa indipendenza linguistica si concentra sulle idee in generale.

Quindi la mia domanda è, come si dice nel titolo. Ogni problema di programmazione risolvibile è risolvibile pensando in questo modo algoritmico. Non importa quale lingua, campo, ecc.? Se sì, dai argomenti, altrimenti dai argomenti!

Non ho implementato molti programmi complessi con GUI, IA, grafica, ecc ... Ma questi tipi di problemi sono anche una questione di buoni algoritmi?

    
posta Wittgenstein 22.08.2012 - 11:00
fonte

6 risposte

29

Dipende da come si definisce "Problema di programmazione".

Nei progetti del mondo reale, la risposta è sicuramente un NO chiaro. La maggior parte dei problemi non sono nemmeno problemi tecnici, ma problemi di comunicazione, requisiti non chiari, ecc.

Quindi hai argomenti interi di classi di problemi che richiedono quasi nessun algoritmo. Ad esempio, le GUI sono spesso semplici da "programmare", ma il vero problema è quello di avere un buon design (dal punto di vista dell'usabilità, non solo dell'aspetto grafico).

Ci sono alcuni campi, dove i problemi tendono ad essere molto più algoritmici dalla natura di quel campo però. Ad esempio, l'intelligenza artificiale è un argomento principale, in cui gli algoritmi sono al centro. La grafica può essere intensiva per l'algoritmo, ma dipende da cosa si intende esattamente con "Programmazione grafica".

In generale, se il problema che stai risolvendo a livello di programmazione è adatto per una rappresentazione matematica, allora stai entrando nell'area algoritmica. Naturalmente, questo è solo un indicatore approssimativo, in quanto è possibile creare modelli matematici per praticamente tutto. Ma per la maggior parte delle cose normalmente non lo si considera.

Esempio finale: se il problema è creare una GUI che consenta l'immissione di dati per oggetti business, non si dovrebbe pensare molto alle formulazioni matematiche. Se, tuttavia, il problema è creare una GUI che cambia dinamicamente e sposta gli elementi in base a qualche valore di importanza, è molto più probabile che si finisca con un modello matematico e un'implementazione algoritmica.

    
risposta data 22.08.2012 - 11:28
fonte
8

Che cosa intendi per problema di programmazione?

Secondo Wikipedia:

Computer programming (often shortened to programming or coding) is the process of designing, writing, testing, debugging, and maintaining the source code of computer programs.

che significa che la programmazione in generale è intrinsecamente più grande della traduzione di algoritmi attraverso il codice.

Per farti un esempio, un problema di programmazione che ho adesso è che devo gestire un codice sorgente spaghetti obsoleto aggiungendo i test unitari, quindi refactoring . Implica anche l'aggiunta di commenti nei posti giusti, la normalizzazione delle maiuscole dei nomi, ecc. Non ha niente o pochi a che fare con gli algoritmi.

Allo stesso modo, molti compiti dello sviluppatore non sono correlati agli algoritmi. Esempio: internazionalizzazione. Allo stesso modo, molte applicazioni (CRUD, per esempio) non usano algoritmi troppo nel loro codice sorgente (non parlando del codice sottostante del framework).

Ora, se stai assumendo che in "problema di programmazione", "programmazione" sia il sinonimo di traduzione di algoritmi attraverso il codice, allora sì, logicamente qualsiasi problema sarebbe un problema di algoritmo: A × n = B × n se A = B .

    
risposta data 22.08.2012 - 11:25
fonte
6

Penso che la risposta sia enfaticamente no . Gli algoritmi sono solo elementi costitutivi in un set di abilità molto più grande.

Mi sono laureato in C.S., specializzato in A.I.

Lì il problema fondamentale, almeno per come lo vedevo, era trovare buone rappresentazioni per informazioni. Queste rappresentazioni dovrebbero cercare di essere delle buone corrispondenze per le strutture di conoscenza che sono nelle teste delle persone e dovrebbero facilitare i tipi di manipolazioni e alterazioni che vengono fatte su di loro.

In termini di programmazione giornaliera, ciò significa che il problema di base è identificare il dominio specifico della lingua (DSL) per la situazione in questione. Esistono molti modi per creare DSL. La programmazione ordinaria, in cui classi, variabili e metodi sono definiti, crea infatti una DSL perché consente di dire cose (mappare le strutture mentali al codice) che non si potevano dire senza di esse.

Anche gli algoritmi sono importanti, ma sono solo una parte della trama.

    
risposta data 22.08.2012 - 15:27
fonte
5

Suppongo che potresti dire che tutti i programmi per computer sono algoritmi, perché stai prescrivendo una sequenza di istruzioni per ottenere il risultato desiderato. Tuttavia, alcuni dei problemi più difficili non sono nella comunicazione di un programma a un computer, ma nella comunicazione di un programma agli utenti che testeranno e modificheranno il software.

In altre parole, ai computer non importa se il tuo codice è completamente incomprensibile per gli umani. Lo faranno funzionare bene in entrambi i modi. La sfida sta nel rendere il codice abbastanza chiaro che qualsiasi bug si staglierà come un pugno.

È interessante notare che le cose tecniche che ho imparato al college riguardo agli algoritmi sono state a lungo eclissate da ciò che ho imparato da solo da allora. A questo punto, se volessi ottenere un 3 ° grado universitario per aiutarmi nel mio lavoro, sarebbe in inglese.

    
risposta data 22.08.2012 - 14:01
fonte
2

La maggior parte dei problemi di programmazione sono in realtà problemi di amministrazione del sistema.

È una specie di risposta irriverente, ma ho trovato che questo è vero più spesso di quanto ci si potrebbe aspettare. Non so quante volte ho riscontrato dei malfunzionamenti perché il DNS non era configurato correttamente sulla macchina di prova, è ancora in esecuzione un processo di stallo che utilizza CPU / memoria / porte, il programma è in esecuzione con l'ID utente sbagliato e quindi ha torto autorizzazioni, il disco è stato partizionato in modo errato e quindi lo spazio è scaduto, è stata installata la versione errata del file di configurazione, ecc.

Di solito gli algoritmi sono solo una piccola parte del problema. Il resto del problema è mettere il programma in azione per risolvere problemi reali nel mondo reale.

    
risposta data 22.08.2012 - 18:32
fonte
2

Penserei che sì, tutti i problemi di programmazione sono risolvibili pensando in modo algoritmico. Dopotutto un algoritmo è solo un insieme di istruzioni che dicono al computer cosa fare.

Prendendo alcuni degli esempi sopra

For example, GUIs are often straightforward to "program", but the actual problem involved is to have a good design (from a useability point of view, not just the graphical appearance).

In termini di programmazione e persino di design che conosceranno modelli / regole che portano a disegni GUI efficaci, facili da usare ed efficienti. Queste regole devono essere ridotte ad un algoritmo che, se seguito, dovrebbe aiutare a produrre una GUI facile da usare. In effetti, i passaggi effettivi del posizionamento dei controlli sulla GUI possono anche essere ridotti a un algoritmo

To give you an example, a programming problem I have right now is that I have to deal with a legacy spaghetti source code by adding unit tests, then refactoring it. It also involves adding comments in the right places, normalize the capitalization of names, etc. It has nothing or few to do with algorithms.

Ma il modo in cui ti avvicini all'aggiunta dei test unitari può essere descritto da un algoritmo come

  1. Identifica nuovo Test unità
  2. Scrivi test unitario
  3. Applica algoritmo di normalizzazione della capitalizzazione
  4. Applica l'algoritmo Commenti

Example: internationalization This a perfect example of an algorithm solution. As its simplest you are looking up a known word in a dictionary and replacing with the different language form. (Of course real life involves sentences and context and the algorithm may involve steps to verify with native speakers but the basics hold true)

Il problema con la maggior parte delle risposte Sì è che le persone stanno pensando ad algoritmi in termini di QuickSort, Bubble sort invece di un set di istruzioni che riduce una descrizione verbosa e vaga di un problema a un insieme di regole / regole chiaramente definite.

    
risposta data 22.08.2012 - 18:39
fonte

Leggi altre domande sui tag