Che cos'è un algoritmo?


12

Che cosa è esattamente un algoritmo, come in Algorithm? Il poco che capisco la parola, è che non è specifico per un linguaggio particolare, o modello di progettazione, piuttosto è uno dei principi più elementari (quindi suppongo che questa domanda mi faccia sembrare stupido).

Una delle "opzioni" che ho per capirlo, è che significa il metodo per ottenere qualcosa, che potrebbe essere scritto come un elenco in pseudocodice.

Quando scrivo codice più complicato, penso a cosa bisogna fare, con cosa e come ci arriverei (non in un linguaggio di programmazione), quindi scrivo quello in codice. È un buon modo per farlo, e c'è qualcosa a che fare con gli algoritmi?

(Volevo chiedere qui piuttosto su StackOverflow, perché non si tratta di un problema / lingua specifici e ho la sensazione che la maggior parte delle persone qui sappia il "perché", o almeno le risposte qui sono più dettagliate, piuttosto che su StackOverflow dove è diverso, mi dispiace se avrei dovuto chiedere laggiù)



1
@Apalala: non penso che si applichino tali limiti.
Josh K,

2
@Apalala: finito , non noto .
Josh K,

2
@Jonathan: "parole che devo cercare"? Quali parole? Sii specifico . Questo sito non è magico. Non ti conosciamo. Non sappiamo cosa leggi. Non sappiamo cosa ti abbia confuso. Si prega di essere specifici .
S.Lott

1
@Apalala: "finito" significa "limitato", niente di più. Un algoritmo è garantito per arrestarsi qualche volta. È molto più facile dimostrare la finezza quando si ha una sorta di modo per prevederlo, quindi gli algoritmi tendono ad essere prevedibili, ma la prevedibilità non è nella solita definizione di algoritmi.
David Thornley,

Risposte:


19

