Non capisco perché gli algoritmi siano così speciali [chiuso]

3

Sono uno studente di informatica che cerca di assorbire quante più informazioni sull'argomento nel mio tempo libero. Continuo a tornare ad algoritmi di volta in volta in vari formati (corso online, libro, tutorial web), ma il concetto non riesce a mantenere la mia attenzione. Semplicemente non capisco: perché gli algoritmi sono così speciali?

Posso dirti perché i frattali sono fantastici, perché il rapporto aureo è fantastico, perché l'origami è fantastico e le applicazioni scientifiche di tutto quanto sopra. Diamine, adoro persino le leggi di Newton e le sezioni coniche. Ma quando si tratta di algoritmi, non sono affatto sbalordito. Non sono affatto penetranti in nuovi modi sulla cognizione umana. Mi aspettavo che gli algoritmi frantumassero preconcetti e alterazioni della mente, ma di volta in volta falliscono miseramente. Forse sto facendo qualcosa di sbagliato nel mio approccio.

Qualcuno può dirmi perché gli algoritmi sono così importanti per la programmazione?

    
posta Jessica 01.09.2012 - 06:48
fonte

11 risposte

24

Gli algoritmi sono una parte centrale molto di qualsiasi tipo di calcolo o programma per computer . In effetti, i programmi per computer sono solo una manciata di algoritmi abbinati ad alcuni fantasiosi dati strutturati. Questo è tutto. Algoritmi + Strutture dati = Programmi .

Un programma per computer è costituito da regole logiche che segue. Tali regole sono strutturate come algoritmi. Le regole da sole sono inutili, poiché non operano su nulla - mancano di sostanza per cui sono significative. Proprio come è priva di significato provare a versare il cibo da un piatto vuoto - senza cibo il processo non produce nulla. È inutile. Ma quando aggiungi questa sostanza, in questo contesto cibo o dati tutto diventa significativo. C'è qualcosa su cui operare.

Gli algoritmi definiscono come operare. Cosa esattamente fare per risolvere un problema . Diversi tipi di algoritmi risolvono diversi tipi di problemi, è importante capire in che modo l'algoritmo risolve il problema, perché senza la comprensione di ciò che si sta facendo è impossibile vedere le cose da una prospettiva più elevata. Allo stesso modo, non si può costruire un ponte semplicemente mettendo un mattone dopo l'altro. Lì deve essere più profondo comprendere di cosa esattamente si sta facendo, quale problema stanno risolvendo e perché lo fanno nel modo in cui lo fanno. Nel contesto dell'informatica e della programmazione del computer, la comprensione e lo studio degli algoritmi forniscono questa comprensione.

    
risposta data 01.09.2012 - 07:17
fonte
14

Non sono fantastici . È solo uno strumento ordinario che utilizziamo in sviluppo come qualsiasi altro strumento.

Il suo unico scopo è fornire una risposta a un problema specifico , evitando di reinventare la ruota ancora e ancora, cioè sprecando il tuo tempo.

Esempi:

  • Se hai bisogno di ordinare un elenco , devi utilizzare un algoritmo esistente, invece di sprecare tempo a inventare il tuo.

    Eccezione: sai esattamente cosa stai facendo e sai che in una situazione particolare, la tua sarà più veloce o in qualche modo migliore rispetto a qualsiasi altra.

  • Se hai bisogno di hash una password , dovresti utilizzare un algoritmo esistente, invece di inventare il tuo, e non solo sprecare il tuo tempo, ma anche introdurre una minaccia alla sicurezza.

    Eccezione: sei un ricercatore di sicurezza e disponi di un laboratorio di esperti pronti a testare il tuo nuovo algoritmo.

risposta data 01.09.2012 - 07:13
fonte
9

Che cosa intendi per "non eccezionale"?

Come è stata la tua prima funzione di classificazione? Ci è voluto del tempo in% co_de per ordinare l'array? O era una variazione di inserimento / selezione / bubble sort?

I motori di ricerca Internet sarebbero possibili senza algoritmi? Le persone utilizzerebbero Google tutte le volte che succedono se ci vogliono solo 2 minuti per cercare tra 20 miliardi di pagine che indicizzano? Prova a creare un'applicazione che permetta di cercare testo in una cartella con un semplice 1GB di file di testo e vedere come tutto ciò non richiede algoritmi.

