Questa domanda e questa domanda mi hanno fatto pensare un po '. Per ordinare un array di lunghezza con elementi univoci in , dobbiamo essere in grado di memorizzare i conteggi dei valori nell'array. Ci sono alcuni suggerimenti, ma sto cercando un modo per farlo nel peggiore dei casi tempo lineare. Più specificamente:
Dato un elenco di elementi con elementi distinti, un elenco di tuple di tutti gli elementi unici tale che è il conteggio dell'elemento in .
Ecco alcune idee (fallite) che ho avuto e sono state suggerite:
- Albero di ricerca binario bilanciato : con questo ci vorrà per inserirlo nell'albero e aumentare i valori. Dopo gli inserti potremmo fare un attraversamento di alberi in . Pertanto, il tempo totale esce su che è troppo lento.
- Hash Map - Con questo possiamo ottenere inserti previsti e quindi tempo previsto . Tuttavia, questo non è ancora il caso peggiore di .
- Spazio vuoto Mapping - Trova il minimo e il massimo elemento in . Alloca (ma non inizializza) memoria sufficiente per coprire questo intervallo. Usa questa memoria fondamentalmente come una mappa di hash e includi un hash casuale in modo che non proviamo ad accedere alla memoria danneggiata. Questa strategia presenta problemi. (1) È probabilistico con probabilità molto molto molto basse di fallimento, ma non è ancora garantito. L'uso della memoria in questo modo ci limita a vincoli in virgola mobile o interi.
- Associative Array - Ci sono molti altri array associativi che possono essere utilizzati, simili a mappe e BST hash, ma io non sto trovando alcun che corrispondono a questi vincoli.
Forse c'è qualche metodo ovvio che mi manca, ma penso anche che potrebbe non essere possibile. Quali sono i tuoi pensieri?