Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2013, 12:07   #1
metiu0003
Junior Member
 
Iscritto dal: Jun 2013
Messaggi: 8
intersezione elementi array

Buongiorno a tutti,
avrei questo esercizio da risolvere: Dati due vettori A e B (lunghi n ed m, rispettivamente) che rispettano il vincolo 1 e con distanza massima fra numeri comuni pari a k (costante), determinare in modo efficiente tutti e soli i numeri presenti contemporaneamente in A e B, nello stesso ordine in cui compaiono,
utilizzando al massimo O(k) (cioè O(1)) spazio aggiuntivo rispetto allo spazio per l’input.

Il vincolo 1 è : per ogni posizione i e j nel vettore A e per ogni posizione i' e j' nel vettore B: se A[i] = B[i'] ∧ A[j] = B[j'] ∧ i < j allora i'< j'. Cioè in altre parole i numeri in comune compaiono nello stesso ordine nei due vettori e la distanza tra due numeri comuni consecutivi in un vettore è <= a k.

Ad esempio:
A= 3 7 5 9 10 15 16 1 6 2
B= 4 8 5 13 1 17 2 11
quindi m = 10, n = 8, k = 6
il risultato è 5 1 2

Ultima modifica di metiu0003 : 03-06-2013 alle 13:32. Motivo: errore di scrittura
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 12:56   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
L'esercizio è carino ma l'esempio è sbagliato...
Comunque dov'è che ti incarti?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 13:10   #3
metiu0003
Junior Member
 
Iscritto dal: Jun 2013
Messaggi: 8
si scusa l'esempio giusto è:
A= 3 7 5 9 10 15 16 1 6 5
B= 4 8 5 13 1 17 2 11
quindi m = 10, n = 8, k = 6
il risultato è 5 1 2


Io pensavo di partire cercando il primo elemento comune ad entrambi i vettori e poi confrontare i successivi k elementi di entrambi i vettori per trovare l'eventuale elemento comune successivo. Però credo che sicuramente ci sia una soluzione migliore della mia, magari qualcosa che non sfrutta l'ordinamento.
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 13:23   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Secondo me devi sfruttare sin dal principio la distanza k, quindi anche nella ricerca della prima occorrenza. Inoltre l'esercizio ti permette di utilizzare O(k) spazio aggiuntivo e questo potrebbe permetterti di adottare un algoritmo più rapido.
Comunque l'esempio è ancora sbagliato (in A non è presente 2)
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 13:36   #5
metiu0003
Junior Member
 
Iscritto dal: Jun 2013
Messaggi: 8
Adesso dovrebbe essere giusto.
Comunque avevo pensato anch'io di fare circa cosi però non mi viene in mente come fare. Riusciresti a farmi un esempio, qualcosa tipo pseudocodice magari.
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 15:57   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Quali strutture dati conosci?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 17:30   #7
metiu0003
Junior Member
 
Iscritto dal: Jun 2013
Messaggi: 8
Vanno bene tutte: liste, heap, code, stack, alberi bst o red black ma possibilmente non tabelle hash.
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2013, 08:37   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Ci ho pensato un po' ma c'è una questione che non mi torna... Per come è posto il problema i primi due numeri in comune potrebbero trovarsi in qualunque posizione in A e in B, ad esempio alla posizione 1 in A e alla posizione 100 in B. C'è qualche considerazione aggiuntiva in merito?
Inoltre una soluzione banale ma che credo non sia concessa è ordinare uno dei due array e poi scorrere l'altro cercando i vari numeri nel primo (ricerca dicotomica). Non credo sia concessa perché uno degli input viene irrimediabilmente modificato...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2013, 09:42   #9
metiu0003
Junior Member
 
Iscritto dal: Jun 2013
Messaggi: 8
Infatti il problema è la posizione del primo numero in comune. Oltre a quello che ti ho detto non c'è nient'altro altro. La soluzione banale non usa k quindi non va bene.
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2013, 17:36   #10
metiu0003
Junior Member
 
Iscritto dal: Jun 2013
Messaggi: 8
Il primo elemento in comune si trova in posizione 0,k-1.
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2013, 17:37   #11
metiu0003
Junior Member
 
Iscritto dal: Jun 2013
Messaggi: 8
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Ci ho pensato un po' ma c'è una questione che non mi torna... Per come è posto il problema i primi due numeri in comune potrebbero trovarsi in qualunque posizione in A e in B, ad esempio alla posizione 1 in A e alla posizione 100 in B. C'è qualche considerazione aggiuntiva in merito?
Inoltre una soluzione banale ma che credo non sia concessa è ordinare uno dei due array e poi scorrere l'altro cercando i vari numeri nel primo (ricerca dicotomica). Non credo sia concessa perché uno degli input viene irrimediabilmente modificato...
Il primo elemento si trova in tra la posizione 0 e la k-1.
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2013, 19:47   #12
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2791
Ok, allora quello che puoi fare è sfruttare una struttura dati per metterci fino a k elementi. Questa struttura deve permetterti di cercare un elemento al suo interno con complessità meno che lineare, compreso l'inserimento (altrimenti non c'è guadagno). Inoltre deve restituirti l'indice dell'elemento cercato.
Grazie a questa struttura puoi metterci i primi k elementi di A e poi uno ad uno cercare gli elementi di B nella struttura. Quando trovi una corrispondenza in A all'indice j, svuoti la struttura e ci metti tutti gli elementi da j+1 a j+k e continui.
Questo come base, poi puoi fare delle migliorie...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Dopo gli unicorni, arrivano i "soon...
Europei sempre più diffidenti ver...
L'acquisto di Steam Machine è un ...
Lenovo Prime Day: i 6 migliori sconti (a...
CATL non riesce a superare la fase proto...
Mythos, il caso si complica: causa contr...
Il pazzesco nuovo record di Xiaomi YU7 G...
OneXPlayer 3: un PC gaming in formato Ni...
Climate.us riporta online i 15 anni di C...
Hisense da 58 pollici sotto i 300€ fa tr...
Windows 11 26H2: cosa cambia e chi resta...
SpaceX ha lanciato la sua prima capsula ...
Il prezzo medio di vendita degli smartph...
Prime Day robot tagliaerba: MAMMOTION, D...
Recensione Google Home Speaker: Gemini s...
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: 21:27.


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