[Algoritmi] Trovare l'elemento non comune a due liste
Ciao a tutti! Ho la consegna di un esercizio ma non la soluzione quindi vi chiedo cortesemente di suggerirmi qualcosa se avete idee.
Consegna:
Date due liste A e B (non ordinate), ciascuna delle quali contiene elementi interi distinti,
si vuole determinare se esiste un elemento che compare in A ma non in B. Fornire un
algoritmo efficiente, scriverne lo pseudocodice e discuterne la complessità (ne esiste uno che
richiede tempo
nel caso medio, dove n è il numero di elementi della lista più lunga).
Due soluzioni che mi vengono in mente (ma che non sembrano O(n) nel caso medio)
- Scandire una lista nel frattempo controllando la presenza dell'elemento nell'altra
- Creare un array dimensione
(quella dell'array più grande) e fare un MergeSort e scandirlo per verificare la presenza di duplicati prendendo ogni volta un elemento dall'altro facendo una ricerca binaria. Ma anche in questo caso abbiamo..
con
dimensione dell'altro array, che se è molto piccola è circa 
Con una funzione hash si può fare O(M) dove M è il massimo dei due array. Ma non mi sembra
nel caso medio
Qualcuno ha qualche idea?
Consegna:
Date due liste A e B (non ordinate), ciascuna delle quali contiene elementi interi distinti,
si vuole determinare se esiste un elemento che compare in A ma non in B. Fornire un
algoritmo efficiente, scriverne lo pseudocodice e discuterne la complessità (ne esiste uno che
richiede tempo
nel caso medio, dove n è il numero di elementi della lista più lunga).Due soluzioni che mi vengono in mente (ma che non sembrano O(n) nel caso medio)
- Scandire una lista nel frattempo controllando la presenza dell'elemento nell'altra

- Creare un array dimensione
(quella dell'array più grande) e fare un MergeSort e scandirlo per verificare la presenza di duplicati prendendo ogni volta un elemento dall'altro facendo una ricerca binaria. Ma anche in questo caso abbiamo..
con
dimensione dell'altro array, che se è molto piccola è circa 
Con una funzione hash si può fare O(M) dove M è il massimo dei due array. Ma non mi sembra
nel caso medioQualcuno ha qualche idea?
dove
è il massimo e
è il minimo. Cosa posso fare di meglio? Non conosco il "passo" tra due valori consecutivi per dividere. Posso trovare il massimo però. E così come dico io non credo che mediamente venga 
, cioè costante e indipendente dal numero di elementi già presenti.