In matematica, informatica e altre dottrine correlate, l' algoritmo è definito come un insieme di precetti stabiliti e inequivocabili, trovati metodicamente e in modo limitato, che consentono di eseguire calcoli, elaborare determinate informazioni, fornire soluzioni a problemi e svolgere varie attività. Una volta che si parte da uno stato iniziale e da un'entrata, seguendo le procedure richieste, si raggiunge lo stato finale e si ottiene un risultato. Gli algoritmi sono oggetto di indagine degli algoritmi e sebbene molti possano non crederci, possono anche essere utilizzati in tutti gli aspetti della vita quotidiana.
Cos'è un algoritmo
Sommario
In informatica è solitamente definita come una successione di istruzioni sequenziali, in cui vengono svolti alcuni processi per dare risposte a determinate decisioni o esigenze. Allo stesso modo, gli algoritmi sono frequentemente utilizzati in logica e matematica, oltre ad essere la base per lo sviluppo di manuali utente, opuscoli illustrativi, tra gli altri. Uno dei più illustri in matematica è quello attribuito al geometra Euclide, per raggiungere il massimo comune divisore di due interi positivi e il noto "metodo gaussiano" per determinare sistemi di equazioni lineari.
In relazione all'informatica, questo calcolo può essere conosciuto come la sequenza di linee guida da seguire per la determinazione di un problema attraverso l'uso di un computer.
Pertanto, l'algoritmo è inteso come una disciplina che si concentra sull'analisi e sulla progettazione di algoritmi. In considerazione del primo, si cerca di esaminare proprietà come la sua correttezza e la sua efficacia rispetto al tempo e allo spazio, per comprendere i problemi che possono essere risolti algoritmicamente. Quanto al secondo, cerca di studiare i paradigmi già stabiliti e propone nuovi esempi.
L'algoritmo si trova al centro del progresso del calcolo ed è importante nelle diverse aree di esso. In questo modo, sarebbe impossibile per servizi di successo come Facebook e Google gestire l'enorme quantità di informazioni di cui dispongono senza la collaborazione di algoritmi o strutture di dati specializzate. Tuttavia, nella vita quotidiana vengono utilizzati anche algoritmi, un esempio di questo è l'accensione della stufa, poiché inizia nel momento in cui la persona va in cucina, la osserva e ha la sua fine, quando procede ad accenderla.
Caratteristiche di un algoritmo
Sebbene l'algoritmo sia noto come l'insieme finito e ordinato di vari passaggi che portano alla risoluzione di un problema, si dice che la natura di queste difficoltà varia a seconda del contesto in cui si trovano, in questo modo ci sono problemi chimica, matematica, filosofica, tra gli altri. Quindi, si può dire che la sua natura è varia e la sua esecuzione da parte del computer non è necessaria. Al di là di tutto ciò che è stato spiegato in precedenza, gli algoritmi hanno caratteristiche che sono elementari per determinare ciò che sono oggi e verranno menzionati di seguito.
- Le linee guida contenute in un algoritmo devono essere specifiche per evitare di lasciare spazio a qualsiasi tipo di confusione, questo significa che le istruzioni corrispondenti devono essere seguite in modo appropriato o, al contrario, la rappresentazione grafica del flusso a cui ci si sta iscrivendo non faciliterà la soluzione. corretta.
- Deve essere in perfetta definizione, cercando il più possibile di seguirlo tutte le volte che è necessario, in modo da ottenere lo stesso risultato e in caso contrario l'algoritmo non sarà affidabile e non servirà da guida nel prendere una decisione.
- Sono noti per la particolarità di essere finiti, di solito finiscono ad un certo punto e poi lanciano un risultato alla fine di ogni passaggio. Se l'algoritmo si estende indefinitamente, tornando a un punto iniziale che non potrà mai essere risolto, c'è la presenza di un paradosso o il noto “loop” delle ripetizioni.
- Infine, si dice che la leggibilità degli algoritmi è l'elemento chiave, perché se il suo argomento è incomprensibile, le istruzioni corrispondenti non potrebbero essere seguite, inoltre, comporta una formulazione diretta, chiara e laconica del testo che si trova in ciascuna di esse.
Parti di un algoritmo
Ogni operazione algoritmica ha tre diverse parti che sono soggette alla struttura di base di un sistema e queste sono:
- Input: chiamato anche header o punto di partenza, è l'istruzione iniziale che rappresenta la genesi dell'algoritmo e quella che ne motiva la lettura.
- Processo: chiamato anche dichiarazione, è la precisa elaborazione offerta dall'algoritmo ed è fondamentalmente il tronco delle sue chiavi per la formulazione delle istruzioni.
- Output: in quest'ultima fase sono presenti le istruzioni specifiche determinate dall'algoritmo, ad esempio i suoi comandi o risoluzioni.
Esempi di algoritmi
Esempi comuni di calcoli matematici includono 2 + 3 = 5 per l'addizione e 15-9 = 6 per la sottrazione. Un altro modo per visualizzare semplici algoritmi è nelle ricette di cucina poiché descrivono un processo specifico e ordinato, ad esempio, "prima dovresti mettere mezza pentola d'acqua per riscaldare, poi dovresti aggiungere un pizzico di sale e infine il peperone verrà diviso per estrarre i semi e le vene ". Questo modello presenta un inizio, un processo e una fine, che sono sostanzialmente ciò che definisce gli algoritmi.
Tipi di algoritmi
Tra i vari tipi di algoritmi esistenti nel mondo, viene posto l'accento su quelli classificati secondo un sistema di segni e altri secondo la loro funzione. L'algoritmo è sostanzialmente la soluzione più conosciuta per risolvere qualsiasi problema particolare e in base alle sue strategie e alle sue funzioni ne esistono di diverse tipologie, tra cui dinamiche, inverse, forza bruta, opportunistiche, marcatura, casuale, ecc. Oltre agli algoritmi sopra menzionati, ce ne sono migliaia adatti a risolvere difficoltà in qualsiasi area.
Secondo il tuo sistema di segni
Qualitativo e quantitativo si trovano in questa categoria.
- Gli algoritmi qualitativi sono caratterizzati dall'avere elementi verbali, un esempio di questi sono le istruzioni o il riconosciuto "passo dopo passo" che vengono conferiti oralmente, come ricette per arti culinarie o procedure per eseguire lavori manuali.
- Gli algoritmi quantitativi sono l'esatto contrario di quelli qualitativi, per la presenza di alcuni elementi numerici e per l'uso della matematica per eseguire calcoli, ad esempio quando si trova la radice quadrata o si risolvono le equazioni.
All'interno di questa classificazione ci sono anche algoritmi computazionali e non computazionali. Quelle computazionali si effettuano tramite computer e si caratterizzano per essere talmente complesse da richiedere l'esecuzione di una macchina, oltre a ciò, sono algoritmi quantitativi ottimizzabili. Quelli non computazionali non hanno l'obbligo di essere eseguiti per mezzo di una macchina o di un computer; un chiaro esempio di ciò è la programmazione di una televisione.
Secondo la sua funzione
I seguenti si trovano in questa classificazione.
1. Algoritmo di marcatura
Questo è caratterizzato dall'utilizzo dell'automazione per fissare i prezzi in modo diligente, concentrandosi su fattori come il comportamento degli utenti ed è anche noto come la capacità di determinare automaticamente i prezzi per i componenti in svalutazione, per ottenere un aumento dei profitti del venditori. Ha svolto un ruolo molto importante nelle pratiche comuni delle industrie aeree sin dai primi anni '90.
L'algoritmo di marcatura si distingue per essere una delle pratiche più diffuse in settori altamente competitivi, riferita alle agenzie di viaggio oa quelle strutture online. Questo tipo di algoritmo può diventare estremamente complesso o relativamente semplice, poiché in molti casi si nota che sono ottimizzati o autodidatti con la continuità di determinati test. Oltre a tutto ciò, gli algoritmi di tagging possono anche diventare impopolari tra la clientela poiché gli individui tendono a valutare sia la stabilità che l'equità.
2. Algoritmi probabilistici
Sono quelli in cui il modo in cui si ottengono i risultati dipende dalle probabilità, questi sono comunemente noti come algoritmi casuali.
In alcune applicazioni, la gestione di questo tipo di operazione è comune, ad esempio, quando viene simulato nel tempo il comportamento di un qualsiasi sistema esistente o ideato, in cui si ottiene di conseguenza una soluzione fortuita. In altre circostanze, il problema da risolvere è solitamente deterministico, ma c'è la possibilità di trasformarlo in uno fortuito, per risolverlo applicando l'algoritmo di probabilità. La cosa positiva di quelli casuali è che la loro applicazione non richiede studi matematici molto sofisticati.
Inoltre, all'interno di questo gruppo ci sono tre tipi principali noti come numerici, Monte Carlo e Las Vegas.
- Gli algoritmi numerici possono fornire un risultato approssimativo del problema e sono generalmente applicati in ingegneria.
- Gli algoritmi Monte Carlo possono dare la soluzione giusta o sbagliata e avere un certo margine di errore e infine.
- Gli algoritmi di Las Vegas si distinguono per non lasciare mai una risposta sbagliata, infatti, trovano la soluzione corretta o semplicemente ti informano del possibile fallimento.
La programmazione dinamica si riferisce al metodo in cui l'algoritmo calcola i risultati. A volte le soluzioni di alcuni elementi che presentano i problemi dipendono dai risultati di altri problemi minori. Quindi, per risolverli, gli stessi valori devono essere ricalcolati per risolvere i più piccoli sottoproblemi, tuttavia, questo può creare uno spreco di cicli. Per risolvere questo problema, è possibile utilizzare la programmazione dinamica e in questo caso viene ricordata la soluzione di ogni sottoproblema, per utilizzare lo stesso valore invece di ripeterlo più volte.
3. Algoritmi euristici
Si distinguono per trovare soluzioni e anche così non garantiscono che si troverà la migliore delle risposte, per questo motivo possono essere considerati algoritmi approssimativi. Questi possono essere utilizzati quando si considera impossibile trovare una soluzione attraverso una via normale. L'euristica fornisce gli usi che verranno spiegati di seguito. Nella pianificazione vengono utilizzati per programmare le attività in un breve periodo di tempo, nella progettazione vengono utilizzati per delineare sistemi elettrici o digitali e nella simulazione sono utilizzati per verificare determinate procedure.
4. Algoritmi di backtracking
Sono note come strategie ricorsive che risolvono problemi come puzzle, labirinti o pezzi simili, in cui viene effettuata una ricerca approfondita per trovare una possibile soluzione. Il suo nome si riferisce al fatto che nelle indagini fatte per trovare un risultato si torna sempre al punto precedente per poter testare delle alternative. Di solito vengono revocati per osservare il loro impatto sull'economia, sui mercati, sulla determinazione dei prezzi, su determinate operazioni e persino sulla società stessa.
5. Algoritmo avido
È noto come il distruttore o il goloso ed è applicabile nei problemi di ottimizzazione, in ogni fase di questo algoritmo viene fatta una scelta logica e ottimale per ottenere la migliore delle soluzioni globali. Tuttavia, si deve tenere presente che una volta raggiunto un giudizio, non si può fare assolutamente nulla per correggerlo o modificarlo in futuro. Questa operazione ha questo nome perché in ogni passaggio si sceglie la frazione migliore che è in grado di "deglutire" senza preoccuparsi di cosa accadrà in seguito.
Proprietà di un algoritmo
Vari autori hanno cercato di definire algoritmi in modo formale utilizzando modelli matematici. Tuttavia, questi campioni sono strettamente correlati a un tipo particolare di informazioni che includono numeri, simboli e alcuni grafici, mentre operano su una vasta quantità di distribuzione dei dati. In generale, la partecipazione comune di ciascuna delle definizioni è riassunta nelle seguenti tre proprietà:
Dichiarazione problema
La risoluzione dei problemi per mezzo di un computer, può consistere in quel processo in cui viene descritto un problema e viene consentito lo sviluppo di un programma in grado di risolverlo. Questo processo richiede l'analisi del problema, la progettazione di un algoritmo e la sua trasformazione in un programma, nonché la sua implementazione e validazione. I primi due passaggi sono i più complessi in questo processo, ma una volta esaminato il problema e ottenuto un algoritmo in grado di risolverlo, il tuo compito si basa principalmente sulla traduzione nel linguaggio di programmazione desiderato.
Analisi della soluzione generale
Una volta definito il problema, è il momento di analizzare quanto segue:
- Le informazioni sui biglietti che ci forniscono.
- I risultati desiderati.
- Il dominio del lavoro, dichiarazioni o altri elementi necessari.
L'analisi degli algoritmi è nota come la parte più importante della più ampia teoria della complessità computazionale, in quanto fornisce calcoli teorici per le risorse che qualsiasi algoritmo richiede per risolvere un dato problema computazionale. Quando si esegue un'indagine teorica, è comune calcolare le sue complicazioni in senso asintotico per ottenere una dimensione dell'input sufficientemente grande. A tale scopo vengono utilizzati il limite superiore asintotico insieme alle notazioni theta e omega e si noti che la misura non asintotica può essere computerizzata.
Misure precise di efficienza sono davvero utili per chi utilizza effettivamente gli algoritmi, in quanto hanno maggiore precisione e questo permette loro di determinare il tempo necessario per l'esecuzione. Per alcuni individui come i creatori di videogiochi, la costante nascosta può significare una grande differenza tra successo e fallimento. Le valutazioni del tempo possono dipendere da come viene definito un determinato passo e affinché l'analisi abbia un senso occorre garantire che il tempo sia marcatamente limitato da una costante.
Elaborazione dell'algoritmo
Per realizzare lo sviluppo di un'operazione è importante che vengano svolte una serie di procedure per ottemperare alla risoluzione di un problema stesso. Per iniziare, è necessario effettuare un'analisi preventiva della difficoltà e questo viene fatto attraverso uno studio che dimostri il vero funzionamento del problema molto prima che venga eseguito qualsiasi algoritmo. Pertanto, viene valutata la definizione dei requisiti, in questo passaggio è necessario avere una chiara idea di quali problemi risolvere, sia esso la somma di due numeri, l'ordinamento di un elenco di numeri, ecc.
Successivamente viene eseguita la rispettiva identificazione dei moduli, poiché da essa dipende la corretta implementazione degli algoritmi per fornire possibili soluzioni ai requisiti sopra individuati.
Infine, il calcolo viene implementato in un linguaggio di programmazione comprensibile da un computer in modo che sia in grado di comprendere le istruzioni che modella e quindi di poterle eseguire, raggiungendo il risultato atteso. In quest'ultima procedura è già possibile parlare di un programma che si compone di una serie di istruzioni che vengono ordinate una dopo l'altra e riescono a risolvere i requisiti stabiliti.
È importante ricordare che in tempo sequenziale, gli algoritmi svolgono la loro funzione in un tempo discretizzato e cercano di definire le sequenze di stati computazionali in ogni input considerato valido. Nello stato astratto, queste operazioni sono elementi indipendenti e si ritiene che in esse le strutture di ordine primordiale possano diventare invarianti sotto l'isomorfismo. Nell'esplorazione delimitata, le transizioni da uno stato all'altro sono completamente stabilite da una spiegazione permanente e finita, in cui tra uno stato e l'altro viene preso in considerazione solo il numero limitato di termini nello stato corrente.
Né va trascurato che gli algoritmi sono solitamente espressi attraverso linguaggi di programmazione "pseudo-codici", il linguaggio usuale e anche i ben noti diagrammi di flusso. Allo stesso modo, è importante menzionare che gli algoritmi svolgono un ruolo fondamentale nell'elaborazione a causa della loro rappresentazione dei dati come sequenze di bit. Da un altro punto di vista, un programma è definito come l'algoritmo che esprime al computer quei passaggi specifici che deve seguire per svolgere adeguatamente determinate attività. D'altra parte, imparare a scrivere pseudocodice rende la programmazione più semplice e verrà quindi spiegato in seguito.
I linguaggi di programmazione sono conosciuti come linguaggio formale o artificiale perché hanno regole grammaticali ben definite, ha la capacità di fornire al programmatore la capacità di testualizzare una serie di istruzioni o sequenze di regolamenti sotto forma di algoritmi con lo scopo per mantenere un controllo sul comportamento fisico e logico del computer, in questo modo, si possono raggiungere i vari tipi di informazioni. Questo insieme di precetti scritti per mezzo di un linguaggio di programmazione è designato come un programma.
I linguaggi di programmazione sono solitamente costituiti da un insieme di simboli e regole grammaticali e semantiche che definiscono le strutture attuali del linguaggio e il loro significato. Da un altro punto di vista, i linguaggi per computer includono anche linguaggi di programmazione, un chiaro esempio di ciò è l' HTML, che è ciò che soddisfa determinate istruzioni per eseguire il contenuto di diversi documenti. Il linguaggio di programmazione può consentire la specifica precisa di quei dati che devono essere gestiti da un software specifico in un'ampia gamma di circostanze.
D'altra parte, lo pseudocodice è il linguaggio di descrizione algoritmico che utilizza le convenzioni elementari di un vero linguaggio di programmazione, ma che è progettato per la lettura umana invece di leggere attraverso una macchina, mantenendo l'indipendenza da qualsiasi altro tipo di linguaggio di programmazione. Lo pseudo-codice ignora i dettagli che non sono considerati essenziali per la comprensione umana dell'algoritmo, come i codici di un sistema, le dichiarazioni di variabili e persino alcune subroutine. In questo modo, il linguaggio di programmazione cerca di completarsi con descrizioni precise in linguaggio naturale o con notazioni matematiche compatte.