Esame: Heap e code di priorità

Domande e risposte brevi su heap e code di priorità per prepararsi all'esame di informatica. Argomenti fondamentali e concetti chiave per studenti universitari.

Sunny55·56 schede·56 domande
universitàcomputer_sciencealgorithms
0
Lo so
1 / 56
0
Sto imparando
Fronte

Che cos'è un heap?

Tocca per girare
Retro

Un heap è una struttura dati ad albero che soddisfa la proprietà di heap, dove ogni nodo è maggiore (max heap) o minore (min heap) dei suoi figli.

Tocca per girare
Lo so
Sto imparando

Quiz(56 domande)

Domanda 1 di 56

1. Qual è la caratteristica principale di un max heap?

Termini in questo set(56)

Fondamenti degli Heap(16)

Che cos'è un heap?

Un heap è una struttura dati ad albero che soddisfa la proprietà di heap, dove ogni nodo è maggiore (max heap) o minore (min heap) dei suoi figli.

Proprietà principale di un max heap?

In un max heap, per ogni nodo, il valore è sempre maggiore o uguale ai valori dei suoi figli.

Proprietà principale di un min heap?

In un min heap, per ogni nodo, il valore è sempre minore o uguale ai valori dei suoi figli.

Heap vs Albero binario

Un heap è un albero binario completo, ma non ogni albero binario è un heap. Gli heap rispettano specifiche proprietà di ordinamento.

Qual è l'operazione principale negli heap?

L'operazione principale è l'heapify, che mantiene la proprietà dell'heap dopo l'inserimento o l'estrazione di un nodo.

Come si rappresenta un heap in un array?

In un array, per un nodo in posizione i\displaystyle i: il figlio sinistro è in 2i+1\displaystyle 2i + 1, il figlio destro in 2i+2\displaystyle 2i + 2, e il padre è in i−12\displaystyle \frac{i-1}{2}.

Vero o falso: Gli heap possono avere nodi non pieni.

Vero. Gli heap non devono essere completamente pieni, ma devono mantenere la loro struttura ad albero completo.

Che cos'è l'heapify?

L'heapify è un'operazione che ripristina la proprietà di heap in un nodo e i suoi figli.

Esempio di max heap: 10, 5, 3

10 è il nodo radice. 5 e 3 sono figli. Completando l'heap: 10, 5, 3, 2.

Quale operazione rimuove il nodo radice?

L'operazione di estrazione rimuove il nodo radice e ripristina la proprietà di heap attraverso l'heapify.

Definizione di heap completo.

Un heap completo è un albero binario in cui tutti i livelli sono completamente riempiti eccetto, eventualmente, l'ultimo livello.

Quali sono le applicazioni comuni degli heap?

Ordinamento (Heap Sort), implementazioni di code di priorità, gestione della memoria.

Heap: struttura dati statica o dinamica?

Dinamica. Gli heap possono cambiare dimensione durante l'esecuzione di un programma.

Che cos'è la complessità di inserimento in un heap?

La complessità di inserimento in un heap è O(extlogn)\displaystyle O( ext{log } n).

Qual è la complessità di estrazione?

La complessità di estrazione dalla cima dell'heap è O(extlogn)\displaystyle O( ext{log } n).

Vero o falso: Gli heap sono sempre bilanciati.

Falso. Gli heap seguono una struttura completa ma non garantiscono un bilanciamento come gli alberi AVL.

Code di Priorità(16)

Definizione di una coda di priorità

Una struttura dati che gestisce una collezione di elementi, ciascuno con una priorità. Gli elementi con priorità più alta vengono estratti prima.

Utilizzo principale delle code di priorità

Gestione di eventi in tempo reale, pianificazione di processi nei sistemi operativi, implementazione degli algoritmi di Dijkstra e A*.

Cosa distingue una coda di priorità da una coda normale?

Una coda normale gestisce gli elementi in ordine FIFO, mentre una coda di priorità estrae gli elementi in base alla priorità assegnata.

True or False: Le code di priorità possono utilizzare heap per la loro implementazione.

