Rileva duplicati in un sottoinsieme da un insieme di elementi

1

Ho una serie di numeri che dicono: 1 1 2 8 5 6 6 7 8 8 4 2 ...

Voglio rilevare l'elemento duplicato in sottoinsiemi (di una certa dimensione dire k) dei numeri sopra ... Per esempio : Considera i sottoinsiemi crescenti (ad esempio, considera k = 3)

Sottoinsieme 1: {1,1,2}

Sottoinsieme 2: {1,2,8}

Sottoinsieme 3: {2,8,5}

Sottoinsieme 4: {8,5,6}

Sottoinsieme 5: {5,6,6}

Sottoinsieme 6: {6,6,7}

....

.... Quindi il mio algoritmo dovrebbe rilevare che il sottoinsieme 1,5,6 contiene duplicati ..

Il mio approccio: 1) Copia il 1 ° elemento k in un array temporaneo (vector) 2) usando il file #include in C ++ STL ... usando unique () Determerei se c'è qualche cambiamento nelle dimensioni del vettore .. Qualsiasi altro indizio su come affrontare questo problema ..

    
posta Abhinav Shrivastava 14.10.2012 - 16:13
fonte

2 risposte

1

Prendi un sottoinsieme, aggiungi ciascun elemento in una tabella hash. Se la tabella hash contiene già un valore, stampare dicendo che esiste un duplicato.

Una tabella hash assegna solo 1 blocco di memoria per ogni voce. Quindi è facile da trovare se il numero esiste già. Poiché queste sono solo voci regolari, la tua tabella sarà simile a questa:

struct Hashtable{
   int number;
};

static struct Hashtable hashTable[10];

int getHash(int x){ return x; }

void addHash(int number)
{
    if(hashTable[number].number == -1)
    { /*OK*/
        hashTable[number].number = number;
    }else{
        printf("DUPLICATE FOUND! BAILING OUT!");
    }
}

void initTable(){ for(int i = 0; i < 10; i++){hashTable[i].number = -1;}}
    
risposta data 14.10.2012 - 16:32
fonte
2

Se sono tutti set, per definizione non contengono duplicati. Se sono eg. elenca quindi puoi semplicemente creare insiemi di sottoliste. In Python 2.x:

items = [1, 1, 2, 8, 5, 6, 6, 7, 8, 8, 4, 2]

for i in xrange(len(items) - 2):
    sublist = items[i:i + 3]
    if len(set(sublist)) < 3:
        print sublist, 'contains duplicates.'
    else:
        print sublist, 'contains no duplicates.'

Risultato:

[1, 1, 2] contains duplicates.
[1, 2, 8] contains no duplicates.
[2, 8, 5] contains no duplicates.
[8, 5, 6] contains no duplicates.
[5, 6, 6] contains duplicates.
[6, 6, 7] contains duplicates.
[6, 7, 8] contains no duplicates.
[7, 8, 8] contains duplicates.
[8, 8, 4] contains duplicates.
[8, 4, 2] contains no duplicates.
    
risposta data 14.10.2012 - 16:25
fonte

Leggi altre domande sui tag