Casa Finanza personale Algoritmi Per Dummies Cheat Sheet - dummies

Algoritmi Per Dummies Cheat Sheet - dummies

Video: Introduction to Big O Notation and Time Complexity (Data Structures & Algorithms #7) 2025

Video: Introduction to Big O Notation and Time Complexity (Data Structures & Algorithms #7) 2025
Anonim

di John Paul Mueller, Luca Massaron

Gli algoritmi non devono essere noiosi o difficili da usare. In effetti, gli algoritmi ti circondano in molti modi che potresti non aver pensato, e li usi ogni giorno per svolgere compiti importanti. Tuttavia, è necessario essere in grado di utilizzare algoritmi senza dover diventare un matematico.

I linguaggi di programmazione consentono di descrivere i passaggi utilizzati per creare un algoritmo. Alcune lingue sono migliori di altre nello svolgere questo compito in un modo che le persone possono comprendere senza diventare informatici. Python semplifica l'utilizzo degli algoritmi perché include un sacco di supporto integrato ed esteso (attraverso l'uso di pacchetti, set di dati e altre risorse). Questo Cheat Sheet ti aiuta ad accedere ai suggerimenti più comuni per rendere l'utilizzo degli algoritmi semplice e veloce.

Individuazione dell'algoritmo necessario

La seguente tabella descrive algoritmi e tipi di algoritmi che potrebbero essere utili per vari tipi di analisi dei dati. (È possibile trovare discussioni su tutti questi algoritmi in Algorithms For Dummies.)

Algorithm Descrizione Link utili
A * Cerca L'algoritmo tiene traccia del costo dei nodi mentre li esplora utilizzando il equazione: f (n) = g (n) + h (n), dove:

n è l'identificatore di nodo

g (n) è il costo per raggiungere il nodo fino ad ora

h (n) è il costo stimato per raggiungere il l'obiettivo dal nodo

f (n) è il costo stimato del percorso da n all'obiettivo

L'idea è di cercare prima i percorsi più promettenti ed evitare percorsi costosi.

Standford. edu
Albero bilanciato Un tipo di albero che mantiene una struttura equilibrata attraverso la riorganizzazione in modo che possa fornire tempi di accesso ridotti. Il numero di elementi sul lato sinistro differisce dal numero sul lato destro di uno al massimo. Webdocs
Ricerca bidirezionale Questa tecnica esegue la ricerca simultanea dal nodo radice e dal nodo obiettivo finché i due percorsi di ricerca non si incontrano nel mezzo. Un vantaggio di questo approccio è che è efficiente nel tempo perché trova la soluzione più veloce di molte altre soluzioni a forza bruta. Inoltre, utilizza la memoria in modo più efficiente rispetto ad altri approcci e trova sempre una soluzione. Il principale svantaggio è la complessità di implementazione. Pianificazione. cs
Albero binario Questo è un tipo di albero che contiene nodi che si connettono a zero (nodi foglia), uno o due nodi (nodi ramo) altri nodi. Ogni nodo definisce i tre elementi che deve includere per fornire connettività e memorizzare i dati: archiviazione dei dati, connessione a sinistra e connessione corretta. cs. CMU. edu
Ricerca per ampiezza Questa tecnica inizia dal nodo radice, esplora prima ciascuno dei nodi figli e solo dopo passa al livello successivo. Progredisce livello per livello fino a quando non trova una soluzione. Lo svantaggio di questo algoritmo è che deve memorizzare ogni nodo in memoria, il che significa che utilizza una notevole quantità di memoria per un gran numero di nodi. Questa tecnica può verificare la presenza di nodi duplicati, risparmiando tempo e sempre con una soluzione. Khan Academcy
Brute Force Questa è una tecnica di problem solving in cui qualcuno prova ogni possibile soluzione, cercando la soluzione migliore. Le tecniche a forza bruta garantiscono una soluzione ottimale quando ce n'è una, ma richiedono molto tempo per essere implementate e la maggior parte delle persone le evita. Igm. univ
First Depth-Search Questa tecnica inizia dal nodo radice ed esplora una serie di nodi figli connessi fino a raggiungere un nodo foglia. Progredisce ramo dopo ramo finché non trova una soluzione. Lo svantaggio di questo algoritmo è che non è possibile verificare la presenza di nodi duplicati, il che significa che potrebbe attraversare gli stessi percorsi dei nodi più di una volta. In effetti, questo algoritmo potrebbe non trovare affatto una soluzione, il che significa che è necessario definire un punto limite per mantenere l'algoritmo dalla ricerca infinita. Un vantaggio di questo approccio è che è efficiente in termini di memoria. Hacker Earth
Dividi e Conquista Questa è una tecnica di problem solving in cui il problema è suddiviso in parti più piccole possibili e risolto utilizzando l'approccio più semplice possibile. Questa tecnica consente di risparmiare tempo e risorse considerevoli rispetto ad altri approcci, come la forza bruta. Tuttavia, non sempre garantisce un risultato ottimale. Khan Academy
Dijikstra Questo è un algoritmo utilizzato per trovare il percorso più breve in un grafico diretto, ponderato (con pesi positivi). Geeks for Geeks
Graph Un grafico è una sorta di estensione di un albero. Come per gli alberi, hai nodi che si connettono tra loro per creare relazioni. Tuttavia, a differenza degli alberi binari, un grafico può avere più di una o due connessioni. In effetti, i nodi dei grafici hanno spesso una moltitudine di connessioni. Vedete grafici usati in luoghi come le mappe per il GPS e tutti i tipi di altri luoghi per i quali l'approccio top-down di un albero non funzionerà. Esercizi
Algoritmi golosi Thistechnique di uno dei problem solving in cui la soluzione si basa sulla migliore risposta per ogni fase del processo di problem-solving. Gli algoritmi greedy generalmente fanno due presupposti:

È possibile effettuare un'unica scelta ottimale in un dato passaggio.

Scegliendo la selezione ottimale in ogni fase, è possibile trovare una soluzione ottimale per il problema generale.

Tutorial
Greedy Best-First Search (BFS) L'algoritmo sceglie sempre il percorso più vicino all'obiettivo utilizzando l'equazione: f (n) = h (n). Questo particolare algoritmo può trovare soluzioni abbastanza rapidamente, ma può anche rimanere bloccato nei loop, quindi molte persone non lo considerano un approccio ottimale per trovare una soluzione. Centurion2
Hashing Questo è un metodo per predire la posizione di un particolare oggetto dati nella struttura dati (qualunque sia la struttura) prima di cercarlo effettivamente. Questo approccio si basa sull'uso di chiavi inserite in un indice. Una funzione di hash trasforma la chiave in un valore numerico che l'algoritmo inserisce in una tabella hash. Una tabella hash fornisce i mezzi per creare un indice che punti agli elementi in una struttura dati in modo che un algoritmo possa facilmente prevedere la posizione dei dati. Tutorial
Heap Questo è un albero sofisticato che consente l'inserimento di dati nella struttura ad albero. L'utilizzo dell'inserimento dei dati rende più veloce l'ordinamento. È possibile classificare ulteriormente questi alberi come quantità massime di heap e min in base alla capacità dell'albero di fornire immediatamente il valore massimo o minimo presente nell'albero. Esercitazioni
Euristica Questa è una tecnica di problem solving che si basa sulla scoperta di sé e produce risultati sufficientemente utili (non necessariamente ottimali, ma abbastanza buoni) per affrontare un problema abbastanza bene che una soluzione migliore non è t necessario. L'auto-scoperta è il processo che consente all'algoritmo di mostrarti un percorso potenzialmente utile per una soluzione (ma devi comunque contare sull'intuizione e sulla comprensione umana per sapere se la soluzione è quella giusta). nord-ovest. edu
MapReduce Questo è un framework per far funzionare gli algoritmi usando i calcoli in parallelo (usando più computer collegati insieme in una rete), consentendo agli algoritmi di completare le loro soluzioni più velocemente. Hadoop Apache
Mergesort Mergesort è un metodo di ordinamento basato su un confronto generale. Dipende da un approccio divide et impera nello svolgimento del proprio compito. Geeks for Geeks
Nash Equilibrium Questa è una teoria di gioco in cui gli altri giocatori conoscono la strategia di equilibrio per gli altri giocatori, quindi nessuno ha nulla da guadagnare cambiando la sua strategia personale. Questa teoria vede l'uso in qualsiasi situazione ostile in cui il giocatore deve rendere conto delle decisioni prese da tutti gli altri giocatori per vincere la partita. Khan Academy
PageRank PageRank è un algoritmo per misurare l'importanza di un nodo in un grafico. Questo algoritmo è alla base degli algoritmi principali di Google per l'attivazione di ricerche pertinenti per gli utenti. Princeton. edu
Ricerca euristica pura Questo algoritmo espande i nodi in ordine di costo. Mantiene due liste. L'elenco chiuso contiene i nodi che ha già esplorato e l'elenco aperto contiene i nodi che deve ancora esplorare. In ogni iterazione, l'algoritmo espande il nodo con il costo più basso possibile. Tutti i nodi figlio vengono inseriti nell'elenco chiuso e vengono calcolati i costi dei singoli nodi figlio. L'algoritmo invia i nodi figli con un costo ridotto alla lista aperta ed elimina i nodi figlio con un costo elevato. Di conseguenza, l'algoritmo esegue una ricerca intelligente e basata sui costi per la soluzione. World of Computing
Quicksort Questa è una strategia di ordinamento per uso generico basata sul partizionamento di matrici di dati in array più piccoli.Dipende da un approccio divide et impera nello svolgimento del proprio compito. Esercitazioni
Albero sbilanciato Questo è un albero che posiziona i nuovi elementi di dati laddove necessario nell'albero senza considerare l'equilibrio. Questo metodo di aggiunta di elementi rende la costruzione dell'albero più veloce ma riduce la velocità di accesso durante la ricerca o l'ordinamento. Quora

Differenziamento di algoritmi da altre strutture matematiche

Se sei come la maggior parte delle persone, spesso ti ritrovi a grattarti la testa quando si tratta di strutture matematiche perché nessuno sembra sapere come usare correttamente i termini. È come se le persone cercassero intenzionalmente di rendere le cose difficili! Dopo tutto, cos'è un'equazione e perché è diversa da un algoritmo? Bene, non temere più: la seguente tabella fornisce la guida definitiva alle strutture matematiche che potresti incontrare ma che hanno avuto paura di chiedere.

Struttura Descrizione
Equazione Numeri e simboli che, se presi nel loro insieme, equivalgono a un valore specifico. Un'equazione contiene sempre un segno di uguale in modo da sapere che i numeri e i simboli rappresentano il valore specifico sull'altro lato del segno di uguale. Le equazioni contengono generalmente informazioni variabili presentate come simbolo, ma non sono richieste per utilizzare le variabili.
Formula Una combinazione di numeri e simboli utilizzati per esprimere informazioni o idee. Una formula normalmente presenta concetti matematici o logici, tali da definire il più grande divisore comune (GCD) di due interi (il video di Khan Academy dice come funziona). Generalmente, una formula mostra la relazione tra due o più variabili. La maggior parte delle persone vede una formula come un tipo speciale di equazione.
Algorithm Una sequenza di passaggi usati per risolvere un problema. La sequenza presenta un metodo unico per risolvere un problema fornendo una soluzione particolare. Un algoritmo non deve rappresentare concetti matematici o logici, anche se le presentazioni in questo libro spesso rientrano in quella categoria perché le persone utilizzano più comunemente algoritmi in questo modo. Alcune formule speciali sono anche algoritmi, come la formula quadratica. Affinché un processo possa rappresentare un algoritmo, deve essere il seguente:

Finito: L'algoritmo deve alla fine risolvere il problema.

Ben definito: La serie di passaggi deve essere precisa e presentare passaggi comprensibili, soprattutto da parte dei computer, che devono essere in grado di creare un algoritmo utilizzabile.

Effettivo: Un algoritmo deve risolvere tutti i casi del problema per il quale qualcuno lo ha definito. Un algoritmo dovrebbe sempre risolvere il problema che deve risolvere. Anche se è necessario prevedere alcuni guasti, l'incidenza del fallimento è rara e si verifica solo in situazioni accettabili per l'uso previsto dell'algoritmo.

Modi sorprendenti per utilizzare algoritmi

Le persone utilizzano in realtà algoritmi tutto il tempo. Ad esempio, fare toast è un esempio di un algoritmo, come spiegato in questo post del blog. Fare toast non è un algoritmo sorprendente, ma quelli nella tabella seguente, che usano un computer per eseguire compiti, lo sono.

Attività Perché è sorprendente
Crittografia Mantenere i dati al sicuro è una battaglia continua con gli hacker che attaccano costantemente le fonti di dati. Gli algoritmi consentono di analizzare i dati, inserirli in qualche altra forma e quindi riportarli alla sua forma originale in un secondo momento.
Analisi del grafico La capacità di decidere sulla linea più breve tra due punti trova tutti i tipi di utilizzo. Ad esempio, in un problema di routing, il tuo GPS non potrebbe funzionare senza questo particolare algoritmo perché non potrebbe mai indirizzarti lungo le strade della città usando il percorso più breve dal punto A al punto B.
Generazione di numeri pseudocasuali Immagina di giocare che non è mai cambiato. Si inizia nello stesso punto e si eseguono gli stessi passaggi nello stesso modo ogni volta che si gioca. Noioso! Senza la capacità di generare numeri apparentemente casuali, molti compiti del computer diventano inutili o impossibili.
Pianificazione Rendere l'uso delle risorse equo per tutti gli interessati è un altro modo in cui gli algoritmi rendono nota la loro presenza in modo significativo. Ad esempio, le luci di cronometraggio alle intersezioni non sono più semplici dispositivi che contano i secondi tra le variazioni di luce. I dispositivi moderni prendono in considerazione tutti i tipi di problemi, ad esempio l'ora del giorno, le condizioni meteorologiche e il flusso di traffico. La pianificazione arriva in molte forme, tuttavia. Considera in che modo il tuo computer esegue più attività contemporaneamente. Senza un algoritmo di pianificazione, il sistema operativo potrebbe afferrare tutte le risorse disponibili e impedire all'applicazione di svolgere qualsiasi lavoro utile.
Ricerca Individuare le informazioni o verificare che le informazioni visualizzate siano quelle desiderate, è un compito essenziale. Senza questa funzionalità, molte attività eseguite online non sarebbero possibili, come trovare il sito Web su Internet che vende la caffettiera perfetta per il tuo ufficio.
Ordinamento Determinare l'ordine in cui presentare le informazioni è importante perché la maggior parte delle persone oggi soffre di sovraccarico di informazioni e deve ridurre la quantità di dati. Immagina di andare in Amazon, trovando più di mille caffettiere in vendita, e tuttavia non essere in grado di ordinarle in base al prezzo o alla recensione più positiva. Inoltre, molti algoritmi complessi richiedono dati nell'ordine corretto per funzionare in modo affidabile, quindi l'ordinamento è un requisito importante per risolvere più problemi.
Trasformare La conversione di un tipo di dati in un altro tipo di dati è fondamentale per comprendere e utilizzare i dati in modo efficace. Ad esempio, potresti capire bene i pesi imperiali, ma tutte le tue fonti usano il sistema metrico. La conversione tra i due sistemi consente di comprendere i dati. Allo stesso modo, la Fast Fourier Transform (FFT) converte i segnali tra il dominio del tempo e il dominio della frequenza, consentendo a cose come il tuo router WiFi di funzionare.

Gestire la complessità degli algoritmi

Sai già che gli algoritmi sono complessi. Tuttavia, è necessario sapere quanto è complesso un algoritmo perché più è complesso, più tempo è necessario per l'esecuzione. La seguente tabella ti aiuta a capire i vari livelli di complessità presentati in ordine di tempo di esecuzione (dal più veloce al più lento).

Complessità Descrizione
Complessità costante O (1) Fornisce un tempo di esecuzione invariabile, indipendentemente dalla quantità di input fornita. Ogni input richiede una singola unità di tempo di esecuzione.
Complessità logaritmica O (log n) Il numero di operazioni cresce a un ritmo più lento dell'input, rendendo l'algoritmo meno efficiente con piccoli input e più efficiente con quelli più grandi. Un algoritmo tipico di questa classe è la ricerca binaria.
Complessità lineare O (n) Le operazioni crescono con l'input in un rapporto 1: 1. Un algoritmo tipico è l'iterazione quando si esegue la scansione di input una volta e si applica un'operazione a ciascun elemento di esso.
Complessità Linearitmica O (n log n) La complessità è un mix tra complessità logaritmica e lineare. È tipico di alcuni algoritmi intelligenti utilizzati per ordinare dati, come Mergesortsort, Heapsort e Quicksort.
Complessità quadratica O (n 2 ) Le operazioni crescono come un quadrato del numero di input. Quando si ha una iterazione all'interno di un'altra iterazione (chiamata iterazioni nidificate in informatica), si ha una complessità quadratica. Ad esempio, hai un elenco di nomi e, per trovare quelli più simili, confronti ciascun nome con tutti gli altri nomi. Alcuni algoritmi di ordinamento meno efficienti presentano tale complessità: ordinamento di bolle, ordinamento di selezione e ordinamento di inserimento. Questo livello di complessità significa che i tuoi algoritmi possono essere eseguiti per ore o addirittura giorni prima di raggiungere una soluzione.
Complessità cubica O (n 3 ) Le operazioni crescono anche più rapidamente della complessità quadratica perché ora si hanno più iterazioni nidificate. Quando un algoritmo ha questo ordine di complessità ed è necessario elaborare una modesta quantità di dati (100.000 elementi), l'algoritmo potrebbe funzionare per anni. Quando si dispone di un numero di operazioni che è una potenza dell'input, è comune fare riferimento all'algoritmo come in esecuzione in tempo polinomiale.
Complessità esponenziale O (2 n ) L'algoritmo richiede il doppio del numero di operazioni precedenti per ogni nuovo elemento aggiunto. Quando un algoritmo ha questa complessità, anche piccoli problemi possono richiedere per sempre. Molti algoritmi che eseguono ricerche esaurienti hanno una complessità esponenziale. Tuttavia, l'esempio classico di questo livello di complessità è il calcolo dei numeri di Fibonacci.
Complessità fattoriale O (n!) Questo algoritmo presenta un vero incubo di complessità a causa dell'elevato numero di combinazioni possibili tra gli elementi. Immagina: se il tuo input è di 100 oggetti e un'operazione sul tuo computer richiede 10 -6 secondi (una velocità ragionevole per ogni computer al giorno d'oggi), avrai bisogno di circa 10 140 anni per completare l'attività con successo (una quantità di tempo impossibile perché l'età dell'universo è stimata in 10 14 anni). Un famoso problema di complessità fattoriale è il problema del commesso viaggiatore, in cui un venditore deve trovare il percorso più breve per visitare molte città e tornare alla città di partenza.
Algoritmi Per Dummies Cheat Sheet - dummies

Scelta dell'editore

Il programma in cinque passaggi per superare la menopausa - dummy

Il programma in cinque passaggi per superare la menopausa - dummy

Alcune donne capiscono a malapena che la menopausa è loro. Altre donne, tuttavia, sono meno fortunate. Se sei uno di questi, prendi in mano questi pochi modi per rendere la tua esperienza più facile per te stesso: capisci e accetta che stai attraversando una transizione naturale, proprio come la pubertà. Fortunatamente, sei più vecchio e più saggio di te ...

Menopausa For Dummies Cheat Sheet (edizione UK) - dummies

Menopausa For Dummies Cheat Sheet (edizione UK) - dummies

Menopausa segna la fine della fase riproduttiva della tua vita e così è un momento significativo di cambiamento fisico, emotivo e mentale per molte donne ma, per generazioni, donne di tutte le età hanno vagato alla cieca in menopausa senza sapere cosa aspettarsi. Qui puoi scoprire alcune delle nozioni di base.

Perimenopausa: facilitare la transizione dalle mestruazioni alla menopausa - manichini

Perimenopausa: facilitare la transizione dalle mestruazioni alla menopausa - manichini

Mestruazioni e menopausa sono ben noti biologici pietre miliari nella vita di una femmina. Contrariamente al pensiero popolare, la menopausa non è il periodo di mesi o anni in cui una donna sta "attraversando il cambiamento". "Questo lasso di tempo è chiamato perimenopausa. La menopausa è una data effettiva nel tempo. In particolare, è il 12 ° anniversario dell'ultimo ciclo mestruale di una donna. ...

Scelta dell'editore

Come utilizzare il filtro automatico personalizzato su una tabella di Excel - dummies

Come utilizzare il filtro automatico personalizzato su una tabella di Excel - dummies

È Possibile creare un filtro automatico personalizzato . Per fare ciò, seleziona il comando Filtro testo dal menu della tabella e scegli una delle opzioni di filtro del testo. Indipendentemente dall'opzione di filtro del testo selezionata, Excel visualizza la finestra di dialogo Filtro automatico personalizzato. Questa finestra di dialogo consente di specificare con estrema precisione quali record si desidera ...

Come utilizzare la funzione DPRODUCT in un database Excel - dummies

Come utilizzare la funzione DPRODUCT in un database Excel - dummies

DPRODUCT moltiplica i valori che corrispondono al criterio in un database Excel. Questo è potente ma anche in grado di produrre risultati che non sono l'intenzione. In altre parole, è una cosa da aggiungere e ricavare una somma. Questa è un'operazione comune su un set di dati. Osservando la seguente figura, è possibile ...

Come utilizzare la funzione DPRODUCT in Excel - dummy

Come utilizzare la funzione DPRODUCT in Excel - dummy

La funzione DPRODUCT in Excel è strana. La funzione DPRODUCT moltiplica i valori nei campi da un elenco di database in base ai criteri di selezione. Perché vorresti farlo? Chissà. La funzione utilizza la sintassi = DPRODUCT (database, campo, criteri) in cui il database è un riferimento all'intervallo alla tabella di Excel che contiene il valore desiderato ...

Scelta dell'editore

Programmazione con Java: riutilizzo dei nomi nella tua app per Android - dummies

Programmazione con Java: riutilizzo dei nomi nella tua app per Android - dummies

Ci sono un paio di cose a cui vuoi pensare quando riutilizzi i nomi nella tua app per Android. È possibile dichiarare due variabili Java - bag1 e bag2 - per fare riferimento a due diversi oggetti BagOfCheese. Va bene. Ma a volte, avere solo una variabile e riutilizzarla per il secondo oggetto funziona altrettanto bene, ...

Java: Mettere a frutto l'uso della classe - dummies

Java: Mettere a frutto l'uso della classe - dummies

La classe Employee nell'elenco non ha alcun metodo principale , quindi non c'è un punto di partenza per l'esecuzione del codice. Per risolvere questo problema, il programmatore scrive un programma separato con un metodo principale e utilizza tale programma per creare istanze Employee. Questo elenco di codici mostra una classe con un metodo principale - uno che inserisce il ...

Classi wrapper java - dummies

Classi wrapper java - dummies

La differenza tra tipi primitivi e tipi di riferimento è una delle funzionalità più controverse di Java e gli sviluppatori si lamentano spesso sulle differenze tra valori primitivi e valori di riferimento. Ogni tipo primitivo viene cotto nella lingua. Java ha otto tipi primitivi. Ogni tipo di riferimento è una classe o un'interfaccia. È possibile definire il proprio ...