Vero: Gli heap, specialmente gli heap binari, sono comunemente usati per implementare efficacemente le code di priorità.

Come si inserisce un elemento in una coda di priorità?

L'elemento viene aggiunto e poi il heap viene riordinato per mantenere la proprietà di priorità, di solito tramite una 'percolazione' verso l'alto.

Esempio di utilizzo di una coda di priorità

Gestione di processi in un sistema operativo. Processi con priorità più alta vengono eseguiti prima di quelli con priorità più bassa.

Quali sono le operazioni principali su una coda di priorità?

- Inserimento - Estrazione del massimo/minimo - Aggiornamento della priorità - Controllo della priorità

Cosa succede quando si estrae un elemento da una coda di priorità?

L'elemento con la priorità più alta viene rimosso e l'heap viene ristrutturato per mantenere la proprietà di heap.

Fill in the blank: In una coda di priorità, gli elementi vengono estratti in base alla loro ______.

priorità.

Confronto: Coda normale vs Coda di priorità

Coda normale: FIFO; Coda di priorità: estrae in base alla priorità.

Quale struttura dati è comunemente usata per le code di priorità?

Heap binario, utile per garantire operazioni logaritmiche efficienti.

Cause → Effetto: Aggiunta di un elemento con alta priorità.

Il nuovo elemento sposta gli elementi esistenti, aumentando il tempo di estrazione per quelli a bassa priorità.

Vantaggio delle code di priorità rispetto alle code normali?

Flessibilità nella gestione degli elementi in base alla loro importanza, non solo all'ordine di arrivo.

Cosa accade se due elementi hanno la stessa priorità?

L'ordine di estrazione dipende dall'implementazione specifica, ma normalmente segue l'ordine di inserimento.

Domanda: Le code di priorità possono essere implementate con array?

Sì, ma non sono efficienti come gli heap per operazioni di inserimento ed estrazione.

Esempio di priorità numerica: 5, 3, 8

Estrazione: 8 (massimo), seguito da 5 e 3.

Operazioni sugli Heap(12)

Cos'è l'operazione di inserimento in un heap?

L'inserimento in un heap comporta l'aggiunta di un nuovo elemento. Si posiziona alla fine e si effettua un "heapify up" per mantenere la struttura.

Come si estrae l'elemento massimo da un heap?

L'elemento massimo è la radice. Si sostituisce con l'ultimo elemento e si esegue un "heapify down" per ripristinare la proprietà dell'heap.

Vero o falso: Un heap è sempre bilanciato.

Falso. Un heap è completo, non necessariamente bilanciato, ma ogni livello è riempito da sinistra a destra.

Qual è la complessità dell'inserimento in un max heap?

La complessità è O(extlogn)\displaystyle O( ext{log } n) poiché si può dover risalire fino alla radice.

Descrivi brevemente l'operazione di aggiornamento in un heap.

L'aggiornamento implica modificare il valore di un nodo e poi eseguire un "heapify up" o "heapify down" per mantenere la struttura.

Confronta l'estrazione di un elemento da un max heap e da un min heap.

Max heap estrae il massimo, min heap estrae il minimo. Entrambi hanno complessità O(extlogn)\displaystyle O( ext{log } n).

Qual è l'effetto di un 'heapify down'?

Ripristina la proprietà dell'heap dopo l'estrazione, confrontando un nodo con i figli e scambiando se necessario.

Esempio pratico: Iniziamo con 10, 20, 30 in un max heap. Aggiungiamo 25.

Heap: 30, 20, 10, 25. Si posiziona 25 e si confronta con 20, poi si scambia.

Quando si usa 'heapify up'?

Si usa durante l'inserimento o l'aggiornamento di un nodo per mantenere la proprietà dell'heap.

Qual è la complessità dell'operazione 'heapify down'?

La complessità è O(extlogn)\displaystyle O( ext{log } n), poiché si può scendere fino all'ultima foglia.

Cos'è un heap completo?

Un heap completo è un albero binario in cui ogni livello, tranne l'ultimo, è pieno. L'ultimo livello è riempito a sinistra.

