Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Algoritmi e strutture dati PEGASO, Panieri di Algoritmi E Strutture Di Dati

Paniere e prove d'esame - Algoritmi e strutture dati D'urso PEGASO

Tipologia: Panieri

2021/2022

Caricato il 11/04/2023

CarmenG123
CarmenG123 🇮🇹

4.6

(30)

5 documenti

1 / 6

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Domande
Risposte
Cos'è un problema:
qualcosa che siamo chiamati a risolvere
Cos'è una istanza:
un particolare input ad un problema
Cos'è un algoritmo:
una sequenza di istruzioni che istruiscono sull'esecuzione di
un determinato compito
Chi è l'esecutore dell'algoritmo:
chi esegue l'algoritmo e conosce il linguaggio con il quale è
stato scritto
La seguente frase è "ambigua":
il numero è grande
La pragmatica indica:
lo studio del miglior modo per esprimere un concetto
Il determinismo indica:
stesso risultato indipendentemente dall'esecutore
Nella selezione:
esiste una condizione da valutare e due possibili gruppi di
istruzioni da eseguire
L'assegnazione:
modifica il valore di una variabile
Qualunque algoritmo può essere implementato usando le sole
seguenti strutture:
sequenza, ciclo e selezione
Nella tesi di Church-Turing:
tutti i linguaggi sufficientemente espressivi sono ugualmente
espressivi
La sequenza delle operazioni è rappresentata da:
frecce
Un comando di output:
valuta un'espressione e poi visualizza il risultato sullo schermo
Un comando di input:
legge un input ed immagazzina tale valore in una variabile
Nella selezione, in funzione del valore della condizione, si sceglie un
blocco oppure l'altro:
sempre
Nell'assegnazione:
si modifica il valore di una variabile
While {condizione} do {corpo} end while:
indica una iterazione
Fun(arg1, arg2 ):
indica una funzione
Il seguente pseudocodice (a, b) < - (b,a):
indica uno scambio del valore delle variabili
Il seguente pseudocodice arr[{espr}]:
indica un valore specifico all'interno dell'array
Nella ricerca sequenziale di un elemento in un array di n elementi:
la complessità è proporzionale ad n
Nella ricerca sequenziale di un elemento in un array di n elementi:
l'ordinamento non ha un impatto sulla complessità della
ricerca sequenziale
Nella ricerca binaria:
l'array deve essere ordinato
Nella ricerca binaria:
la complessità è logaritmica
Nella ricerca binaria:
l'algoritmo è ricorsivo
Nella ricerca binaria, la procedura ricorsiva:
lavora su sottoinsiemi dell'array
Nell'analisi di un algorimo è importante considerare correttezza,
completezza e:
complessità
Un algoritmo è corretto quando:
restituisce sempre una risposta corretta
Fornire la complessità dell'algoritmo corretto:
significa dare almeno un tetto alla complessità del problema
risolto dall'algoritmo
Se l'algoritmo trovato non è il migliore per risolvere quel problema:
non avremo risposto alla domanda "qual è la complessità del
mio problema"
Il dato di ingresso soddisfa una certa proprietà:
È un tipo di problema decisionale
Un problema di ottimizzazione:
cerca una soluzione a costo minimo
Stabilire se un grafo è connesso:
È un problema decisionale
Nella programmazione dinamica:
la soluzione viene costruita a partire da un insieme di sotto-
problemi potenzialmente ripetuti
Prova a fare qualcosa, se non funziona disfala e prova a farne
un'altra:
È tipico del Backtrack
L'approccio bottom-up è tipico di:
programmazione dinamica
La scelta migliore nell'immediata è tipica di:
tecnica greedy
Combina:
È una fase del divide et impera
La ricorsione:
È tipica del divide et impera
Nella torre di Hanoi con 4 dischi il numero di mosse necessarie è:
15
Una delle seguenti non è una operazione elementare:
iterazione
La complessità asintotica:
stima quanto aumenta il tempo di calcolo al crescere della
dimensione n dell'input
La notazione Theta rappresenta:
un limite stretto
La notazione asintotica O:
vale per ogni n maggiore o uguale ad un certo valore n con 0
Una funzione polinomiale è:
O(n^2)
Una funzione polinomiale è:
Ω(n^2)
La notazione asintotica Omega:
vale per ogni n maggiore o uguale ad un certo valore n con 0
Nel logaritmo, O(n) ed Ω(n):
non coincidono
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Algoritmi e strutture dati PEGASO e più Panieri in PDF di Algoritmi E Strutture Di Dati solo su Docsity!

