Array sottoinsieme di un altro Array

di il
3 risposte

Array sottoinsieme di un altro Array

Buonasera, dovrei scrivere un metodo che dati due array in input , restituisce true o false a seconda se il primo è sottoinsieme del secondo. Il problema è che deve avere tempo esecuzione peggiore O n log n , quindi non posso usare un for annidato. ( non posso usare gli hashset o metodi ricorsivi )

La mia idea iniziale era

public static boolean abc(int [] a, int[] b) {
boolean ris=false;
		
		mergeSort2(a);
		mergeSort2(b);
		
		int j=0;
		int x=0;
		for(int i=0;i<b.length;i++) {
			if(a[x]==b[i]) {
				j++;
				x++;
			}
		}
		if(j==a.length) {
		ris=true;
		}
		return ris;

Il problema però è che in caso ci sono elementi ripetuti nell'array a, tutto questo non va bene.

3 Risposte

  • Re: Array sottoinsieme di un altro Array

    SickAnon ha scritto:


    restituisce true o false a seconda se il primo è sottoinsieme del secondo.
    "sottoinsieme" in che senso? Valori in qualunque ordine/posizione? O esattamente contigui come sono nell'array da cercare?
    Perché se fosse il secondo, gli ordinamenti non hanno alcun senso.
  • Re: Array sottoinsieme di un altro Array

    andbin ha scritto:


    SickAnon ha scritto:


    restituisce true o false a seconda se il primo è sottoinsieme del secondo.
    "sottoinsieme" in che senso? Valori in qualunque ordine/posizione? O esattamente contigui come sono nell'array da cercare?
    Perché se fosse il secondo, gli ordinamenti non hanno alcun senso.
    In qualsiasi posizione , restituisce true solo se ogni elemento di a si trova anche in b.
  • Re: Array sottoinsieme di un altro Array

    Caso main NON DEVE AVERE 'un tempo di esecuzione peggiore di n*log(n)', perche' se PUO' AVERE un tempo di esecuzione peggiore, non ci sono limiti al peggio

    Domande:

    1) quale operazione ha complessita' log(n)?
    2) nel caso piu' "becero"/"schifido"/"inefficiente", come faresi per controllare se due vettori rappresentano lo stesso insieme di elementi?
    3) ovviamente ci sara' da fare una ricerca. Conosci qualche tipo di ricerca che e' particolarmente efficiente?

    Metti assieme 1) + 2) + 3) ed hai la tua risposta

    Nota:il codice usa un trucco intelligente che pero' tu NON SFRUTTI! Praticamente hai fatto un lavoro intelligente che pero' getti nel mitico


    (e' fatto veramente in quello che sembra )

    Pensaci, ci sei quasi
Devi accedere o registrarti per scrivere nel forum
3 risposte