Fill in the blank: L'operazione di _________ ripristina la proprietà dell'heap dopo una modifica.

heapify

Applicazioni e Complessità(12)

Applicazioni degli heap nel mondo reale?

1. Gestione delle code di stampa. 2. Implementazione di algoritmi di Ordinamento. 3. Simulazioni e giochi.

Heap vs. Array: differenze?

1. Struttura dati dinamica vs. statica. 2. Accesso non sequenziale vs. sequenziale. 3. Complessità di inserimento: O(extlogn)\displaystyle O( ext{log } n) vs. O(n)\displaystyle O(n).

Vero o falso: gli heap sono sempre bilanciati.

Falso. Gli heap non garantiscono un bilanciamento perfetto come gli alberi bilanciati.

Esempio di codice per una coda di priorità?

Utilizzo di un heap per gestire le priorità: ```python import heapq coda = [] heapq.heappush(coda, (priorità, elemento)) ```

Qual è la complessità dell'estrazione dal heap?

La complessità dell'estrazione dal heap è O(extlogn)\displaystyle O( ext{log } n).

Cause ed effetti: heap in algoritmi di Dijkstra?

Causa: utilizzo di un heap per gestire i nodi. Effetto: migliora l'efficienza dell'algoritmo.

Utilizzo delle code di priorità nei sistemi operativi?

Gestione dei processi: - Scheduling - Assegnazione della CPU - Gestione delle risorse

Esempio di applicazione pratica di heap?

Gestione delle chiamate in un call center, dove le chiamate vengono servite in base alla priorità.

Vero o falso: gli heap possono essere implementati come array.

Vero. Gli heap possono essere implementati usando array, sfruttando indici per posizioni.

Qual è la complessità della costruzione di un heap?

La complessità della costruzione di un heap è O(n)\displaystyle O(n).

Heap e alberi binari: somiglianze?

1. Entrambi sono strutture ad albero. 2. Heap è un albero binario completo. 3. Entrambi supportano operazioni di inserimento e cancellazione.

Come si scambia un elemento in un heap?

Scambia l'elemento con il suo genitore, ripetendo finché la proprietà dell'heap è rispettata.

Domande in questo set(56)

1. Qual è la caratteristica principale di un max heap?

A.Ogni nodo è maggiore o uguale ai suoi figli
B.Ogni nodo è minore o uguale ai suoi figli
C.L'albero è sempre bilanciato
D.Non ha una struttura ad albero

2. Quale delle seguenti affermazioni descrive meglio un'applicazione pratica degli heap?

A.Gestione delle code di emergenza nei servizi sanitari.
B.Archiviazione di dati in un database relazionale.
C.Formattazione di documenti di testo.
D.Riproduzione di file multimediali.

3. Qual è la definizione di una coda di priorità?

A.Una struttura dati che gestisce gli elementi in ordine di priorità.
B.Una struttura dati che gestisce gli elementi in ordine FIFO.
C.Una struttura dati che non permette duplicati.
D.Una struttura dati che ordina gli elementi alfabeticamente.

4. Qual è l'operazione che si esegue per ripristinare la struttura di un max heap dopo l'inserimento di un nuovo nodo?

A.Heapify up
B.Heapify down
C.Sistemazione
D.Bilanciamento

5. In un min heap, cosa succede se un nodo ha un valore maggiore dei suoi figli?

A.Deve essere ripristinato con l'operazione heapify
B.È una condizione valida
C.Il nodo viene rimosso
D.Non c'è alcuna relazione

6. Qual è la principale differenza tra un heap e un array?

A.Un heap è una struttura dati dinamica, un array è statica.
B.Un heap utilizza solo numeri interi, mentre un array può contenere tipi diversi.
C.Un heap richiede più memoria di un array.
D.Un heap è sempre ordinato, un array no.

7. Qual è un uso comune delle code di priorità?

A.Gestione di eventi in tempo reale.
B.Ordinamento di una lista.
C.Memorizzazione di dati statici.
D.Archivio di file.