Un algoritmo è una sequenza finita di istruzioni ben definite per il calcolo di una funzione (o l'esecuzione di una procedura) che termina in uno stato finale ben definito.


1
+1. "Finiti, ben definiti ed efficaci" sono i tre criteri nella voce di Wikipedia. Hai anche tutti e tre qui.
S.Lott

Sono pronto per guardare i video citati da @ Jörg, ma il mio punto di vista attuale è che non solo i passaggi devono essere finiti. Se le risorse (incluso il tempo) non sono limitate, la procedura può essere chiamata o etichettata come qualsiasi cosa, ma non come un algoritmo .
Apalala,

@Apalala - Sto tornando indietro attraverso i miei libri di testo e non vedo questa limitazione da nessuna parte. È possibile che per un determinato set di dati o input un algoritmo non possa terminare (algoritmi come il metodo Newton-Raphson per trovare una radice potrebbero rimanere bloccati in un ciclo infinito), ma ciò non rende l'algoritmo non un algoritmo.
John Bode,

Le oscillazioni @John possono e vengono regolarmente rilevate a Newton-Raphson.
Apalala,

1
@Apalala: sembra più la definizione di un programma che di un algoritmo. Questa idea di passaggi discreti è presente nelle macchine di Turing, nelle macchine di registro, nelle macchine ad accesso casuale e, naturalmente, nei nostri attuali computer fisici, anche in quasi tutti i linguaggi di programmazione e persino, seppure più implicitamente, nel calcolo lambda. Ma questa è una restrizione arbitraria che non è inerente agli algoritmi. Gli algoritmi analogici , ad esempio, non hanno passaggi discreti (in realtà, cioè la definizione di un algoritmo analogico) e possono effettivamente essere implementati con un computer analogico.
Jörg W Mittag

15

Questa è in realtà una domanda piuttosto interessante, e in realtà è ancora una domanda di ricerca aperta.

Yuri Gurevich, uno dei giganti di Algorithm Theory, sta attualmente organizzando una serie di lezioni video sul sito Web della community di Microsoft Channel9:

Come puoi vedere, la tua vera domanda è in realtà il titolo della seconda lezione. Tuttavia, ti consiglio vivamente di guardarli tutti e tre.

Il primo, in particolare, contiene un paio di esempi di algoritmi che invalidano praticamente tutte le definizioni fornite nella maggior parte delle altre risposte qui.


2
Grazie per i collegamenti. Noterai quanto segue nel testo che accompagna il primo video, come parte della definizione di un algoritmo: "alla fine termina in uno stato finale finale". La terminazione è una parte essenziale della definizione di un algoritmo. Ecco perché i sistemi operativi e i server non terminanti non sono algoritmi.
LIProf,

4

Un algoritmo è come una buona ricetta di cucina . Hai alcuni input, alcuni passaggi intermedi ben definiti e ottieni un risultato finale.

Applicata alla programmazione, è una descrizione inequivocabile dei passaggi necessari per risolvere un problema specifico. Tutto ciò che è possibile scrivere nel linguaggio di programmazione di propria scelta può essere visto come un algoritmo, ma in genere il termine viene utilizzato solo per attività logiche o matematiche comuni, come l'ordinamento o la ricerca.


Esistono molti algoritmi che non danno necessariamente un risultato finale. Un sistema operativo o un server Web, ad esempio, è un algoritmo per il quale dare un risultato finale è generalmente considerato un bug.
Jörg W Mittag,

@ JörgWMittag ma un sistema operativo o un server Web è "un algoritmo"? Penso che non lo siano - possono risolvere i sottoproblemi del loro dominio usando algoritmi - e in ogni caso, hanno sicuramente bisogno di un risultato finale - ma hanno anche parti che non sono algoritmi, e nel complesso non lo sono ' algoritmi t. (È come hai detto in un altro commento: i sistemi operativi e i web server sono programmi ma non necessariamente algoritmi ).
Andres F.

2

Un algoritmo è un insieme di regole o processi (in un calcolo) utilizzati per la risoluzione dei problemi. Fondamentalmente, c'è un problema, vuoi una soluzione e il processo per questa soluzione è un algoritmo. Un algoritmo ha una serie finita di regole / processo per raggiungere una soluzione.

Se sei come Edsger W. Dijkstra , scriverai il tuo algoritmo su un pezzo di carta e elaborerai / perfezionerai l'algoritmo su carta fino a quando non sarai soddisfatto dei tuoi algoritmi. Altrimenti (specialmente quando si scrivono documentazioni), un diagramma di flusso viene utilizzato per rappresentare schematicamente il flusso di un algoritmo / processo. Ciò consente ad altri di criticare il diagramma di flusso e migliorare se necessario (senza preoccuparsi del linguaggio di programmazione necessario).

Non so se questo risponda alla tua domanda.


Non mi piace la parola impostata perché significa "non ordinato". Preferirei "sequenza", o tupla evento per rimanere nell'area matematica
BenjaminB,

@ Ubiquité, Set non significa necessariamente "non ordinato". È possibile classificare un set nell'ordine desiderato (ad es. Un ordine casuale). Tuttavia, ciò non richiede un downvote a causa dell'interpretazione della parola "set" da parte delle persone. Inoltre, puoi avere un set composto, che è un raggruppamento di set, che fa anche parte degli algoritmi. Quindi "set" può essere qualsiasi cosa, purché sia ​​usato in modo appropriato come soluzione algoritmica a un problema.
Buhake Sindi,

Non ho votato a fondo!
BenjaminB,

Scusa, non volevo biasimarti per il downvote. Il downvoter dovrebbe fornire esplicitamente le ragioni del downvote.
Buhake Sindi,

1

Algoritmo: un insieme ben ordinato di operazioni che sono 1) inequivocabili e 2) effettivamente calcolabili in modo tale che l'esecuzione delle operazioni a partire dalla prima produca un risultato dopo un numero finito di operazioni.


