Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2013, 13: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 14:32. Motivo: errore di scrittura
metiu0003 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 13:56   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
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, 14: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, 14:23   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
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, 14: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, 16:57   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
Quali strutture dati conosci?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2013, 18: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, 09:37   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
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, 10: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, 18: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, 18: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, 20:47   #12
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
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


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
L'intelligenza artificiale ha reso pi&ug...
L'intelligenza artificiale per lo svilup...
Il sistema di verifica dell'identit&agra...
Ora è ufficiale: Samsung sta per ...
Motorola Edge 70 Fusion: ecco le specifi...
8TB a meno di 170€: il richiestissimo Ha...
Il nuovo MacBook 'low cost' arriver&agra...
Pokémon Rosso Fuoco e Verde Fogli...
Risparmiare con le offerte Amazon: weeke...
Gli Xiaomi 17 arrivano a fine febbraio, ...
48.000 Pa a poco più di 100€: la ...
PC più potente, meno spesa: su Amazon to...
Con 2 acquisti si ottiene il 40% di scon...
Blocco VPN in Spagna durante le partite ...
ECOVACS DEEBOT T30C OMNI GEN2 torna a 34...
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: 00:06.


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