8. Se estrai il valore massimo da un max heap, cosa succede al nodo radice?

A.Rimane invariato
B.Viene rimosso
C.Viene duplicato
D.Viene aggiornato

9. Quale affermazione riguardo agli heap è corretta?

A.Un heap è sempre un albero binario completo
B.Un albero binario completo è sempre un heap
C.Un heap può avere nodi non pieni
D.Un heap non può essere rappresentato in un array

10. Vero o falso: gli heap garantiscono sempre una struttura perfettamente bilanciata.

A.Vero
B.Falso
C.Solo per i min-heap
D.Solo per i max-heap

11. Cosa differenzia una coda di priorità da una coda normale?

A.La coda di priorità estrae in base alla priorità.
B.La coda normale estrae in base alla priorità.
C.Entrambe usano lo stesso metodo di estrazione.
D.La coda di priorità non può gestire priorità duplicate.

12. Un min heap è progettato per restituire quale tipo di valore durante l'estrazione?

A.Il valore massimo
B.Il valore medio
C.Il valore minimo
D.Il valore massimo tra i minimi

13. Quale operazione viene utilizzata per mantenere la proprietà di un heap dopo l'inserimento di un nodo?

A.Heapify
B.Merge
C.Sort
D.Insert

14. Qual è un esempio di utilizzo di una coda di priorità in un sistema operativo?

A.Gestire l'accesso alla memoria.
B.Gestire l'input dell'utente.
C.Gestire l'assegnazione della CPU ai processi.
D.Gestire le connessioni di rete.

15. Le code di priorità possono utilizzare quali strutture dati per la loro implementazione?

A.Heap.
B.Array statici.
C.Liste concatenate.
D.Alberi binari di ricerca.

16. Quale affermazione è vera riguardo alla complessità di 'heapify down'?

A.È O(1)\displaystyle O(1)
B.È O(n)\displaystyle O(n)
C.È O(logn)\displaystyle O(log n)
D.È O(n2)\displaystyle O(n^2)

17. Se un heap ha 15 nodi, qual è il livello più basso che può contenere nodi?

A.4
B.3
C.5
D.2

18. Qual è la complessità temporale media per estrarre l'elemento con la massima priorità da un heap?

A.O(1)\displaystyle O(1)
B.O(n)\displaystyle O(n)
C.O(logn)\displaystyle O( log n)
D.O(nlogn)\displaystyle O(n log n)

19. Come si inserisce un elemento in una coda di priorità?

A.L'elemento viene aggiunto e il heap viene riordinato.
B.L'elemento viene semplicemente accodato.
C.L'elemento viene ignorato se ha bassa priorità.
D.L'elemento viene estratto subito.

20. Quale delle seguenti operazioni non è un modo valido per modificare un nodo in un heap?

A.Aggiornare il nodo
B.Cancellare il nodo
C.Aggiungere un nodo
D.Spostare il nodo senza 'heapify'

21. Quale affermazione è falsa riguardo agli heap?

A.Possono avere nodi non pieni
B.Devono essere bilanciati
C.Possono essere rappresentati come un array
D.Sono utilizzati in strutture di dati dinamiche

22. Quale delle seguenti affermazioni è FALSA riguardo la costruzione di un heap?

A.La complessità è O(n)\displaystyle O(n).
B.Un heap può essere costruito usando un array.
C.L'operazione di costruzione richiede un ordinamento preliminare.
D.Gli elementi possono essere aggiunti in qualsiasi ordine.

23. Cosa avviene durante l'estrazione da una coda di priorità?

A.L'elemento con la priorità più alta viene rimosso.
B.Tutti gli elementi vengono rimossi.
C.Si estrae un elemento casuale.
D.Il primo elemento della coda viene estratto.

24. Cosa significa un heap completo?

A.Ogni nodo ha due figli
B.Ogni livello è completamente pieno tranne l'ultimo
C.Ogni livello è completamente vuoto
D.Un heap dove i nodi sono ordinati