Sono alla ricerca di modi per ridurre il tempo di esecuzione di un pezzo di codice assolutamente fantastico . Vi vengono fornite conoscenze che altri hanno studiato per decenni e in grado di coglierlo in pochi giorni o ore. È come stare sulle spalle dei giganti.

    
risposta data 01.09.2012 - 09:57
fonte
7

They are not insightful in new ways about human cognition at all.

Non sono sicuro di come hai raggiunto questa conclusione, ma è completamente sbagliato. È vero il contrario: gli algoritmi offrono la più profonda intuizione della cognizione umana di sempre. Questo è formalizzato nella tesi di Church-Turing . La congettura riguarda la computabilità delle funzioni, ma ha un corollario molto importante sulla nostra intuizione di computabilità.

In effetti afferma che la mente umana è in linea di principio senza limiti (a volte definita un "costruttore universale", da non confondere con i concetti simili ma distinti di "assemblatore universale" e "costruttore universale von Neumann").

Se l'ipotesi è vera, allora (secondo David Deutsch, The Beginning of Infinity ) la mente (umana) è unica in tutto l'universo conosciuto: solo essa è in grado di provocare un effetto sostenuto sul resto dell'universo fisico.

L'argomento diventa un po 'complicato ma essenzialmente si riduce al punto che tutto il resto del nostro mondo, del nostro sistema solare e persino della nostra galassia ha una portata limitata: andate via abbastanza lontano e il suo effetto svanisce. Solo una mente creativa (come la mente umana) è in grado di estendere i propri limiti fisicamente imposti, perché le nostre menti sono in grado di generare conoscenza .

Se ti interessa la cognizione umana, ti consiglio di leggere il libro di Deutsch che spiega questo in grande dettaglio. E tutto ciò deriva direttamente dalla ... perspicacia degli algoritmi, in particolare della tesi di Church-Turing.

A parte questo, gli algoritmi sono interessanti una volta che ti causano uno spostamento nella cognizione. Ad esempio, una volta che capisci per prima cosa la ricorsione, la programmazione dinamica o la transitività, è come se una piccola luce si accendesse nella tua testa - hai una visione profonda. Quindi gli algoritmi sono, nel senso primario del mondo, penetranti .

    
risposta data 01.09.2012 - 15:47
fonte
2

Gli algoritmi fanno parte del tuo kit di strumenti di base per risolvere i problemi. Se devi reinventare un particolare tipo di routine di ordinamento ogni volta che hai bisogno di cose in un particolare ordine, sei a) sarà lento a sviluppare una soluzione, e b) quasi sicuramente ti sbagli (o almeno non è giusto).

Quando è meglio usare un albero B +? Quando è importante la località di riferimento e quando è possibile ignorarla? hai sempre bisogno di normalizzare completamente la progettazione del tuo database relazionale, o ci sono momenti in cui denormalizzare sarà meglio? Quali modelli funzionano bene con il lock di interprocessa (o interthread) e quali si fermano? Ecc., Ecc.

Se non capisci come pensare agli algoritmi (creati da altre persone o da te stesso), non passerai mai oltre essendo un semplice coder.

    
risposta data 01.09.2012 - 07:13
fonte
2

Quali algoritmi dimostrano sulla cognizione umana è che è possibile per noi creare applicazioni quasi infinitamente complesse, con solo il requisito di risolvere problemi relativamente minori e immediati. Questo perché generazioni di problemi precedenti sono stati risolti e incapsulati in algoritmi, che possono semplicemente essere usati in modo opaco senza la conoscenza di come questi algoritmi sono stati sviluppati o di come funzionano.

    
risposta data 01.09.2012 - 07:18
fonte
2

can tell you why fractals are awesome, why the golden ratio is awesome, why origami is awesome and scientific applications of all the above

