Conta le variabili distinte: la tabella di verità ha 2ⁿ righe, e la prima ha tutti i valori a 1.
Assegna a ogni sottoformula una colonna propria e compila le colonne dall’interno verso l’esterno.
Applica la regola di ogni connettivo: → vale 0 solo per 1 → 0, ↔ vale 1 quando i due lati coincidono.
Per le equivalenze, confronta riga per riga le colonne finali; per un argomento, guarda solo le righe in cui ogni premessa vale 1.
Per negare un enunciato quantificato, sposta ¬ verso l’interno, scambia ∀ e ∃ e nega la formula interna.
Logica digitale: porte, mappe K e flip-flop
Porte di base
A·B, A + B, A′, (A·B)′, (A + B)′, A ⊕ B
Regole booleane
X + X′ = 1, X·X′ = 0, X + XY = X, XY + XY′ = X
De Morgan
(X·Y)′ = X′ + Y′, (X + Y)′ = X′·Y′
Ordine della mappa di Karnaugh
00, 01, 11, 10 (Gray code)
Gruppo di 2ᵏ celle
perde k variabili
Multiplexer 4 a 1
F = A′B′I0 + A′BI1 + AB′I2 + ABI3
Flip-flop
D: Q⁺ = D, T: Q⁺ = T ⊕ Q, JK: Q⁺ = JQ′ + K′Q
Contatori
n bit: 2ⁿ stati; mod N: n minimo con 2ⁿ ≥ N; fout = fclk/N
Contatore asincrono (ripple)
fmax = 1/(n·tpd)
Contatori ad anello e Johnson
n e 2n stati
Metodo
Per un circuito, procedi dagli ingressi all’uscita una porta alla volta e scrivi il valore su ogni filo, oppure scrivi la sua espressione e compila la tabella di verità.
Per la semplificazione, riporta gli 1 (e le condizioni di indifferenza come X) in una mappa di Karnaugh con righe e colonne in codice Gray: 00, 01, 11, 10.
Copri gli 1 con il minor numero possibile di gruppi, i più grandi possibile, di 1, 2, 4, 8 o 16 celle, richiudendoli sui bordi; ogni gruppo è un termine prodotto formato dalle variabili che restano costanti. Raggruppa gli 0 per la forma POS.
Per flip-flop e contatori, leggi gli ingressi a ogni fronte attivo del clock, scrivi lo stato dopo ogni fronte e ricorda che un contatore a n bit ricomincia da capo dopo 2ⁿ stati.
Teoria dei numeri e aritmetica modulare
Divisione con resto
a = q·n + r, 0 ≤ r < n
Euclide
gcd(a, b) = gcd(b, a mod b)
Minimo comune multiplo
lcm(a, b) = a·b/gcd(a, b)
Inversa
a·a⁻¹ ≡ 1 (mod n), gcd(a, n) = 1
Congruenza lineare
a·x ≡ b → x ≡ a⁻¹·b (mod n)
Funzione φ di Eulero
φ(n) = n·∏(1 − 1/p), φ(pᵏ) = pᵏ − pᵏ⁻¹
Fermat
aᵖ⁻¹ ≡ 1 (mod p)
RSA
n = pq, φ = (p − 1)(q − 1), d = e⁻¹ mod φ, c = mᵉ mod n, m = cᵈ mod n
Metodo
Riduci prima ogni numero modulo n; i resti sono compresi tra 0 e n − 1.
Per un MCD, dividi ripetutamente con l’algoritmo di Euclide; l’ultimo resto diverso da zero è il MCD.
Per un inverso, esegui l’algoritmo esteso e tieni il coefficiente di a; aggiungi n se è negativo.
Risolvi a·x ≡ b moltiplicando per a⁻¹; combina due congruenze scrivendo x = r₁ + m₁k.
Per le potenze, scrivi l’esponente in binario ed eleva al quadrato ripetutamente; in RSA, d = e⁻¹ mod φ(n) con φ(n) = (p − 1)(q − 1).
Teoria dei grafi
Lemma delle strette di mano
Σ deg(v) = 2|E|
Grafi completi
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
Grafo regolare
|E| = n·k/2
Albero e foresta
|E| = n − 1, |E| = n − c
Foglie di un albero
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
Eulero
circuito: tutti i gradi pari; cammino: esattamente 2 gradi dispari
Cicli hamiltoniani in Kn
(n − 1)!/2
Aggiornamento di Dijkstra
d(v) = min(d(v), d(u) + w(u, v))
Cammini di lunghezza L
(Mᴸ)ij
Metodo
Scrivi il grado di ogni vertice; la somma dei gradi è il doppio del numero di lati.
Nelle domande su Eulero, verifica che il grafo sia connesso e conta i vertici di grado dispari.
Per gli alberi, usa n − 1 lati e il lemma delle strette di mano.
Per Dijkstra, tieni una tabella delle distanze provvisorie e a ogni passo fissa il vertice non ancora fissato con la distanza minima.
Per un albero di copertura minimo, ordina i lati per peso e salta ogni lato che chiude un ciclo (Kruskal), oppure fai crescere un solo albero a partire da un vertice iniziale (Prim).
Sottoreti IPv4
Host per sottorete
2(32 − prefix) − 2 (/31: 2, /32: 1)
Dimensione del blocco
256 − (mask octet)
Indirizzo di rete
IP AND maschera
Indirizzo di broadcast
IP OR (NOT maschera): tutti i bit di host a 1
Sottoreti da n bit presi in prestito
2n
2Esercizi
1.Sistemi di numerazioneMedia
Imposta i bit in modo che memorizzino −97 in complemento a due a 8 bit. Letto come numero senza segno, qual è il valore U dello schema?
N = −978 bit
U =
2.Sistemi di numerazioneDifficile
Imposta i bit sul risultato a 8 bit di 1101 0111 >> 3. Qual è il valore R del risultato in decimale?
1101 0111>> 3
R =
3.Logica proposizionale e dimostrazioniMedia
Quale formula è logicamente equivalente a ¬(b ∨ c)? Clicca su di essa.
¬(b ∨ c)
1¬b ∧ ¬c
2b ∨ ¬c
3¬b ∧ c
4¬b ∨ ¬c
4.Logica proposizionale e dimostrazioniDifficile
Quale enunciato è equivalente a ¬∃x (F(x) ∧ G(x)), con la negazione spostata fino in fondo all’interno? Clicca su di esso.
¬∃x (F(x) ∧ G(x))
1∀x (F(x) → ¬G(x))
2∃x (F(x) → ¬G(x))
3∀x (F(x) ∧ ¬G(x))
4∃x (¬F(x) ∧ ¬G(x))
5.Logica digitale: porte, mappe K e flip-flopMedia
In questa mappa di Karnaugh esattamente un 1 non ha 1 vicini, quindi resta un gruppo di una cella (un mintermine completo di quattro letterali) nella forma SOP minima. Contano anche i vicini attraverso i bordi della mappa. Clicca su quella cella.
F = Σm(2, 4, 8, 12)
1AB = 00, CD = 00
2AB = 00, CD = 01
3AB = 00, CD = 11
4AB = 00, CD = 10
5AB = 01, CD = 00
6AB = 01, CD = 01
7AB = 01, CD = 11
8AB = 01, CD = 10
9AB = 11, CD = 00
10AB = 11, CD = 01
11AB = 11, CD = 11
12AB = 11, CD = 10
13AB = 10, CD = 00
14AB = 10, CD = 01
15AB = 10, CD = 11
16AB = 10, CD = 10
6.Logica digitale: porte, mappe K e flip-flopDifficile
Per F(A, B, C, D) = Σm(3, 4, 6, 12, 13) + d(9, 10, 14), dove d indica le condizioni di indifferenza, trova il numero N di implicanti primi essenziali.
Trova la funzione φ di Eulero φ(351), il numero di interi da 1 a 351 coprimi con 351.
n = 351 = 33·13
φ(351) =
8.Teoria dei numeri e aritmetica modulareDifficile
Risolvi 16x ≡ 8 (mod 24). Dai la più piccola soluzione positiva x.
16x ≡ 8 (mod 24)
x =
9.Algoritmi e complessitàMedia
Un algoritmo greedy (goloso):
AFornisce sempre la soluzione ottima
BUsa solo la ricorsione
CProva ogni soluzione possibile
DCompie la scelta localmente migliore a ogni passo
10.Algoritmi e complessitàDifficile
Qual è la complessità temporale della costruzione di un heap binario da n elementi non ordinati con il metodo bottom-up?
AO(n log n)
BO(n²)
CO(log n)
DO(n)
11.Strutture datiMedia
Perché un heap binario si può memorizzare in un array senza puntatori?
AÈ un albero binario completo, quindi le posizioni seguono semplici formule sugli indici
BTutte le chiavi di un heap sono uguali
CGli heap non contengono mai più di 100 elementi
DGli array mantengono automaticamente le chiavi in ordine, quindi non servono puntatori
12.Strutture datiDifficile
Perché una tabella hash funzioni correttamente, quale regola devono rispettare hash e uguaglianza?
AValori hash uguali implicano chiavi uguali
BI valori hash devono essere numeri primi
CChiavi uguali devono avere valori hash uguali
DChiavi diverse devono avere valori hash diversi
13.Teoria dei grafiMedia
Un grafo connesso ha 11 vertici e 16 lati. Quanti lati k vanno tolti per ottenere un albero di copertura?
|V| = 11|E| = 16
k =
14.Teoria dei grafiDifficile
L’algoritmo di Kruskal costruisce un albero di copertura minimo. Clicca il lato che aggiunge come lato numero 4; i lati saltati non contano.
k = 4
1lato AB
2lato AC
3lato BC
4lato BD
5lato CE
6lato DF
7lato EF
8lato GB
9lato GD
10lato GE
15.Basi di dati e SQLMedia
Una colonna contiene i valori 10, 20 e NULL. Che cosa restituisce AVG(col)?
A15
B10
C30
DNULL
16.Basi di dati e SQLDifficile
Con il controllo della concorrenza multiversione (MVCC), come possono i lettori evitare di bloccare gli scrittori?
AI lettori aspettano sempre che tutti gli scrittori abbiano confermato
BI lettori vedono uno snapshot coerente delle versioni confermate delle righe, mentre gli scrittori creano nuove versioni
CI lettori leggono direttamente i dati non confermati
DGli scrittori non sono ammessi finché c'è un lettore attivo
17.Reti di calcolatoriMedia
Che cosa caratterizza un attacco distributed denial-of-service (DDoS)?
AUn virus cancella i file su un singolo PC
BUn attaccante legge il traffico Wi-Fi non cifrato da un'auto vicina
CUn attaccante indovina la password di un utente
DMolte macchine compromesse inondano di traffico un bersaglio
18.Reti di calcolatoriDifficile
Il problema del count-to-infinity si verifica in quale tipo di protocollo di routing, e che cosa aiuta a contrastarlo?
ARouting statico; aggiunta di rotte predefinite
BPath-vector; AS path più lunghi
CLink-state; flooding degli aggiornamenti dei collegamenti
DDistance-vector; split horizon e poison reverse
19.Sottoreti IPv4Media
Una sottorete usa la maschera 255.255.254.0. Quanti indirizzi host utilizzabili H ha?
255.255.254.0
H =
20.Sottoreti IPv4Difficile
La rete 192.168.170.0/24 viene suddivisa con VLSM per queste LAN: A: 16 host, B: 12 host, C: 56 host, D: 37 host. Le sottoreti vengono assegnate da .0 in su, partendo dalla LAN con più host, ciascuna con la sottorete più piccola sufficiente. Qual è il quarto ottetto x dell’indirizzo di rete della LAN A?
A: 16B: 12C: 56D: 37
x =
3Soluzioni
1.Sistemi di numerazione
Risposta: U = 159
Impostare i bit: ogni bit vale una potenza di due (128, 64, …, 1). Una cifra esadecimale è esattamente quattro bit, e nel complemento a due a 8 bit il bit più a sinistra vale −128. Le operazioni bit a bit lavorano su ogni posizione di bit separatamente.
Inverti e aggiungi uno
97 = 0110 0001
invertito: 1001 1110
+1 → 1001 1111
Leggilo senza segno
1001 1111₂ = 256 − 97 = 159
Risposta
U = 159
2.Sistemi di numerazione
Risposta: R = 26
Impostare i bit: ogni bit vale una potenza di due (128, 64, …, 1). Una cifra esadecimale è esattamente quattro bit, e nel complemento a due a 8 bit il bit più a sinistra vale −128. Le operazioni bit a bit lavorano su ogni posizione di bit separatamente.
Bit per bit
Scorrere a destra di 3 sposta ogni bit di 3 posizioni verso destra; i bit che escono dall’estremità destra sono persi ed entrano zeri a sinistra.
1101 0111 >> 3
= 0001 1010
Valore del risultato
0001 1010₂ = 26
Risposta
R = 26
3.Logica proposizionale e dimostrazioni
Risposta: ¬b ∧ ¬c
Equivalenza logica: due formule sono equivalenti (≡) quando hanno lo stesso valore in ogni riga della tabella di verità. Una tautologia vale 1 in ogni riga, una contraddizione vale 0 in ogni riga, e una contingenza non è né l’una né l’altra. Leggi utili: De Morgan, ¬(a ∧ b) ≡ ¬a ∨ ¬b e ¬(a ∨ b) ≡ ¬a ∧ ¬b; a → b ≡ ¬a ∨ b ≡ ¬b → ¬a (contronominale); ¬(a → b) ≡ a ∧ ¬b; e le leggi distributive, a ∨ (b ∧ c) ≡ (a ∨ b) ∧ (a ∨ c).
La legge
De Morgan: ¬(a ∨ b) ≡ ¬a ∧ ¬b. L’∨ diventa ∧ e le due parti vengono negate.
¬(b ∨ c) ≡ ¬b ∧ ¬c
Verifica con la tabella di verità
b = 1, c = 1: 0 | 0 1 0 0
b = 1, c = 0: 0 | 0 1 0 1
b = 0, c = 1: 0 | 0 0 1 1
b = 0, c = 0: 1 | 1 1 0 1
Risposta
¬b ∧ ¬c
Le colonne dopo la barra sono le opzioni nell’ordine mostrato.
4.Logica proposizionale e dimostrazioni
Risposta: ∀x (F(x) → ¬G(x))
Quantificatori e argomenti: ¬∀x P(x) ≡ ∃x ¬P(x) e ¬∃x P(x) ≡ ∀x ¬P(x). Sposta una negazione verso l’interno, scambia ogni quantificatore che attraversa e nega la formula interna con le leggi proposizionali, come ¬(a → b) ≡ a ∧ ¬b. Un argomento è valido quando la conclusione vale 1 in ogni riga in cui tutte le premesse valgono 1. Una sola riga con premesse vere e conclusione falsa è un controesempio e mostra che l’argomento non è valido.
Sposta la negazione verso l’interno
¬∃x (F(x) ∧ G(x)) ≡ ∀x (F(x) → ¬G(x))
Risposta
∀x (F(x) → ¬G(x))
Le altre opzioni lasciano invariato un quantificatore, cambiano l’ordine dei quantificatori oppure negano in modo errato la formula interna.
5.Logica digitale: porte, mappe K e flip-flop
Risposta: AB = 00, CD = 10
Mappe di Karnaugh: le celle sono ordinate in codice Gray (00, 01, 11, 10), quindi le celle vicine, comprese quelle attraverso i bordi, differiscono per esattamente una variabile. Raggruppa gli 1 in rettangoli di 1, 2, 4, 8 o 16 celle, i più grandi e il meno numerosi possibile, finché ogni 1 non è coperto. Ogni gruppo è un termine prodotto: le variabili che restano costanti al suo interno. Un gruppo di 2ᵏ celle perde k variabili. Le condizioni di indifferenza (X) possono servire a ingrandire i gruppi ma non devono mai essere coperte. Raggruppando invece gli 0 si ottiene la forma POS minima.
Vicini di ogni 1
Un 1 con un 1 vicino può far parte di un gruppo di due o più.
m2: m3, m0, m6, m10 → 0
L’1 isolato
m2 = A′B′CD′ → AB = 00, CD = 10
Risposta
AB = 00, CD = 10
6.Logica digitale: porte, mappe K e flip-flop
Risposta: N = 2
Mappe di Karnaugh: le celle sono ordinate in codice Gray (00, 01, 11, 10), quindi le celle vicine, comprese quelle attraverso i bordi, differiscono per esattamente una variabile. Raggruppa gli 1 in rettangoli di 1, 2, 4, 8 o 16 celle, i più grandi e il meno numerosi possibile, finché ogni 1 non è coperto. Ogni gruppo è un termine prodotto: le variabili che restano costanti al suo interno. Un gruppo di 2ᵏ celle perde k variabili. Le condizioni di indifferenza (X) possono servire a ingrandire i gruppi ma non devono mai essere coperte. Raggruppando invece gli 0 si ottiene la forma POS minima.
Implicanti primi
I gruppi più grandi che si possono formare con 1 e X.
BD′, AC′D, ABC′, A′B′CD
Implicanti primi essenziali
BD′, A′B′CD
N = 2
Risposta
N = 2
7.Teoria dei numeri e aritmetica modulare
Risposta: φ(351) = 216
Inversi e congruenze: a ha un inverso modulo n esattamente quando MCD(a, n) = 1. L’algoritmo di Euclide esteso scrive 1 = s·n + t·a, e allora a⁻¹ ≡ t (mod n). Una congruenza a·x ≡ b (mod n) con MCD(a, n) = 1 ha la soluzione x ≡ a⁻¹·b. Due congruenze x ≡ r₁ (mod m₁) e x ≡ r₂ (mod m₂) con moduli coprimi hanno una soluzione modulo m₁·m₂ (teorema cinese del resto). La φ di Eulero φ(n) conta i numeri da 1 a n coprimi con n: φ(n) = n·∏(1 − 1/p).
Fattori primi
351 = 33·13
Funzione φ
φ(351) = φ(27)·φ(13) = 18·12 = 216
Risposta
φ(351) = 216
8.Teoria dei numeri e aritmetica modulare
Risposta: x = 2
Inversi e congruenze: a ha un inverso modulo n esattamente quando MCD(a, n) = 1. L’algoritmo di Euclide esteso scrive 1 = s·n + t·a, e allora a⁻¹ ≡ t (mod n). Una congruenza a·x ≡ b (mod n) con MCD(a, n) = 1 ha la soluzione x ≡ a⁻¹·b. Due congruenze x ≡ r₁ (mod m₁) e x ≡ r₂ (mod m₂) con moduli coprimi hanno una soluzione modulo m₁·m₂ (teorema cinese del resto). La φ di Eulero φ(n) conta i numeri da 1 a n coprimi con n: φ(n) = n·∏(1 − 1/p).
Dividi per il MCD
gcd(16, 24) = 8
2x ≡ 1 (mod 3)
Risolvi la congruenza ridotta
2−1 ≡ 2 (mod 3) → x ≡ 2 (mod 3)
Soluzioni modulo 24
x ∈ {2, 5, 8, 11, 14, 17, 20, 23}
x = 2
Risposta
x = 2
9.Algoritmi e complessità
Risposta: D · Compie la scelta localmente migliore a ogni passo
Perché è questa la risposta
Gli algoritmi greedy sono veloci e ottimi per alcuni problemi (ad es. Dijkstra, codifica di Huffman) ma non in generale (ad es. il problema del resto con alcuni sistemi di monete).
Risposta
D · Compie la scelta localmente migliore a ogni passo
10.Algoritmi e complessità
Risposta: D · O(n)
Perché è questa la risposta
Sommando i costi di discesa (sift-down) su tutti i livelli si ottiene una serie convergente, quindi heapify viene eseguito in tempo lineare.
Risposta
D · O(n)
11.Strutture dati
Risposta: A · È un albero binario completo, quindi le posizioni seguono semplici formule sugli indici
Perché è questa la risposta
La completezza significa che non ci sono buchi, quindi i figli dell'indice i si trovano sempre a 2i + 1 e 2i + 2.
Risposta
A · È un albero binario completo, quindi le posizioni seguono semplici formule sugli indici
12.Strutture dati
Risposta: C · Chiavi uguali devono avere valori hash uguali
Perché è questa la risposta
Se due chiavi uguali avessero hash diversi verrebbero memorizzate in bucket diversi e le ricerche fallirebbero; chiavi diverse possono invece condividere un hash.
Risposta
C · Chiavi uguali devono avere valori hash uguali
13.Teoria dei grafi
Risposta: k = 6
Eulero, Hamilton e alberi: un grafo connesso ha un circuito euleriano (ogni lato una volta, di nuovo al punto di partenza) quando ogni vertice ha grado pari, e un cammino euleriano che non è un circuito quando esattamente due vertici hanno grado dispari; il cammino va allora da un vertice dispari all’altro. Un ciclo hamiltoniano visita ogni vertice una volta; Kn ne ha (n − 1)!/2. Un albero con n vertici ha n − 1 lati, e un grafo connesso con m lati mantiene un albero di copertura dopo aver tolto m − n + 1 lati.
Lati di un albero di copertura
11 − 1 = 10
Lati da togliere
k = 16 − 10 = 6
Risposta
k = 6
14.Teoria dei grafi
Risposta: lato AB
Cammini minimi e alberi di copertura: l’algoritmo di Dijkstra fissa un vertice per passo: il vertice non fissato con la distanza provvisoria minima. La sua distanza è allora definitiva, e ogni vertice adiacente v riceve d(v) = min(d(v), d(u) + w(u, v)). L’algoritmo di Kruskal costruisce un albero di copertura minimo prendendo i lati dal più leggero al più pesante e saltando ogni lato che chiuderebbe un ciclo; l’algoritmo di Prim fa crescere un solo albero da un vertice iniziale aggiungendo sempre il lato più leggero che ne esce. Un albero di copertura di n vertici ha n − 1 lati.
Algoritmo di Kruskal
1. EF (3)
2. GB (4)
3. BC (5)
4. AB (7)
5. GE (8)
6. DF (12)
lato numero 4
AB
Risposta
lato AB
15.Basi di dati e SQL
Risposta: A · 15
Perché è questa la risposta
AVG ignora NULL, quindi calcola la media di 10 e 20 ottenendo 15, non 30 / 3 = 10.
Risposta
A · 15
16.Basi di dati e SQL
Risposta: B · I lettori vedono uno snapshot coerente delle versioni confermate delle righe, mentre gli scrittori creano nuove versioni
Perché è questa la risposta
L'MVCC conserva le vecchie versioni delle righe, così un lettore può vedere i dati com'erano al momento del suo snapshot, mentre uno scrittore crea una nuova versione invece di sovrascrivere sul posto.
Risposta
B · I lettori vedono uno snapshot coerente delle versioni confermate delle righe, mentre gli scrittori creano nuove versioni
17.Reti di calcolatori
Risposta: D · Molte macchine compromesse inondano di traffico un bersaglio
Perché è questa la risposta
In un attacco DDoS molte sorgenti sovraccaricano un server o un collegamento, così gli utenti legittimi non possono essere serviti. Le numerose sorgenti rendono difficile un semplice blocco.
Risposta
D · Molte macchine compromesse inondano di traffico un bersaglio
18.Reti di calcolatori
Risposta: D · Distance-vector; split horizon e poison reverse
Perché è questa la risposta
Dopo un guasto, i router distance-vector possono continuare ad annunciarsi a vicenda rotte obsolete, aumentando lentamente la metrica. Split horizon, poison reverse e una metrica massima limitano il problema.
Risposta
D · Distance-vector; split horizon e poison reverse
19.Sottoreti IPv4
Risposta: H = 510
IPv4 subnetting: an address has 32 bits. The prefix /p says how many leading bits identify the network; the remaining 32 − p bits number the hosts. A subnet has 2³²⁻ᵖ addresses, but the first (network address) and last (broadcast address) cannot be given to hosts, so 2³²⁻ᵖ − 2 hosts fit. Exceptions: a /31 (point-to-point link, RFC 3021) uses both of its 2 addresses for hosts, and a /32 is one single address (a single host or a loopback).
Lunghezza del prefisso
255.255.254.0 = /23
Host utilizzabili
29 − 2 = 510
Risposta
H = 510
20.Sottoreti IPv4
Risposta: x = 128
VLSM: ogni LAN riceve la sottorete più piccola con 2ʰ − 2 ≥ il suo numero di host, cioè prefisso 32 − h. Assegnando prima le sottoreti più grandi, ogni blocco resta allineato su un multiplo della propria dimensione, quindi gli indirizzi di rete si ottengono sommando le dimensioni dei blocchi.