youssef91
Ominide
3 min. di lettura
Vota 3 / 5

Concetti Chiave

  • L'efficienza di un algoritmo si valuta principalmente in base al tempo di esecuzione e allo spazio di memoria richiesto.
  • Il Bubble Sort è un algoritmo di ordinamento che scambia elementi contigui per ordinare una sequenza di dati.
  • L'algoritmo di selezione trova l'elemento più piccolo e lo posiziona all'inizio dell'array, mantenendo un tempo di esecuzione costante nei diversi casi.
  • La ricerca sequenziale scansiona un array per determinare la presenza, la frequenza o l'assenza di un elemento.
  • La ricerca binaria richiede un array ordinato e riduce progressivamente il problema dimezzando il numero di elementi da confrontare ad ogni iterazione.

Indice

  1. Algoritmi
  2. Efficienza di un algoritmo

Algoritmi

Efficienza di un algoritmo

Nel valutare l’efficienza di un algoritmo bisogna considerare 2 fattori:
• Il tempo di esecuzione di un algoritmo
• Lo spazio di memoria richiesto dall’esecuzione
Entrambi i fattori sono importanti ma generalmente ci si concentra sul primo fattore.
• Algoritmi di ordinamento
Gli algoritmi di ordinamento consistono nel scambiare gli elementi presenti in una struttura dati (es.

Array) in modo da disporli in ordine crescente o decrescente.
1. Bubble Sort
Algoritmo per scambio, lavora con 2 elementi, occorrono N scansioni quanto gli elementi – 1. Si basa sull’idea di far emergere pian piano gli elementi più piccoli verso l’inizio dell’insieme da ordinare facendo sprofondare quelli maggiori verso il fondo. La strategia è quella di scorrere più volte la sequenza da ordinare, verificando ad ogni passo l’ordinamento reciproco degli elementi contigui (vicini) e scambiarli eventualmente di posizione se non ordinati. In C++:
2. Selezione
Questo algoritmo seleziona l’elemento più piccolo dell’array e lo pone in prima posizione.
ES. 20 33 17 2 -> 2 33 17 20 -> 2 17 33 20 -> 2 17 20 33.
Il tempo di esecuzione è uguale sia nel caso migliore (già ordinato) che nel caso peggiore.
3. Inserimento
Questo algoritmo consiste nell’inserire un elemento alla volta nella posizione che gli spetta, spostando verso destra gli altri elementi.
Il tempo di esecuzione è proporzionale al numero di confronti che si effettuano durante l’esecuzione.

• Algoritmi di ricerca
Ricercare un elemento in un vettore significa individuare la posizione (i) che questa assume all’interno di un vettore se è presente.

1. Ricerca sequenziale
Questo algoritmo effettua una scansione sequenziale dell’array. Si possono verificare 3 situazioni:
1° situazione: dire se un elemento è presente oppure no.
2° situazione: dire se un elemento è presente almeno una volta nel vettore.
3° situazione: dire quante volte è presente un elemento nel vettore.

2. Ricerca binaria
Per usare questo algoritmo, il vettore deve essere ordinato. Il numero da ricercare nel vettore di N elementi viene confrontato con l’elemento centrale del vettore (n/2). Si possono verificare 3 situazioni:
1° situazione: il numero da ricercare è minore dell’elemento centrale, quindi il numero si deve cercare nella prima metà del vettore.
2° situazione: il numero da ricercare è uguale all’elemento centrale.
3° situazione: il numero da ricercare è maggiore dell’elemento centrale, quindi il numero si deve cercare nella seconda metà del vettore.
Per scrivere questo algoritmo bisogna porsi nella situazione peggiore. Questo algoritmo rientra nella famiglia di algoritmi che sfruttano la strategia del “DIVIDE ET IMPERA” e riducono la complessità dell’algoritmo effettuando la suddivisione progressiva della dimensione del problema in due parti, cioè applicando la riduzione di dicotomica (=in 2), ogni iterazione infatti dimezza il numero degli elementi che bisogna confrontare, mentre nell’algoritmo sequenziale diminuiva di un elemento.
Descrizione dell’algoritmo
1. Individuare l’elemento in posizione centrale. (pos. Iniziale + pos. Finale) /2
2. Effettuare il confronto. N=V[medio]:
a) Se si, terminare la ricerca e trovato=true;
b) Se N> V[medio] riduciamo il vettore alla 2° metà, INIZIO= medio + 1;
c) Se N Si ripete finché Inizio=fine.

Domande da interrogazione

  1. Quali sono i due fattori principali da considerare nell'efficienza di un algoritmo?
  2. Nell'efficienza di un algoritmo bisogna considerare il tempo di esecuzione e lo spazio di memoria richiesto.

  3. Come funziona l'algoritmo di ordinamento Bubble Sort?
  4. Il Bubble Sort scambia gli elementi contigui non ordinati, facendo emergere gli elementi più piccoli verso l'inizio e sprofondare quelli maggiori verso il fondo.

  5. Qual è la caratteristica principale dell'algoritmo di selezione?
  6. L'algoritmo di selezione seleziona l'elemento più piccolo e lo pone in prima posizione, mantenendo lo stesso tempo di esecuzione sia nel caso migliore che peggiore.

  7. In cosa consiste l'algoritmo di ricerca binaria?
  8. La ricerca binaria richiede un vettore ordinato e confronta il numero da cercare con l'elemento centrale, dimezzando progressivamente il numero di elementi da confrontare.

  9. Quali sono le situazioni che si possono verificare nella ricerca sequenziale?
  10. Nella ricerca sequenziale si possono verificare tre situazioni: determinare se un elemento è presente, se è presente almeno una volta, e quante volte è presente nel vettore.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community