Discussione: [Risolto] Select sort che non funziona
Visualizza un messaggio singolo
Vecchio 15-01-2010, 19:09   #9 (permalink)
Kyuss-RA
Nuovo della community

 
11 Messaggi

Kyuss-RA novizio della comunita' ( + 10 )
Quote:
Originariamente inviata da M.A.W. 1968 Visualizza il messaggio
Una soluzione in Formula LaTeX: O(N^2) per eliminare i duplicati da un piccolo array è una scelta un tantino troppo radicale al giorno d'oggi...

In un contesto non constrained, il problema si risolve banalmente in tempo lineare. E' necessario e sufficiente fare uso di un array di appoggio, sia pure di dimensione fissa e allocato sullo stack anziché nello heap.
Ecco una possibile soluzione quick'n'dirty:
codice:
void killDupes(vettore v, int &n)
{
    vettore tmp;
    int vsize = n;
    int last = tmp[0] = v[0];

    for (int j = 1, n = 1; j < vsize; ++j)
    {
        if (last != v[j])
        {
            tmp[n++] = v[j];
            last = v[j];
        }
    }
    memcpy(v, tmp, --n * sizeof(int));
}
Vale inoltre la pena di rilevare che tutto il codice proposto nel presente thread si presenta come C++, ma in realtà fa uso di idiomi e strutture dati tipiche del C per i vettori.

Per motivi piuttosto complessi, qui chiariti in modo sufficientemente approfondito alla luce degli opportuni riferimenti, in C++ gli array del C sono deprecati e dovrebbero cedere il posto alle strutture specializzate (vere e proprie classi OOP) come vector o valarray.

Nulla di male in questo caso, poiché i basilari array C hanno una enorme validità didattica intrinseca nella loro primitiva modellazione della memoria fisica del PC, ma è opportuno esserne consapevoli.

Hai stra ragione su tutto. E' che io sono un bagordo della programmazione e non sto a guardare tanto alla complessita computazionale (specie quando so già che n<=100 e lo stesso algoritmo d'ordinamento , come giustamente avevi fatto notare tu, non è proprio il più ottimale) e vado al sodo.
Comunque complimenti hai una cultura informatica impressionante. Knuth ti fa un baffo.

Ultima modifica di Kyuss-RA : 15-01-2010 a 19:17.
Kyuss-RA non è in linea   Bookmark and Share Rispondi quotando