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


informatica e pensiero computazionale, Appunti di Elementi di Informatica

Gli appunti vertono su: -codifica binaria -rappresentazione di numeri in bit -operazioni tra bit -cos'è un file e come si codifica -rappresentazione di testi e immagini -architettura del calcolatore -problemi e algoritmi -web (+pagerank, minimal spanning tree)

Tipologia: Appunti

2021/2022

In vendita dal 01/10/2023

tiwallo
tiwallo 🇮🇹

10 documenti

1 / 13

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA
L'informatica è più conosciuta per il suo aspetto tecnologico, fa parte della nostra quotidianità, ma
esiste un mondo culturale e scientifico dietro ad essa, che è il vero motore, che ne permette
l’applicazione.
Una domanda importante che dobbiamo porci è: “che cosa possono e non possono fare le
macchine?” e “che cosa possiamo fare noi con le macchine?”. Ci sono attività in cui l’uomo è
insostituibile.
Esiste l’ideazione di un'applicazione, ovvero cercare di risolvere problemi, immaginando le soluzioni,
ma anche universi, insieme di cose, di fatti, modi di comportarsi rispetto ai fatti.
Il modulo verte su:
- Struttura di un elaboratore: importante per capire come un flusso di elettroni possa
rappresentare e codificare un’attività complessa, che producono comportamenti intelligenti.
Un algoritmo è la logica di qualsiasi applicazione, trasforma un comportamento meccanico,
deterministico in qualcosa di significativo. L'algoritmo è un'invenzione, la soluzione di un problema e
produrlo è un’attività creativa.
Per fare questo c’è bisogno di metodi algoritmi, uno di questi è la ricorsione: le informazioni
vengono elaborate in modo uniforme, a partire da un tutto e suddividendole in parti più piccole, ma
omogenee.
- una delle applicazioni più conosciute è il web, che è un universo di servizi. Lo affrontiamo in
due aspetti: la programmazione del web e gli algoritmi per la ricerca nel web
- Motori di ricerca: da una parte si dà importanza alle parole, ai contesti, dall’altro organizzarli
secondo un criterio, un ranking delle risposte
- Rappresentazione ed elaborazione della conoscenza
LA CODIFICA BINARIA
La codifica binaria è alla base del funzionamento di tutti i computer. Tutte le informazioni relative ai
computer sono, infatti, create dalla combinazione dei numeri 1 e 0.
BIT --> È l'unità minima di misura dell'informazione (dall'inglese “binary digit”), definita come la
quantità minima di informazione che serve a distinguere due possibili eventi. È una cifra binaria.
Il BYTE è un’unità d’informazione composta da 8 bit ed è divenuto l'unità di misura
fondamentale della quantità di informazione e delle capacità di memoria.
n bit permettono di rappresentare una scelta tra 2n alternative;
per rappresentare una scelta tra N ≥ 1 alternative, sono necessari circa log2 N bit.
Leibniz era in contatto epistolare con i missionari gesuiti in Cina, in particolare il Padre Bouvet
che lo informò nel 1701 che il metodo di contare con i numeri in base 2 comunicatogli in precedenza
da Leibniz svelava il mistero delle figure di Fo-Hi, associate allo yin e yang della filosofia taoista
secondo il Libro dei Mutamenti, o I-Ching
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Anteprima parziale del testo

Scarica informatica e pensiero computazionale e più Appunti in PDF di Elementi di Informatica solo su Docsity!

INFORMATICA

L'informatica è più conosciuta per il suo aspetto tecnologico, fa parte della nostra quotidianità, ma esiste un mondo culturale e scientifico dietro ad essa, che è il vero motore, che ne permette l’applicazione. Una domanda importante che dobbiamo porci è: “che cosa possono e non possono fare le macchine?” e “che cosa possiamo fare noi con le macchine?”. Ci sono attività in cui l’uomo è insostituibile. Esiste l’ideazione di un'applicazione, ovvero cercare di risolvere problemi, immaginando le soluzioni, ma anche universi, insieme di cose, di fatti, modi di comportarsi rispetto ai fatti. Il modulo verte su:

- Struttura di un elaboratore: importante per capire come un flusso di elettroni possa rappresentare e codificare un’attività complessa, che producono comportamenti intelligenti. Un algoritmo è la logica di qualsiasi applicazione, trasforma un comportamento meccanico, deterministico in qualcosa di significativo. L'algoritmo è un'invenzione, la soluzione di un problema e produrlo è un’attività creativa. Per fare questo c’è bisogno di metodi algoritmi, uno di questi è la ricorsione: le informazioni vengono elaborate in modo uniforme, a partire da un tutto e suddividendole in parti più piccole, ma omogenee. _- una delle applicazioni più conosciute è il web, che è un universo di servizi. Lo affrontiamo in due aspetti: la programmazione del web e gli algoritmi per la ricerca nel web

  • Motori di ricerca: da una parte si dà importanza alle parole, ai contesti, dall’altro organizzarli secondo un criterio, un ranking delle risposte
  • Rappresentazione ed elaborazione della conoscenza_ LA CODIFICA BINARIA La codifica binaria è alla base del funzionamento di tutti i computer. Tutte le informazioni relative ai computer sono, infatti, create dalla combinazione dei numeri 1 e 0. BIT --> È l'unità minima di misura dell'informazione (dall'inglese “binary digit”), definita come la quantità minima di informazione che serve a distinguere due possibili eventi. È una cifra binaria. Il BYTE è un’unità d’informazione composta da 8 bit ed è divenuto l'unità di misura fondamentale della quantità di informazione e delle capacità di memoria. ● n bit permettono di rappresentare una scelta tra 2n alternative; ● per rappresentare una scelta tra N ≥ 1 alternative, sono necessari circa log2 N bit.

Leibniz era in contatto epistolare con i missionari gesuiti in Cina, in particolare il Padre Bouvet

che lo informò nel 1701 che il metodo di contare con i numeri in base 2 comunicatogli in precedenza da Leibniz svelava il mistero delle figure di Fo-Hi, associate allo yin e yang della filosofia taoista secondo il Libro dei Mutamenti, o I-Ching

Le sequenze prese in considerazione da Leibniz non comprendono le sequenze di 8 bit che costituiscono il byte, tuttavia, un pioniere della logica matematica e ammiratore dell’opera di

Leibniz, Giuseppe Peano , nel 1898 inventa una stenografia basata su elementi che

corrispondono a gruppi di 8 cifre binarie, osservando che il loro numero è all’incirca pari a quello delle sillabe delle lingue europee e si dedicò alla realizzazione di un congegno meccanico per scrivere utilizzando questo codice. RAPPRESENTAZIONE DI NUMERI IN BIT Comunemente i numeri vengono scritti in notazione posizionale, il che vuol dire che il significato di ogni cifra dipende dalla sua posizione.

In base 10 , le cifre che compongono i numeri interi hanno significato, da destra verso sinistra, di

unita`, decine, centinaia, etc.

Allo stesso modo, nella rappresentazione di numeri in base 2 (binaria), le “cifre” possibili sono

soltanto due “0” e “1” e, in modo analogo nella base 10, il loro valore è uguale a potenze crescenti della base numerazione 1 = 2^0, 2 = 2^1, 4 = 2^2, 8 = 2^

Esiste anche la rappresentazione esadecimale, un sistema numerico posizionale in base 16. Per

questo motivo, ha necessità di usare 16 simboli per rappresentare le cifre:

  • “a” oppure “A”, con valore 10
  • “b” oppure “B”, con valore 11
  • “c” oppure “C”, con valore 12
  • “d” oppure “D”, con valore 13
  • “e” oppure “E”, con valore 14
  • “f” oppure “F”, con valore 15

Si usa la notazione (x)p per dire che il numero x e rappresentato in base p.

In una sequenza di bit si usa chiamare il bit più a destra come il meno significativo, il bit più a sinistra si chiama bit più significativo. OPERAZIONI TRA BIT (E BYTE) I calcolatori compiono le operazioni su bit a partire da alcune operazioni fondamentali dette

operazioni booleane :

NOT corrisponde alla negazione: NOT x è la negazione della variabile x; ● AND corrisponde alla congiunzione: x AND y è vera se sia x che y sono vere; ● OR corrisponde alla disgiunzione: x OR y è vera se almeno una fra x e y è vera; ● XOR corrisponde alla OR esclusivo: x XOR y è vera se soltanto una fra x e y è vera. Lo XOR si può anche vedere come un “indicatore di diversità”: x XOR y vale 1 se x e y hanno un valore diverso, 0 se hanno lo stesso valore. Un'operazione si dice:

  • unaria, se richiede soltanto una variabile (la NOT è un’operazione unaria)
  • binaria, se utilizza due variabili (le operazioni AND, OR e XOR sono binarie). L’aggettivo “binario” sottolinea il numero di operandi dell’operazione, non la base di numerazione in cui si opera.

I valori delle espressioni booleane si rappresentano in tabelle di verità. In una tabella di verità sono

elencate tutte le possibili combinazioni delle variabili coinvolte in un’espressione su ogni riga

Solitamente le codifiche dei file si scrivono in esadecimale perché in questo modo tutti i byte si possono scrivere con lo stesso numero di cifre (ovvero 2).

UTF-8 --> La codifica ASCII non offre la possibilità di codificare lettere accentate, né linguaggi con

caratteri diversi. Per superare questo limite è stato proposto di estendere la codifica ASCII sfruttando il bit più significativo (l'ottavo) che nella codifica ASCII standard non viene utilizzato (ovvero è sempre posto a zero). Usa gruppi di byte per rappresentare i caratteri Unicode. In un file testo codificato con UTF-8:

  • un byte con bit più significativo uguale a 0, codifica un carattere secondo la codifica ASCII standard
  • un byte con bit più significativo uguale a 1 viene usato dalla codifica estesa UTF-8 per codificare caratteri che non fanno parte di quelli codificabili in ASCII. Le codifiche disponibili con il bit più significativo a 1 sono 128 (ovvero il bit più significativo a 1 e tutte le possibili configurazioni degli altri 7 bit). RAPPRESENTAZIONE DEL TESTO La codifica del testo equivale alla traduzione del testo in una sequenza di byte opportuna. Un file che

contiene la codifica di un testo secondo lo standard ASCII, si dice un file di testo , in inglese text file.

Un testo non è altro che una sequenza di righe , in inglese si usa il termine “line”. Ogni riga è

composta dalle singole parole. Ogni parola a sua volta è composta da caratteri , che sono i termini

più piccoli in cui può essere scomposto il testo. Il singolo carattere è codificato secondo lo standard ASCII, che associa ad ogni carattere un byte corrispondente, secondo una certa tabella. Cosa si può rappresentare con ASCII --> lettere minuscole e maiuscole, le cifre decimali da 0 a 9, i segni di punteggiatura, alcuni caratteri di uso comune, lo spazio che è, molto importante perché

viene utilizzato per separare le parole, e un carattere speciale “a capo”, che serve per separare le righe. Cosa non si può rappresentare con ASCII --> il colore del carattere, non si può decidere la resa grafica del carattere, cioè il font, né la dimensione del carattere e neppure l’aspetto del carattere per esempio dovranno essere utilizzati (grassetto, corsivo…). RAPPRESENTAZIONE DELLE IMMAGINI Anche per le immagini è necessario tradurre un'immagine in sequenza di byte (numeri da 0 a 255). L'immagine viene astratta come un rettangolo di dimensioni variabili che contiene colori, poi viene

diviso in una griglia composta da piccoli quadratini. Ogni quadratino si chiama pixel (Picture

Element). La risoluzione dell'immagine, che si misura con il numero di pixel utilizzati in larghezza e in altezza, determina il numero di pixel utilizzati per rappresentare l'immagine: maggiore è la risoluzione, maggiore è il numero di pixel utilizzati. Tipicamente l'immagine è codificata con la sequenza dei colori dei pixel a partire dall'angolo dell'immagine in alto a sinistra.

Codifica del colore --> Il pixel è rappresentato dal suo colore ed esistono vari modi per

rappresentare il colore. ● La codifica più conosciuta e diffusa è quella RGB (Red Green Blue). Tale codifica deriva dal vecchio modo di generare il colore nelle televisioni a tubo catodico. Ogni pixel della televisione veniva colorato a seconda dell'intensità con cui veniva colpito da tre fasci di elettroni, ciascuno corrispondente a colori rosso, verde e blu. Il colore viene rappresentato dall'intensità di ciascuno dei tre colori, la quale è tipicamente rappresentata da un byte. Un colore RGB, quindi, si rappresenta con 3 byte. Il bianco è il colore ottenuto con l'intensità massima di tutte e 3 le componenti ● La codifica CMYK (Cyan, Magenta, Yellow, Key black), detta anche di quattricromia, è usata principalmente nelle stampanti a getto di inchiostro. Il colore è rappresentato da 4 numeri. ● La codifica HSV (Hue, Saturation, Value) dall'inglese “tonalità, saturazione, valore", è particolarmente orientato al modo in cui i colori vengono percepiti dall'essere umano, essendo basato sulla percezione che si ha di un colore in termini di tinta, sfumatura e tono. I possibili colori ottenibili con la codifica RGB sono pari a tutte le possibili configurazioni di 3 byte ovvero 2^3x8 = 2^24 ≃16 x 10^6. Siccome è molto difficile che in un’immagine ci possano essere

pixel con tutti i 16 milioni di colori diversi, si utilizza una tabella di colori, detta palette , che svolge

una funzione analoga alla tabella ASCII usata per la codifica del testo (in un'immagine con una palette di 256 colori, ogni pixel sarà codificato da 8 bit, allo stesso se una palette contiene soltanto due colori, come nel caso di un'immagine in bianco e nero, ogni pixel può essere rappresentato da un bit soltanto.) ARCHITETTURA DEL CALCOLATORE Codifica delle istruzioni --> le istruzioni sono operazioni sui dati e possono essere rappresentate da una sequenza di byte. La codifica è adottata da tutti i processori.

Memoria principale : dispositivo hardware che contiene programmi da eseguire e dati utili alla loro esecuzione, sono memorizzati sotto forma di sequenza di byte. La memoria principale è volatile, cioè il suo contenuto viene perso dopo che il calcolatore viene spento. (in inglese main memory) ● Bus di comunicazione : canale attraverso cui avviene la comunicazione fra i dispositivi presenti ● Periferiche di input/output : dispositivi che permettono al calcolatore di comunicare con l’esterno (in inglese I/O devices) ● Controllore I/O : dispositivo che permette l’utilizzo delle varie periferiche (in inglese I/O controller) Il processore esegue continuamente istruzioni. Non appena viene acceso inizia ad eseguire la prima istruzione contenuta in una locazione di memoria nota e continua così fino allo spegnimento. Per l'esecuzione delle istruzioni utilizza i registri, piccole zone simili alla memoria, ma interne al processore, su cui il processore può scrivere e leggere i dati più velocemente rispetto a quanto farebbe sulla memoria, perché permettono l'accesso ai dati senza dover accedere al bus di comunicazione. I registri vengono identificati da un nome, che è diverso da processore a processore in base a caratteristiche interne. Seguendo la metafora della cucina, i registri rappresentano il piano di lavoro sul cui gli ingredienti (i dati) vengono messi appena prima di essere elaborati, allo stesso modo, il processore preleva dalla memoria i dati di cui ha bisogno e li mette nei registri. Esistono diversi tipi di registro:

  • Registri “general purpose”: non hanno utilizzi specifici e possono essere utilizzati per contenere dati generici
  • Registri che gestiscono gli accessi in memoria (MBR e MAR)
  • Registri di stato: mantengono informazioni relative allo stato del processore (per esempio la temperatura o quanto tempo è trascorso dall’accensione)
  • Il Program Counter (PC) e l'Instruction Register (IR) servono a gestire le istruzioni e verranno discussi in maggiore dettaglio più avanti. All'interno del processore, oltre ai registri, ci sono unità che svolgono funzioni specializzate:
  • la ALU (Arithmetic Logic Unit) permette di svolgere operazioni aritmetico-logiche (somma tra contenuti di registri, AND, OR, NOT…)
  • la FPU (Floating Point Unit) permette di svolgere operazioni con numeri in virgola mobile (che sono un modo per rappresentare numeri decimali)
  • la Control Unit decodifica le istruzioni e ne supervisiona l'esecuzione. PASSI PER ESEGUIRE LE ISTRUZIONI :

Nel processore è presente un registro speciale che si chiama Program Counter (PC) che contiene

l'indirizzo di memoria da cui prelevare la prossima istruzione da eseguire.

Fase di fetch : Il processore preleva dall'indirizzo di memoria l'istruzione che dovrà essere eseguita

e la scrive in un altro registro chiamato Istruction Register (IR).

Fase di decode : Il processore esamina l'istruzione presente nell'IR, la decodifica e ne calcola la

lunghezza (in byte). Una volta calcolata la lunghezza dell'istruzione, il processore incrementa il PC del numero corrispondente alla lunghezza dell'istruzione. In questo modo, durante la prossima fase di fetch il Program Counter conterrà correttamente l'indirizzo di memoria dell'istruzione successiva.

Fase di execute : Il processore preleva gli operandi che saranno necessari per l'esecuzione ed

esegue l'istruzione. Si torna alla prima fase (di fetch) in cui verrà prelevata la prossima istruzione.

All'accensione, il valore del PC è pari a zero. Inizia quindi a prelevare la prima istruzione dall'indirizzo zero e così via fino al suo spegnimento. Modalità di codifica delle istruzioni: Le due famiglie di codifica principali sono:

1. Complex Instruction Set Computer ( CISC ) --> permette di avere a disposizione istruzioni

complesse che possono fare più cose

2. Reduced Instruction Set Computer ( RISC ) --> mette a disposizione poche elementari istruzioni

Per eseguire uno stesso compito ci sarà bisogno di più istruzioni RISC rispetto al numero di istruzioni CISC necessarie, inoltre, l'esecuzione di una singola istruzione RISC è più veloce rispetto all'esecuzione di una CISC. La scelta di codifica delle istruzioni determina l'Instructure Set Architecture ( ISA ), che è il modo con cui sono codificate le istruzioni del processore, che è influenzata da motivi commerciali e dalle tipologie di applicazioni da eseguire. Il compilatore svolge un lavoro di traduzione dal linguaggio ad alto livello al linguaggio macchina costituito da byte. Gerarchia di memoria --> La grande quantità di dati normalmente presente in un elaboratore è memorizzata su supporti che possono presentare caratteristiche molto diverse tra loro, in termini di tempo di accesso, di capacità e di costo. Tali supporti sono organizzati come una struttura gerarchica in cui al livello più alto troviamo i dispositivi di memoria più lenti, con capacità maggiore e meno costosi; man mano che si scende in questa gerarchia, i supporti hanno capacità sempre più piccola, tempo di accesso sempre più basso e costo maggiore. i tempi di accesso aumentano all'aumentare della distanza dal processore. Oltre al tempo di accesso, capacità e costo, hanno un'importanza anche:

  • il tempo di vita di una memoria, che indica per quanto tempo i dati possono rimanere memorizzati,
  • l'affidabilità, che indica il grado di errore che si può incontrare nel rileggere dalla memoria un dato scritto e la capacità di mantenere l'informazione immagazzinata anche in presenza di disturbi (per esempio, di origine elettromagnetica) Il processore, le memorie e tutti i circuiti integrati sono circuiti elettronici realizzati su silicio. Attraverso a un processo simile alla stampa chiamato litografia, il silicio può diventare sia conduttore che isolante. Legge di Moore --> lo sviluppo dei processori segue questa legge, che determina una crescita esponenziale del numero di transistor in un circuito integrato. Secondo Moore, il numero di transistor presenti in un circuito integrato raddoppia ogni 2 anni.

● l’ingresso deve essere finito e possedere una struttura identificabile ed interpretabile. Deve essere fissato quindi il modo con cui i dati in ingresso vengono rappresentati. ● Le istruzioni devono essere non ambigue ed effettivamente eseguibili, devono fare riferimento ad un insieme finito e prefissato di operazioni di base che sappiamo eseguire. Le operazioni di base con la descrizione del loro effetto formano il modello di calcolo. ● La codifica dell’algoritmo è la sua descrizione precisa che, se vogliamo venga eseguito da un computer, farà uso di uno dei tanti linguaggi di programmazione oggi disponibili. ● La terminazione è la richiesta che per ogni ingresso l’esecuzione dell’algoritmo termini in un numero finito di passi, cioè dopo aver eseguito un numero finito, ma in generale non uguale per tutti gli ingressi, di istruzioni elementari. Un algoritmo non è una qualunque procedura, bensì è una strategia per risolvere un problema ben definito Perciò diciamo che un problema computazionale è ben definito quando siano specificati:

  • L’insieme degli input, cioè degli ingressi ammissibili
  • L’insieme degli output, ossia dei risultati corretti in funzione degli input problema algoritmico → L'algoritmo viene generalmente descritto come "procedimento di risoluzione di un problema". In questo contesto, i "problemi" che si considerano sono quasi sempre caratterizzati da dati di ingresso (input) variabili, su cui l'algoritmo stesso opererà per giungere fino alla soluzione. Un caso particolare di input si dice istanza del problema. Un algoritmo risolve un problema algoritmico se produce un’uscita corretta per ogni istanza ammissibile. Alcuni problemi algoritmici sono:
    • Ordinamento (sorting), in cui si chiede di ordinare una lista di elementi secondo un criterio
    • Torri di Hanoi : un rompicapo in cui si chiede di spostare una torre di dischi secondo certe regole
    • Ciclo di Hamilton: ossia un percorso in una rete che ne attraversi i nodi esattamente una volta
    • Ricoprimento o tassellatura di una superficie con piastrelle, noto in molte varianti ( tailing

problem ).

Dato un problema algoritmico se esiste una soluzione, ossia un algoritmo che lo risolve, allora è facile convincersi che ne esistono infinite altre, tuttavia spesso esistono soluzioni sostanzialmente diverse dello stesso problema. Un esempio è dato dalla soluzione del problema di ordinare una lista di parole, che richiede un numero di operazioni di scambio e di confronto proporzionale al numero di permutazioni di ordine n e cioè n! un numero enorme anche per piccoli valori di n. Esistono metodi per ordinare una lista di parole ben più efficienti. Ad esempio:

  • Ordinamento per selezione (selection sort): l’algoritmo seleziona di volta in volta il numero minore nella sequenza di partenza e lo sposta nella sequenza ordinata.
  • Quicksort : preso un elemento da una struttura dati, si pongono gli elementi minori a sinistra rispetto all’elemento scelto e gli elementi maggiori a destra. L'operazione viene ripetuta sui due insiemi risultanti fino al completo ordinamento della struttura. Sfrutta un concetto chiamato ricorsione, questo significa che si continua a dividere una lista di oggetti in parti più piccole applicando lo stesso tipo di ordinamento alle nuove parti più piccole. Questo approccio in particolare è denominato divide et impera, la lista è ripetutamente suddivisa finchè è sufficientemente piccola da conquistare (impera). questo metodo è molto più veloce di altri.
  • Ordinamento per inserimento (insertion sort): lavora rimuovendo ciascun oggetto da un insieme non ordinato e inserendolo nella posizione corretta in un altro insieme. Ad ogni inserzione, l’insieme di oggetti non ordinati si riduce e quello ordinato cresce, fino a che l’intero insieme di oggetti originario è ordinato. I giocatori di carte usano molto spesso questo sistema per ordinare una mano di carte.
  • Ordinamento a bolle (bubble sort): opera nell’insieme di oggetti molte volte, scambiando ogni oggetto di posto, da destra a sinistra e viceversa quando incontra un oggetto a destra più leggero di quello di sinistra. L’insieme di oggetti è ordinato quando non sono più necessari scambi.
  • Ordinamento per fusione : Per prima cosa la lista è divisa casualmente in due liste con un numero di oggetti uguale (se gli oggetti sono in numero dispari, una delle due nuove liste conterrà un oggetto in più). Ciascuna delle due sotto-liste viene ordinata e alla fine entrambe vengono fuse assieme. Per fondere le due sotto-liste basta rimuovere ripetutamente il più piccolo oggetto scelto tra i due all’inizio delle sotto-liste ordinate. Richiede tempo proporzionale ad n log n nel caso peggiore.
  • Ordinamento rapido : partizione successiva di sottosequenze tra maggioranti e minoranti di elementi scelti a caso; richiede tempo proporzionale ad n log n nel caso medio problemi trattabili → risolubili con algoritmi polinomiali in grado di giungere alla soluzione in tempi di esecuzione e un consumo accettabili problemi intrattabili → problemi per i quali non esiste un algoritmo con complessità polinomiale in grado di risolverlo. è errato pensare che non possano avere soluzioni, perché possono essere risolvibili mediante algoritmi di complessità esponenziale. Tuttavia, l’elevato consumo di risorse del computer e/o il tempo di esecuzione proibitivo renderebbe l’algoritmo inutile. problemi NP-completi → è una classe di problemi dei quali sappiamo riconoscere la correttezza di un’uscita in modo efficiente, mentre per decidere se esistono uscite corrette conosciamo solo algoritmi che richiedono tempo esponenziale. Tutt’oggi non sappiamo rispondere alla domanda se ve ne siano di polinomiali oppure no, ma si congettura che la risposta sia negativa. WEB Sin dal suo nascere nei primi anni ‘90 il Web ha costituito una sfida per sviluppatori e utenti. L’abbondanza di informazioni infatti può essere un ostacolo se non si dispone di uno strumento efficiente di ricerca, per questo sono nati i motori di ricerca, che si basano su algoritmi per la ricerca, la catalogazione e l’ordinamento dei risultati della ricerca cercando di indovinare cosa possa essere più o meno rilevante in rapporto alle richieste degli utilizzatori. Ma come fa il motore di ricerca a trovare così rapidamente le risposte? L’elaborazione della risposta di un motore di ricerca attraversa tre fasi:
  1. Il motore riceve la nostra stringa di parole, detta interrogazione;
  2. Usando le parole come parole chiave cerca pagine corrispondenti nel web (matching);
  3. infine le ordina in modo che le più pertinenti precedano quelle che lo sono meno. Tuttavia essendo impossibile visitare miliardi di pagine nel momento dell’interrogazione bisogna prepararsi in anticipo; perciò programmi esploratori della rete detti crawler (nuotatori) o spider (ragni) scandagliano periodicamente il web navigando da una pagina all’altra, riferimenti e brevi brani vengono raccolti in grandi basi di dati, quindi si costruiscono degli indici Come distinguere nella massa delle risposte quelle pertinenti? Per valutare l’interesse di un testo un essere umano non si limita a cercarvi le parole, bensì le interpreta nel con-testo in cui si trovano. Ma un algoritmo o un programma per computer come può

partire dai più` corti e connettendo solo parti della rete che non sono ancora state connesse. Questo è chiamato algoritmo di Kruskal (J.B. Kruskal lo pubblicò nel 1956).