Gli algoritmi sono "fantastici" perché abilitano tutte quelle cose. Come si dice a qualcuno come creare una struttura frattale data? Date loro una serie di istruzioni univoche. Questo è un algoritmo. Come calcoli il phi? Segui un algoritmo. Se la nozione generale non ti ispira, è probabilmente perché è già così profondamente radicata nella tua vita quotidiana che semplicemente la dai per scontata. Se non riesci a pensare ad applicazioni scientifiche di algoritmi, però, o non capisci il concetto o non sai la prima cosa sulla scienza.

I was expecting algorithms to be shattering preconceptions and mind-altering but time and time again they fail miserably.

Passando solo agli algoritmi per il calcolo, forse le tue aspettative sono gonfiate. È difficile essere pavimentati da qualsiasi cosa quando si è expexcting di essere pavimentato. tuttavia, ci sono molti algoritmi che sono belli in un certo senso o che richiedono una visione impressionante. Questi potrebbero non essere quelli che stai imparando in classe in questo momento, ma se non pensi che un algoritmo come quicksort sia almeno abbastanza carino potresti trovarti nel campo sbagliato. Se non sei colpito dal fatto che ci siano algoritmi che consentono di cercare istantaneamente database contenenti miliardi di record, non ci stai davvero provando. Se non trovi "fantastico" che algoritmi relativamente semplici consentano a milioni di computer di inviare reciprocamente un'infinità di pacchetti di dati in modo molto affidabile, non c'è nulla che io possa dire che ti impressionerà.

    
risposta data 01.09.2012 - 15:28
fonte
1

They are not insightful in new ways about human cognition at all.

Gli algoritmi possono essere considerati come prove costruttive dell'esistenza di una soluzione al problema considerato. Analogamente, una dimostrazione costruttiva dell'esistenza può essere trasformata in un algoritmo per calcolare il risultato.

E le prove, anche le prove alternative quando ne esiste già una, forniscono informazioni sul problema in questione.

    
risposta data 01.09.2012 - 13:26
fonte
0

Altri hanno già affrontato gli algoritmi nel senso del libro di cucina, quindi proverò ad affrontare la teoria.

È facile avere l'idea che un algoritmo semplice e veloce sia adeguato - e quindi il tuo codice viene utilizzato per problemi reali con set di dati più grandi e non è solo lento, è inutilizzabile.

Gran parte della teoria riguarda il modo in cui i requisiti di tempo e spazio crescono quando la dimensione del problema aumenta, ed è importante perché le scelte ingenue sono spesso molto veloci su piccoli set di dati, ma con una crescita inaccettabile.

Molti programmatori non hanno mai bisogno di analizzare un algoritmo per se stessi, e molti superano equivoci sulla teoria, ma chiunque pensi che un bubblesort sia un modo adeguato per ordinare un set di dati potenzialmente enorme dovrebbe essere girato.

Un'altra cosa è che mentre un sacco di algoritmi di base sono proprio questo, alcune delle idee che si incontrano per algoritmi più sofisticati sono davvero sorprendenti e decisamente terrificanti.

Ma ... beh, se i preconcetti sconvolgenti sono il tuo metro di paragone, per prima cosa hai bisogno di preconcetti rilevanti da infrangere. A meno che non sia una comprensione di quanto tempo esponenziale (o peggio) significhi realmente quando le dimensioni dei tuoi problemi aumentano, la teoria dell'algoritmo non mira davvero a scioccare.

    
risposta data 01.09.2012 - 08:39
fonte
0

Un altro punto - se stai cercando algoritmi che portino una parvenza alla cognizione umana, allora forse non sei stato semplicemente esposto a loro durante i tuoi studi. Sto parlando principalmente di argomenti dal campo dell'intelligenza artificiale (sistemi esperti, reti neurali, metaureuristiche), che di solito vengono insegnati in classi avanzate, o addirittura non del tutto.

    
risposta data 01.09.2012 - 11:36
fonte
-1

Hai mai cercato su Google qualcosa?

Quanto tempo hai impiegato per ottenere risultati? Scommetto che è stato abbastanza veloce. Si tratta di un algoritmo.

Quanti risultati ti ha restituito? Di nuovo, si tratta di un algoritmo.

Quanto rilevanti / corretti sono stati i risultati a ciò che hai cercato su Google? Algoritmo.

    
risposta data 01.09.2012 - 17:01
fonte

Leggi altre domande sui tag