Domande Risposte Cos'è un problema: qualcosa che siamo chiamati a risolvere Cos'è una istanza: un particolare input ad un problema

Cos'è un algoritmo:

una sequenza di istruzioni che istruiscono sull'esecuzione di un determinato compito

Chi è l'esecutore dell'algoritmo:

chi esegue l'algoritmo e conosce il linguaggio con il quale è stato scritto La seguente frase è "ambigua": il numero è grande La pragmatica indica: lo studio del miglior modo per esprimere un concetto Il determinismo indica: stesso risultato indipendentemente dall'esecutore

Nella selezione:

esiste una condizione da valutare e due possibili gruppi di istruzioni da eseguire L'assegnazione: modifica il valore di una variabile Qualunque algoritmo può essere implementato usando le sole seguenti strutture: sequenza, ciclo e selezione

Nella tesi di Church-Turing:

tutti i linguaggi sufficientemente espressivi sono ugualmente espressivi La sequenza delle operazioni è rappresentata da: frecce Un comando di output: valuta un'espressione e poi visualizza il risultato sullo schermo Un comando di input: legge un input ed immagazzina tale valore in una variabile Nella selezione, in funzione del valore della condizione, si sceglie un blocco oppure l'altro: sempre Nell'assegnazione: si modifica il valore di una variabile While {condizione} do {corpo} end while: indica una iterazione

Fun(arg1, arg2 …): indica una funzione Il seguente pseudocodice (a, b) < - (b,a): indica uno scambio del valore delle variabili Il seguente pseudocodice arr[{espr}]: indica un valore specifico all'interno dell'array Nella ricerca sequenziale di un elemento in un array di n elementi: la complessità è proporzionale ad n

Nella ricerca sequenziale di un elemento in un array di n elementi:

l'ordinamento non ha un impatto sulla complessità della ricerca sequenziale Nella ricerca binaria: l'array deve essere ordinato Nella ricerca binaria: la complessità è logaritmica Nella ricerca binaria: l'algoritmo è ricorsivo Nella ricerca binaria, la procedura ricorsiva: lavora su sottoinsiemi dell'array Nell'analisi di un algorimo è importante considerare correttezza, completezza e: complessità Un algoritmo è corretto quando: restituisce sempre una risposta corretta

Fornire la complessità dell'algoritmo corretto:

significa dare almeno un tetto alla complessità del problema risolto dall'algoritmo

Se l'algoritmo trovato non è il migliore per risolvere quel problema:

non avremo risposto alla domanda "qual è la complessità del mio problema" Il dato di ingresso soddisfa una certa proprietà: È un tipo di problema decisionale Un problema di ottimizzazione: cerca una soluzione a costo minimo Stabilire se un grafo è connesso: È un problema decisionale

Nella programmazione dinamica:

la soluzione viene costruita a partire da un insieme di sotto- problemi potenzialmente ripetuti Prova a fare qualcosa, se non funziona disfala e prova a farne un'altra: È tipico del Backtrack L'approccio bottom-up è tipico di: programmazione dinamica La scelta migliore nell'immediata è tipica di: tecnica greedy Combina: È una fase del divide et impera La ricorsione: È tipica del divide et impera Nella torre di Hanoi con 4 dischi il numero di mosse necessarie è: 15 Una delle seguenti non è una operazione elementare: iterazione

La complessità asintotica:

