Esercizio - domande di prima parte su problemi computazionali, ricorrenze e conteggi (simulazioni d'esame)
In questa pagina 4
Testo (prima parte delle simulazioni d'esame 2023-24 e 2025-26 di Algoritmi per l'Ingegneria, Ing. Informatica UniPD). La prima parte dell'esame è formata da dieci domande a risposta unica o a scelta multipla: non va riportato il procedimento, solo la risposta. La seconda parte (esercizi di progetto e analisi, come le altre pagine di esercizi svolti) non viene corretta se la valutazione della prima è significativamente insufficiente. Le due simulazioni contengono le stesse dieci domande; qui ci sono le tre sui problemi computazionali, sulle ricorrenze e sui conteggi di istruzioni (le altre riguardano matrici, DFT, programmazione dinamica e greedy). Il testo di ciascuna è riportato per intero.
Domanda 1. Sia il problema dell'estrazione delle radici quadrate di un numero complesso non nullo. Si definiscano gli insiemi ed . Scegli un'alternativa:
- ,
- ,
- ,
- ,
Domanda 2. Utilizzando le proprietà strutturali dell'albero associato alla seguente ricorrenza si determini il valore di .
Domanda 3. Per , sia il numero esatto di esecuzioni del comando a = a + 2 nel seguente frammento di codice:
for i = 2 to n-1:
for j = n-i+2 to n:
a = a + 2Si calcoli .
Teoria usata: Problemi computazionali - istanze, soluzioni, correttezza e complessitàUn problema computazionale è una relazione totale (non necessariamente univoca) tra istanze e soluzioni; un algoritmo è una funzione dalle istanze alle soluzioni e risolve il problema se la sua uscita è sempre in relazione con l'ingresso. Correttezza = coerenza con la specifica; complessità = costo in funzione della taglia, per default al caso peggiore, con le istruzioni a costo unitario scelte in modo significativo.Problemi computazionali - istanze, soluzioni, correttezza e complessità →, Divide and conquer - proprietà di sottostruttura e albero delle chiamateUn algoritmo divide and conquer nasce da una proprietà di sottostruttura (funzioni Divide e Conquer, base n0) con sottoistanze di taglia strettamente minore; l'albero delle chiamate ne descrive l'esecuzione, e il D&C non ha memoria (ripete le sottoistanze uguali). Esempio completo: MAX di un array, con correttezza per induzione, ricorrenza e conteggio esatto n-1 tramite il teorema sugli alberi binari pieni.Divide and conquer - proprietà di sottostruttura e albero delle chiamate →, Albero della ricorrenza e formula generale per le ricorrenzeL'albero della ricorrenza ha la forma dell'albero delle chiamate dell'istanza peggiore e T(n) è la somma dei lavori dei nodi. Per la famiglia T(n) = s(n)T(f(n)) + w(n) con base T0 per n <= n0, contando i nodi per livello con le iterate di f e il livello f*(n,n0) si ottiene la formula chiusa T(n) = somma_l [prodotto_j s(f^(j)(n))] w(f^(l)(n)) + [prodotto s] T0, verificata per induzione e applicata a esempi (merge sort, Hanoi, ricorrenze con radice).Albero della ricorrenza e formula generale per le ricorrenze →, SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →.
Domanda 1: gli insiemi ed
- Istanza: un numero complesso non nullo : . Questo esclude la terza alternativa (che ha coppie in ingresso) e la prima ( non descrive i complessi non nulli).
- Soluzione: ogni ha due radici quadrate distinte, e , entrambe non nulle. Se la soluzione è la coppia delle due radici, . La seconda alternativa () conterrebbe una sola radice e descriverebbe il problema "trova una radice".
Risposta: quarta alternativa, , .
Nota. Vale anche con . La relazione non è univoca: per ogni ci sono due coppie ordinate, e , entrambe soluzioni. Variante: per le radici cubiche sarebbe (tre radici distinte e non nulle).
Domanda 2:
Con l'albero. Si osserva che la ricorrenza ha lo stesso albero di MAX (Divide and conquer - proprietà di sottostruttura e albero delle chiamateUn algoritmo divide and conquer nasce da una proprietà di sottostruttura (funzioni Divide e Conquer, base n0) con sottoistanze di taglia strettamente minore; l'albero delle chiamate ne descrive l'esecuzione, e il D&C non ha memoria (ripete le sottoistanze uguali). Esempio completo: MAX di un array, con correttezza per induzione, ricorrenza e conteggio esatto n-1 tramite il teorema sugli alberi binari pieni.Divide and conquer - proprietà di sottostruttura e albero delle chiamate →): ogni istanza di taglia si divide in due sottoistanze di taglie e , e le foglie sono (una per ogni elemento: i due sottoinsiemi sono disgiunti e si arriva a taglia ). Il lavoro è nullo ai nodi interni (nella ricorrenza non c'è nessun termine oltre alle due ) e a ogni foglia (). Quindi
n lavoro 0
/ \
floor(n/2) ceil(n/2) lavoro 0
... ...
(1)(1)(1) ... (1) n foglie, lavoro 12 ciascunaPer induzione (conferma di per ogni ): base ; passo, per : , essendo .
Alternativa a mano, senza la formula: , e , quindi .
Risposta: .
Domanda 3: conteggio con due cicli
Il numero di esecuzioni del corpo è il numero di coppie del ciclo: Ciclo interno. Per fissato, va da a : sono valori (la somma di su un intervallo di indici vale ultimo estremo primo estremo ; è perché ). Ciclo esterno. con il cambio di indice (per , va da a ) e la somma di Gauss con (SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →). Per :
Risposta: . (La formula vale per : per il ciclo esterno è vuoto e . Verificata con un conteggio diretto per .)
def T(n):
return sum(1 for i in range(2, n) for j in range(n - i + 2, n + 1))
assert T(18) == 136 and all(T(n) == (n - 2) * (n - 1) // 2 for n in range(2, 60))Varianti per allenarsi
Tutte controllate con un programma.
- , stessa ricorrenza della domanda 2: , quindi .
- , : stesso albero di MAX con lavoro per ognuno degli nodi interni, , quindi .
for i = 1 to n: for j = i to n(corpo eseguito volte per ogni ): , quindi per .for i = 1 to n: for j = 1 to i: for k = 1 to j: , quindi per .
Versione ripasso
Testo. Prima parte (dieci domande, solo la risposta). (1) Radici quadrate di un complesso non nullo: definire ed (4 alternative). (2) , : calcolare . (3) Numero di esecuzioni di a = a + 2 in for i = 2 to n-1: for j = n-i+2 to n: calcolare .
Teoria: Problemi computazionali - istanze, soluzioni, correttezza e complessitàUn problema computazionale è una relazione totale (non necessariamente univoca) tra istanze e soluzioni; un algoritmo è una funzione dalle istanze alle soluzioni e risolve il problema se la sua uscita è sempre in relazione con l'ingresso. Correttezza = coerenza con la specifica; complessità = costo in funzione della taglia, per default al caso peggiore, con le istruzioni a costo unitario scelte in modo significativo.Problemi computazionali - istanze, soluzioni, correttezza e complessità →, Divide and conquer - proprietà di sottostruttura e albero delle chiamateUn algoritmo divide and conquer nasce da una proprietà di sottostruttura (funzioni Divide e Conquer, base n0) con sottoistanze di taglia strettamente minore; l'albero delle chiamate ne descrive l'esecuzione, e il D&C non ha memoria (ripete le sottoistanze uguali). Esempio completo: MAX di un array, con correttezza per induzione, ricorrenza e conteggio esatto n-1 tramite il teorema sugli alberi binari pieni.Divide and conquer - proprietà di sottostruttura e albero delle chiamate →, SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →.
- D1: (istanza: un complesso non nullo); (le due radici , non nulle). Risposta: la quarta. , ; non univoca (coppia ordinata: e ).
- D2: stesso albero di MAX: foglie, lavoro ai nodi interni e a ogni foglia, (induzione: ), . A mano: , .
- D3: interno: iterazioni; esterno: ; .
- Varianti: ; lavoro per nodo interno ; ( per ); triplo ciclo annidato ( per ).
- Errori tipici: scegliere (una sola radice); contare o iterazioni nel ciclo interno (estremi inclusi: ); dimenticare che il lavoro è sulle foglie e non sui nodi interni; tenere come indice dopo il cambio .