Contro esempio: un sistema operativo. Esso non produce un risultato a tutti , infatti, che di solito è considerato un bug.
Jörg W Mittag,

@Jörg, il sistema operativo produce molti risultati che, nel loro insieme, producono il risultato complessivo della fornitura di servizi di sistema alle applicazioni.
ThomasMcLeod,

@ JörgWMittag Come ho detto in altri commenti, una conclusione alla tua osservazione sarebbe che un sistema operativo non è, in realtà, un algoritmo;)
Andres F.

1

Algoritmo È la combinazione di passaggi sequenziali (che possono essere calcoli, elaborazione dei dati e attività di ragionamento) utilizzati per risolvere un problema in modo molto semplice ed efficiente.

È progettato nel modo più efficace per poter essere espresso in una quantità finita di spazio e tempo. possiamo implementarlo in qualsiasi linguaggio di programmazione.

Proprietà di un algoritmo: le seguenti sono le proprietà principali di un algoritmo: -

Un algoritmo deve avere un nome univoco. Dovrebbe avere insiemi esplicitamente definiti di input e output. Un algoritmo deve essere in ordine sequenziale con operazioni non ambigue. Deve avere un endpoint, ovvero si ferma in un tempo limitato. fai clic qui per conoscere la progettazione e l'analisi dell'algoritmo


0

Uso il termine per descrivere una formula per risolvere un problema specifico. La formula non deve necessariamente essere scritta in matematica o avere una relazione 1: 1 con un metodo. A scuola gli algoritmi e le strutture di dati sono strettamente correlati e possono essere scritti come formule matematiche o provati usando prove.


0

Un algoritmo è un'astrazione di un programma per computer ed è costituito da una serie di istruzioni per realizzare alcune attività ben definite in un numero finito di passaggi, sebbene il limite sul conteggio dei passi potrebbe essere molto grande e i singoli passi potrebbero essere complessi ( compiti finiti) a pieno titolo. Mentre ci sono programmi (corretti) che sono complessivamente noti non algoritmici, funzionano tutti ripetendo pezzi algoritmici in alcuni schemi. (Più interessanti sono i programmi il cui stato di terminazione non è noto, ma la maggior parte dei programmatori non si occupa di tali cose intenzionalmente; lo so che non lo so!)


0

Nessuno lo sa abbastanza :) Ho visto il termine applicato solo alle funzioni di calcolo matematico, a qualsiasi funzione che accetta input e produce output e a tutto ciò che accetta input ed esegue un qualche tipo di operazione su di esso.

Considerereste una o tutte le seguenti cose come un algoritmo?

  1. Una funzione che calcola il tasso di interesse di un prestito su un periodo di 20 anni
  2. Logica aziendale che verifica se tutte le informazioni sono state inserite in una domanda di prestito
  3. Una finderfunzione che richiede un database per un oggetto Cliente
  4. Una funzione "helper" che pulisce e formatta l'inserimento dei dati
  5. Una funzione che analizza un file XML e mappa i dati su oggetti business
  6. Una classe che accetta input e li scrive in un file di testo

0

Un algoritmo è un'idea, un metodo, una tecnica, "intelligente" per il calcolo o l'esecuzione di un'attività di natura astratta, ma poiché funziona su computer nel mondo reale, aspiriamo a utilizzare il minor numero di risorse possibile , che sono, nel mondo dei computer, tempo e memoria.


0

Un algoritmo è una sequenza di passaggi ben definiti che producono un risultato in tempo finito.

Passaggio ben definito: è qualcosa che puoi fare o calcolare, che è definito con precisione. Solo leggendo il passaggio sai cosa devi fare e come farlo. In particolare, puoi scriverlo in un linguaggio di programmazione che conosci e assicurarti che il frammento del programma corrisponda esattamente al passaggio.