stima quanto aumenta il tempo di calcolo al crescere della dimensione n dell'input La notazione Theta rappresenta: un limite stretto La notazione asintotica O: vale per ogni n maggiore o uguale ad un certo valore n con 0 Una funzione polinomiale è: O(n^2)

Una funzione polinomiale è: Ω(n^2) La notazione asintotica Omega: vale per ogni n maggiore o uguale ad un certo valore n con 0

Nel logaritmo, O(n) ed Ω(n): non coincidono

Se una funzione è sia O(g(n)) che Ω(g(n): allora è θ(g(n)) La notazione asintotica Theta ammette che esistano 2 costanti c1 e c2: per ogni n maggiore o uguale ad un certo valore n con 0 La notazione asintotica O: rappresenta un limite inferiore asintotico Il limite superiore di una espressione polinomiale è: di ordine n^k Il limite inferiore di una espressione polinomiale è: di ordine n^k Se il limite per n tendente all'infinito di f(n)/g(n) è 0: f(n) è O grande di g(n) Se il limite per n tendente all'infinito di f(n)/g(n) è infinito: f(n) è Omega grande di g(n) Se il limite per n tendente all'infinito di f(n)/g(n) è un numero finito: f(n) è Theta grande di g(n) La seguente non è una proprietà dei limiti asintotici: Sottrattiva La 'o' piccola implica la 'O' grande: sempre O(n·log n) è detta: complessità pseudolineare Quale tra le seguenti ha una complessità maggiore al crescere di n: esponenziale Nei diagrammi di flusso, il simbolo del rombo è usato per: selezione Nella selezione sono possibili: vero e falso Nell'iterazione sono possibili esclusivamente: mentre, fai, per Nella ripetizione "mentre" è solo possibile specificare: la condizione Nella ripetizione "per" è solo possibile specificare come "direzione": incremento e decremento In Flowgorithm la ripetizione è identificata da una forma: di un esagono Il seguente non è un numero sconnesso: 5757 Un numero è definito come sconnesso se per ogni sua cifra: la cifra adiacente a destra e a sinistra dista al massimo 1 Il seguente è un numero sconnesso: 34543 Il seguente è un numero sconnesso: 345434543 Il seguente è un numero sconnesso: 121 Il seguente è un numero sconnesso: 101 Replit è un: SaaS Gli ambienti di Replit sono chiamati: workspace Quale dei seguenti non è un token in Pseudocode: initialize Quale dei seguenti non è un token in Pseudocode: sum Quale dei seguenti non è un token in Pseudocode: customtype In Pseudocode una funzione: deve restituire un valore In Pseudocode un array: può ammettere integer In Pseudocode le iterazioni ammesse sono: for e while In Pseudocode il for necessità: il next In Pseudocode il while necessità: l'endwhile

Un caso medio è:

determinato dalla somma dei tempi d'esecuzione di tutte le istanze dei dati di ingresso, con ogni addendo moltiplicato per la probabilità di occorrenza della relativa istanza dei dati di ingresso

In una sequenza di istruzioni, la complessità è:

O grande del massimo delle funzioni relative a ciascuna sequenza Nel fattoriale non ricorsivo: la complessità è O(n)

In Fibonacci non ricorsivo per n ≥ 3: la complessità è O(n) In Fibonacci non ricorsivo per n ≤ 2: la complessità è O(1) Nel calcolo del massimo non ricorsivo: la complessità è O(n) Nel calcolo del massimo non ricorsivo, il caso peggiore ha complessità: la complessità è O(n) Nel calcolo del massimo non ricorsivo, il caso migliore ha complessità: la complessità è O(n) Nel calcolo del massimo non ricorsivo, avere il massimo in prima posizione: non comporta vantaggi alla complessità Nel calcolo del massimo non ricorsivo, avere il massimo in ultima posizione: non comporta vantaggi alla complessità Una equazione di ricorrenza esprime il tempo di esecuzione totale di un problema di dimensione n: in funzione del tempo di esecuzione per input più piccoli La ricorrenza che si ottiene nel divide et impera è nella forma: aT (n/b) + D(n) + C(n) Nel mergesort, T(n): È logaritmico Nel divide et impera, D(n) è usato per indicare: il tempo per dividere il problema in sotto-problemi Nel divide et impera, C(n) è usato per indicare: il tempo per combinare i sotto-problemi

Nel metodo di sostituzione:

ipotizziamo un limite e poi usiamo l'induzione matematica per dimostrare che la nostra ipotesi è corretta L'ipotesi che si ottiene tramite un albero di ricorsione: può essere usata nel metodo di sostituzione

Selection Sort nel caso medio: È come Bubble Sort Selection Sort non è stabile perché: altera gli elementi chiave

Selection Sort è in place perché:

non introduce strutture dati ausiliarie che dipendono dalla grandezza dell'array In Insertion Sort la complessità nel caso migliore è: lineare In Insertion Sort la complessità nel caso medio è: quadratica In Insertion Sort la complessità nel caso peggiore è: quadratica Insertion Sort è in generale: stabile Insertion Sort è in place: si Insertion Sort nel caso peggiore: È come Quick Sort Insertion Sort nel caso peggiore: È come Quick Sort Insertion Sort nel caso medio: È come Bubble Sort Insertion Sort è stabile perché: non altera gli elementi chiave

Insertion Sort è in place perché:

non introduce strutture dati ausiliarie che dipendono dalla grandezza dell'array In Bubble Sort la complessità nel caso migliore è: lineare In Bubble Sort la complessità nel caso medio è: quadratica In Bubble Sort la complessità nel caso peggiore è: quadratica Bubble Sort è in generale: stabile Bubble Sort è in place: si Bubble Sort nel caso peggiore: È come Quick Sort Bubble Sort nel caso peggiore: È come Quick Sort Bubble Sort nel caso medio: È come Selectio Sort Bubble Sort è stabile perché: non altera gli elementi chiave

Bubble Sort è in place perché:

non introduce strutture dati ausiliarie che dipendono dalla grandezza dell'array In Merge Sort la complessità nel caso migliore è: logaritmica In Merge Sort la complessità nel caso medio è: logaritmica In Merge Sort la complessità nel caso peggiore è: logaritmica Merge Sort è in generale: stabile Merge Sort è in place: no Merge Sort nel caso peggiore: È come Heap Sort Merge Sort nel caso peggiore: È come Heap Sort Merge Sort nel caso medio: È come Quick Sort Merge Sort è stabile perché: non altera gli elementi chiave

Merge Sort è in place perché:

introduce strutture dati ausiliarie che dipendono dalla grandezza dell'array In Quick Sort la complessità nel caso migliore è: logaritmica In Quick Sort la complessità nel caso medio è: logaritmica In Quick Sort la complessità nel caso peggiore è: quadratica Quick Sort è in generale: instabile Quick Sort è in place: si Quick Sort nel caso peggiore: È come Selection Sort Quick Sort nel caso peggiore: È come Bubble Sort Quick Sort nel caso medio: È come Merge Sort Quick Sort non è stabile perché: altera gli elementi chiave

Quick Sort è in place perché:

non introduce strutture dati ausiliarie che dipendono dalla grandezza dell'array

In un albero completo:

tutte le foglie hanno la stessa profondità e tutti i nodi interni hanno grado 2 In un albero quasi completo: tutti i livelli, tranne al più l'ultimo, sono completi Il grado di un albero indica: il numero di figli di uno specifico nodo In un albero heap, left(i) è pari a: 2i Nel max-heap: ogni elemento è minore o uguale al nodo padre Nell'heap sort: si può usare sia il max-heap che il min-heap Nella prima fase dell'heap sort, l'algoritmo permuta i valori contenuti negli elementi dell'array in modo tale che: la nuova disposizione delle chiavi costituisca uno heap In un albero heap, right(i) è pari a: 2i+ Nell'heap sort, le operazioni parent, left e right possono essere calcolate: mediante una sola operazione Nel min-heap: il più piccolo elemento è nella radice In Heap Sort la complessità nel caso migliore è: logaritmica

In Heap Sort la complessità nel caso medio è: logaritmica In Heap Sort la complessità nel caso peggiore è: logaritmica Heap Sort è in generale: instabile Heap Sort è in place: si Heap Sort nel caso peggiore: È come Merge Sort Heap Sort nel caso peggiore: È come Merge Sort Heap Sort nel caso medio: È come Merge Sort Heap Sort non è stabile perché: altera gli elementi chiave

Heap Sort è in place perché:

non introduce strutture dati ausiliarie che dipendono dalla grandezza dell'array

Una struttura dati:

fornisce una rappresentazione organizzata e logica dei dati all'interno di un insieme

Una struttura dinamica è una struttura che è pensata:

per aggiungere o togliere elementi durante l'esecuzione di un algoritmo Se non si possono cioè fare ipotesi sulla posizione fisica degli elementi in memoria si dice che la struttura è: sparsa Un array è una struttura: lineare Le tipiche operazioni su un insieme dinamico sono: query e modifica Una struttura dati concreta: È l'implementazione di una struttura astratta Una chiave consente: di identificare univocamente i dati in una struttura Nelle strutture dati dinamiche i puntatori: sono obsoleti In Python, tutte le variabili: sono puntatori impliciti In Python, quando si assegna un valore a una variabile: si sta creando un riferimento all'oggetto in memoria Rispetto alla tassonomia classica, una lista risulta: dinamica, sparsa, ordinata Nelle liste, il puntatore: È usato per l'implementazione Gli elementi di una lista: non sono necessariamente memorizzati in modo consecutivo Una lista è un multi-insieme, cioè: ci possono essere ripetizioni del medesimo elemento Dati una lista e un valore, stabilire se il valore è contenuto in un elemento della lista, riportando in caso affermativo l'indirizzo di tale elemento: È il problema della ricerca Una lista dinamica può essere rappresentata tramite: puntatori La ricerca di un elemento in una lista: È un problema di visita Malloc() in C ha come analoga in C++: new Free() in C ha come analoga in C++: delete Se non si libera la memoria allocata dinamicamente: si rischia un memory leak In una lista realizzata con raw pointers, ciascun elemento della lista è una struttura di due campi, di cui uno rappresenta il valore dell'elemento:

l'altro è di tipo puntatore e punta all'elemento successivo nella lista

In una lista implementata tramite puntatori, la memoria utilizzata:

viene gestita dinamicamente ed è esattamente proporzionale al numero degli elementi della lista In una lista di puntatori: In una lista di puntatori posso inserire un nuovo elemento: sia in testa che in coda In una lista di puntatori la visita può essere implementata: in maniera iterativa o ricorsiva

In una heap corruption:

riferimenti a memoria precedentemente rilasciata restano accessibili da parti del programma ancora in esecuzione

In uno smart pointer:

c'è l'aggiunta dell'informazione necessaria per capire quando la risorsa può essere rilasciata

Negli smart pointers:

È contenuta l'informazione per capire che all'uscita da uno scope, nessun altro scope potrà più accedere alla memoria puntata La ricerca di un elemento in una lista di puntatori ha complessità: lineare L'inserimento di un elemento in una lista di puntatori ha complessità: lineare La pila è un sistema: LIFO La funzione push in una pila: inserisce un elemento in testa La funzione pop in una pila: elimina l'elemento in testa La scelta della struttura dati per implementare una pila: ricade negli array o nei puntatori a seconda dello scenario Una pila: può essere usata per la valutazione di una espressione

L'implementazione di una pila tramite array prevede:

la conoscenza del numero massimo di elementi che la pila può contenere Non è possibile accedere direttamente agli elementi all'interno della pila senza rimuoverli: È un'affermazione vera Le operazioni di base su una pila hanno complessità: O(1)