25. Qual è la rappresentazione di un nodo padre in un heap quando si utilizza un array?

A.Posizione (i-1)/2
B.Posizione 2i + 1
C.Posizione 2i + 2
D.Posizione i*2

26. Qual è una somiglianza tra gli heap e gli alberi binari?

A.Entrambi sono strutture lineari.
B.Entrambi possono essere utilizzati per l'ordinamento.
C.Entrambi supportano operazioni di ricerca binaria.
D.Entrambi sono strutture ad albero.

27. Cosa significa 'percolazione' verso l'alto in una coda di priorità?

A.Riordinare il heap dopo l'inserimento di un elemento.
B.Rimuovere un elemento dalla coda.
C.Aggiungere un elemento alla fine della coda.
D.Controllare la priorità degli elementi.

28. Se hai un max heap con elementi 40, 30, 20 e aggiungi 35, quale sarà la nuova radice?

A.40
B.35
C.30
D.20

29. Quale operazione rimuove un nodo dalla cima dell'heap?

A.Estrazione
B.Inserimento
C.Heapify
D.Merge

30. Quale dei seguenti algoritmi utilizza un heap per migliorare la sua efficienza?

A.Algoritmo di Dijkstra.
B.Algoritmo di Bubble Sort.
C.Algoritmo di ricerca binaria.
D.Algoritmo di Merge Sort.

31. Cosa accade se due elementi nella coda di priorità hanno la stessa priorità?

A.L'ordine di estrazione dipende dall'implementazione.
B.Entrambi vengono estratti contemporaneamente.
C.Viene scelto il primo inserito.
D.Non possono coesistere nella coda.

32. Qual è la complessità dell'operazione di inserimento in un min heap?

A.O(1)\displaystyle O(1)
B.O(n)\displaystyle O(n)
C.O(logn)\displaystyle O(log n)
D.O(n2)\displaystyle O(n^2)

33. Che cosa rappresenta l'operazione di heapify?

A.Ripristina la proprietà dell'heap
B.Ordina un array
C.Aggiunge un nodo all'heap
D.Rimuove il nodo radice

34. Quale delle seguenti operazioni in un heap ha complessità O(n)\displaystyle O(n)?

A.Costruzione dell'heap.
B.Estrazione dell'elemento massimo.
C.Inserimento di un nuovo elemento.
D.Ripristino della proprietà dell'heap dopo un'estrazione.

35. Qual è un vantaggio delle code di priorità rispetto alle code normali?

A.Gestione basata sull'importanza degli elementi.
B.Maggiore semplicità di implementazione.
C.Minore utilizzo di memoria.
D.Velocità massima garantita per ogni operazione.

36. Quando dovresti utilizzare 'heapify down'?

A.Durante l'inserimento
B.Durante l'aggiornamento
C.Dopo l'estrazione della radice
D.Non si usa mai

37. Quale delle seguenti affermazioni è corretta riguardo alla complessità di inserimento in un heap?

A.O(log n)
B.O(n)
C.O(1)
D.O(log n^2)

38. Quando si scambia un elemento in un heap, quale è il criterio principale da rispettare?

A.L'elemento deve essere spostato all'ultima posizione.
B.L'elemento deve mantenere la proprietà dell'heap.
C.L'elemento deve diventare il nuovo radice.
D.L'elemento deve essere rimosso dalla struttura.

39. Quale delle seguenti affermazioni è vera riguardo le code di priorità?

A.Possono essere implementate usando strutture come gli array.
B.Non possono gestire priorità duplicate.
C.Sono sempre più veloci delle code normali.
D.Non possono essere usate per applicazioni in tempo reale.

40. Se un nodo in un heap viene aggiornato a un valore più alto in un max heap, cosa devi fare?

A.Eseguire 'heapify up'
B.Eseguire 'heapify down'
C.Nessuna azione necessaria
D.Eliminare il nodo

41. Qual è la complessità di estrazione della cima di un heap?

A.O(1)
B.O(n)
C.O(log n)
D.O(log n^2)

42. Quale dei seguenti è un esempio di implementazione di un heap in codice?

