Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-07-2008, 12:30   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
[algoritmo] Esercizzio circa ordinamenti ed altro

Ragazzi scusate se rompo ma tra 3 giorni ho l'esame di elementi di algoritmi e strutture dati e sono molto preoccupato...ho questo esercizio proposto su un vecchio compito d'esame.

ESERCIO:

Siano A = {a1, a2, ...., an} e B = {b1, b2, ...., bn} due insiemi di interi.
Si realizzi un algoritmo che, preso in input i due insiemi memorizzati in due array, restituisce la loro intersezione, cioè l'insieme composto da tutti gli elementi che sono sia in A che in B. L'algoritmo deve avere complessitµa temporale o(n^2).
Attenzione: l'esercizio sarà valutato solo se corredato da adeguata descrizione del funzionamento dell'algoritmo, in base ai seguenti parametri: correttezza, efficienza e analisi di complessità.

La mia soluzione è la seguente:

A e B sono due array di interi e devo realizzare un algoritmo che mi metta in un altro array C i valori appartenenti sia ad A che a B (appunto l'intereszione dei due array di input) in un tempo che sia o(n^2) quindi avente come complessità temporale una funzione g(n) che cresca in maniera strettamente minore di f(n)=n^2

Intanto credo che dati i due vettori A e B il modo più rapido per determinarne l'interesezione lo posso trovare se A e B sono ordinati. Quindi inizialmente ordino i miei due vettori A e B con l'algoritmo di ordinamento per confronti più veloce che conosco che è l'heapsort che ha una complessità pari ad O(n*log(n)) il che non mi causa problemi perchè non mi fa sforare dall'estremo superiore impostomi.

Poi per trovare i valori comuni ai due vettori faccio nel seguente modo:

Imposto un indice di scorrimento per A che chiamerò begin_A, un indice di scorrimento per B che chiamerò begin_B ed un indice di scorrimento del vettore contenitore C che chimaerò semplicemente i.

All'inizio begin_A e begin_B sono impostati sulla prima locazione di A e B.
Eseguo una serie di confronti finchè entrambi i vettori A e B sono completamente consumati.
Se il valore di A in posizione begin_A è uguale al valore di B in posizione begin_B metto quel valore nell'array C ed incremento entrambi gli indici.
Se il valore di A in posizione begin_A è minore del valore di B in posizione begin_B incremento begin_B, vicerversa avrei incrementato begin_A e continuato ad eseguire i confronti.

In pseudocodice credo sia qualcosa del tipo:

Codice:
A= array di x interi
B = array di y interi
C = array di min{x, y} // Perchè al massimo potranno avere in comune tutti gli elementi dell'array più piccolo

begin_A = 0
begin_B = 0
i = 0

WHILE(begin_A != x and begin_B !=y){
      IF(A[begin_A] == B[begin_B]) THEN{
             C[i] = A[begin_A] //Copia l'elemento comune in C
             INCREMENTA begin_A di 1
             INCREMENTA begin_B di 1
     }

     ELSE IF A[begin_A] < B[begin_B] THEN
              INCREMENTA begin_A di 1

     ELSE
              INCREMENTA begin_B di 1

}
Questo sistema dovrebbe essere il sistema usato dal mergesort e dovrebbe avere una complessità temporale O(n) perchè credo che nel caso peggiore il numero di confronti effettuato sia <=2n

Quindi la complessità totale di tutto l'algoritmo incluso l'ordinamento mediante heapsort dovrebbe essere O(n*log(n)) che è un o(n^2)

mmm dite che ci può stare? magari non del tutto (ammetto di non mirare al 30 a sto esame doh ).

L'esercizio valeva 8 punti...quanti me ne avreste dati?

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 19:35   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
L'esercizio DEVE avere complessita' O(N^2) o puo' anche essere minore?

O(N^2) e' davvero banale
Codice:
A= array di x interi
B = array di y interi

RES = Lista Risultato;

FOREACH Aelem in A
{
     bool found=false;
     FOREACH Belem in B
     {
          if (Aelem==Belem)
          {
              found=true;
              break;
          }
     }
     if found Push Aelem in Lista;
}
Senza ordinare nulla, cercando ciascuno degli elementi di A dentro tutto B, anche non ordinato.

Casi da valutare sono quando in A o in B ci sono elementi ripetuti n,m volte. Cosa vorrebbe il prof.? Non l'ha scritto, e sono plausibili molte risposte.

Interessante sarebbe farlo in O(N), che e' possibile
Che e' anche la soluzione che C# sviluppa internamente nell'istruzione
Codice:
  var Risultato=ListA.Intersect(ListB);
Dura la vita in C# eh?

Ricordati che ordinare costa caro. Ed e' utile ordinare solo quando successivamente ci si pone domande che coinvolgono < o >.
Fino a che si sta sull' = non e' quasi mai necessario/utile ordinare.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 20:25   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
Beh se la complessità è O(n^2) può anche essere minore in quanto f(n)=O(n^2) in realtà è un insieme di infinite funzioni tali che esistono 2 costanti c>0 ed n0>=0 tali che:

f(n) <= c*(n^2) Per ogni n>=n0

Quindi n=O(n^2)
10n*log(n)=O(n^2)
e così via...almeno credo...
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2008, 20:39   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Mmmh. Un conto e' la complessita' di un algoritmo, che dato un algoritmo e' sempre la stessa.
Un conto e' il tempo di elaborazione, dove occorre sostituire gli n, e dove le costanti sono importanti.

Un conto e' un esercizio che chiede la soluzione di un algoritmo in O(n^2), un altro e' chiedere la soluzione di un problema in tot millisecondi oppure in tot cicli macchina.

Comunque il prof. e' stato chiaro direi. Risolvi in O(n^2), senza ordinare, e sei a posto. E' semplicissimo.

Se invece vuoi strafare dicevo c'e' una soluzione O(n) (ovviamente senza ordinare)
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2008, 01:04   #5
Furla
Senior Member
 
Iscritto dal: Feb 2004
Messaggi: 1454
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Se invece vuoi strafare dicevo c'e' una soluzione O(n) (ovviamente senza ordinare)
hash?
cmq non la postare assolutamente!
Furla è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Meta moltiplica gli investimenti in data...
Addio riflessi fastidiosi? Samsung prese...
PlayStation 5, doccia fredda da Sony: i ...
Super Meat Boy 3D: annunciata la data d'...
XT View Matrix, il mid-tower Phanteks ch...
David Sacks lascia il ruolo di 'Crypto C...
LG All Stars 2026: quando l'installatore...
Addio ad Anna's Archive? Ecco la mossa l...
Addio al Mac Pro, Apple mette fine a un ...
Panasonic a MCE 2026: la rivoluzione sil...
Netflix alza la posta: il piano Premium ...
Nimbus Innovation Awards – Cloud Edition...
Wikipedia vieta i contenuti generati dal...
Niente volante, niente schermi: cos&igra...
Gli 'Avengers' di Windows sono tornati: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v