Sequenza: i passaggi vengono eseguiti nell'ordine specificato. I passaggi possono essere eseguiti più di una volta in base ai dati (loop) o non eseguiti affatto in base ai dati (se dichiarazioni). Gli algoritmi paralleli impongono solo un ordine parziale sui passaggi, quindi qui sto semplificando troppo. Sarebbe più corretto descriverlo come un insieme parzialmente ordinato di una sequenza, ma volevo mantenere le parole un po 'più semplici. Inoltre, è possibile incorporare facilmente un set parzialmente ordinato in un ordine completo.

Risultato: uno stato o un valore finale. Non deve essere prevedibile in anticipo, ma deve essere un fine definito che soddisfa alcune condizioni. Ciò significa che un sistema operativo non è un algoritmo, sebbene ne utilizzi molti.

Finito: un algoritmo è garantito per arrestarsi qualche volta, almeno su una macchina che può funzionare abbastanza a lungo. Non è necessariamente garantito che si fermi in un tempo prevedibile, e non è garantito che si fermi prima che il sole si espanda e diventi rosso su qualsiasi macchina esistente. Questo significa anche che un sistema operativo non è un algoritmo, poiché idealmente funzionerà per sempre. Ho visto la parola "procedura" usata per descrivere qualcosa che sarebbe un algoritmo se fossimo sicuri che un giorno si fermerebbe. (È possibile avere un algoritmo che si fermerà in un periodo di tempo sconosciuto. Supponiamo, supponiamo, che la congettura di Goldbach sia stata dimostrata matematicamente falsa, in una dimostrazione non costruttiva, quindi c'era un numero pari> 2 che non era la somma di due numeri primi Un algoritmo che ha semplicemente testato i numeri pari sarebbe infine terminato,

L'algoritmo è una cosa intenzionalmente astratta, quindi non consideriamo domande come "È fisicamente possibile eseguirlo prima della morte per caldo dell'Universo?". Sarebbe troppo difficile rispondere. Se si riferisce alle operazioni del computer, è facile implementarlo in un linguaggio di programmazione.


-1

Se dovessi dare una definizione generale, direi che un algoritmo è una formula per risolvere un problema di elaborazione che è più complesso di, e finisce per essere più efficiente della soluzione di forza evidente / bruta.

Inoltre, è importante notare che un algoritmo non è un codice sorgente specifico; è il calcolo stesso. Tra le altre cose, ciò significa che qualsiasi linguaggio completo di Turing può implementare qualsiasi algoritmo implementabile da qualsiasi altro linguaggio completo di Turing.


Mi è piaciuta molto questa risposta, e penso che potremmo andare un po 'oltre e dire (anche se non correlato alla domanda originale): qualsiasi algoritmo è un'ottimizzazione di una soluzione di ricerca di forza bruta / albero. Mi chiedevo se potesse essere provato formalmente.
Mojuba,

-1 "Algoritmo" è un termine matematico ben definito.
Apalala,

1
@Apalala, quindi cosa ti impedisce di ridefinirlo per motivi di chiarezza o, diciamo, una migliore comprensione della sua essenza? L'algoritmo come "insieme di istruzioni" non mi dice quasi nulla.
Mojuba,

1
@mojuba Non mi interessa davvero se il termine verrà ridefinito, ma penso che la definizione tradizionale sia stata utile, perché almeno differenziata tra i modi di affrontare i problemi: un algoritmo è una ricetta per risolvere un problema utilizzando risorse limitate . Cambia quella definizione e la conseguenza prevedibile è che dovremo trovare un'altra parola che significhi la stessa. Darn! Tutta la conoscenza acquisita nel secolo scorso sulla computabilità e la complessità scompare senza una solida definizione di algoritmo !
Apalala,

1
Una ricerca di forza bruta è un algoritmo. Non è generalmente un algoritmo carino e non vale la pena scrivere. Non vedo alcuna reale utilità nell'escludere la forza bruta, e in molti casi non è chiaro cosa significhi "meglio della forza bruta".
David Thornley,
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.