A.Utilizzo di una lista collegata per gestire l'heap.
B.Utilizzo di un array per gestire le priorità.
C.Utilizzo di un dizionario per gestire le priorità.
D.Utilizzo di una pila per gestire le priorità.

43. Qual è la struttura dati migliore per le operazioni di inserimento ed estrazione in una coda di priorità?

A.Heap binario.
B.Lista concatenata.
C.Array statico.
D.Albero binario di ricerca.

44. Quale operazione è fondamentale per mantenere le proprietà del heap dopo modifiche ai nodi?

A.Sistemazione
B.Ricerca
C.Heapify
D.Bilanciamento

45. Qual è la principale applicazione degli heap?

A.Gestione della memoria
B.Ordinamento (Heap Sort)
C.Comunicazione di rete
D.Compilazione di codice

46. Quale delle seguenti affermazioni è vera riguardo la complessità di inserimento in un heap?

A.È sempre O(1)\displaystyle O(1).
B.È sempre O(n)\displaystyle O(n).
C.È O(logn)\displaystyle O(log n) nella maggior parte dei casi.
D.È O(nlogn)\displaystyle O(n log n).

47. Come viene gestita una situazione in cui si aggiunge un elemento con alta priorità?

A.Spinge gli elementi esistenti verso il basso.
B.Si ignora l'elemento.
C.Non influisce su altri elementi.
D.Rimuove l'elemento di priorità più bassa.

48. Se hai un max heap con radice 50 e vuoi rimuovere un nodo che ha valore 50, quale valore prenderà il nodo radice dopo la rimozione?

A.Il valore più alto nei figli
B.Il valore più basso nei figli
C.Un nuovo valore a caso
D.Rimane 50

49. Che cos'è un heap completo?

A.Un albero binario riempito completamente
B.Un albero dove tutti i nodi sono bilanciati
C.Un albero binario in cui gli ultimi livelli possono non essere pieni
D.Un albero binario in cui ogni nodo ha esattamente due figli

50. Cosa succede se si tenta di estrarre un elemento da una coda di priorità vuota?

A.Si genera un'eccezione o un errore.
B.Si restituisce null.
C.Si restituisce l'elemento di priorità più bassa.
D.Non accade nulla.

51. Qual è la differenza principale tra un max heap e un min heap?

A.Il max heap ha nodi maggiori, il min heap ha nodi minori
B.Il min heap è sempre bilanciato
C.Il max heap non può avere nodi non pieni
D.Non ci sono differenze significative

52. Esempio di priorità numerica: 5, 3, 8. Qual è l'elemento estratto per primo?

A.8.
B.5.
C.3.
D.Nessuno, è vuota.

53. Vero o falso: Gli heap sono sempre bilanciati come gli alberi AVL.

A.Vero
B.Falso
C.Solo i max heap sono bilanciati
D.Solo i min heap sono bilanciati

54. Quale delle seguenti operazioni NON è tipica per una coda di priorità?

A.Controllo della priorità
B.Estrazione del massimo
C.Cancellazione di un elemento specifico
D.Inserimento

55. Quale affermazione è vera riguardo alla rappresentazione di un heap?

A.Un heap può essere rappresentato come un array in cui il nodo padre ha l'indice i e i figli hanno gli indici 2i + 1 e 2i + 2
B.Un heap deve sempre essere rappresentato come un albero binario non completo
C.Un heap non può essere rappresentato in modo efficace come un array
D.Un heap deve sempre contenere nodi pieni

56. Se un elemento con priorità elevata viene inserito in una coda di priorità, quale sarà l'effetto immediato?

A.Aumenta il tempo di estrazione per tutti gli elementi
B.Rimuove l'elemento con priorità più bassa
C.Sposta gli elementi esistenti in modo tale da mantenere la priorità
D.Non ha alcun effetto sugli altri elementi

Set correlati

Crea il tuo set di studio

Carica un PDF, incolla le tue note o descrivi un argomento – l'IA genera schede, quiz e altro in pochi secondi.