- 393
- 24
- CPU
- Intel Core i5 4690
- Scheda Madre
- Asus Z97 Deluxe
- HDD
- SSD 256GB + HDD 2TB
- RAM
- 16GB
- GPU
- NVidea Geforce GTX 980
- Monitor
- DELL U2515H
- PSU
- Corsair CX750M Bronze
- Case
- Cooler Master N300
- OS
- Windows 10
Ma non mi basterebbe scandire una sola volta la lista in ogni caso?Ti aiuta perchè cosi ti basta scandire una sola volta la lista per trovare l'elemento più frequente.
Io la farei cosi: crei due strutture con dentro un contatore impostato inizialmente a 0 per entrambi e con una variabile per la chiave corrispondente.
Nel tuo ciclo, userai solo una delle due strutture. All'inizio modificherai la prima struttura mettendo la chiave e il contatore = 1, passi avanti e finchè è uguale incrementi il contatore. Appena la chiave è diversa, fai il confronto con l'altra struttura: se il contatore è maggiore lo sostituisci, sennò rimane invariata. E ricominci il procedimento con il nodo successivo ( la vecchia struttura verrà di nuovo impostata a 1 ed incrementata, per poi essere confrontata con quella che contiene la chiave con più frequenza).
Alla fine del ciclo avrai la struttura con la chiave con più elementi nella lista.
Se riordinassi con merge o quick spenderei del tempo con la loro esecuzione e solo O(n) quando devo fare i conti, ma se non riordino non so se il tempo sia di un ordine di grandezza molto superiore.
Anyway, vediamo se ho capito:
-procedo con merge dei numeri casuali
-ottengo una lista ordinata che duplico (?)
-imposto i contatori a 0
-modifico la prima struttura ponendo la chiave e il counter a 1, incrementandola
-la confronto con la chiave con più elementi nella lista (ma da dove la prendo?)
-se la chiave confrontata è diversa, confronto l'altra struttura
-se il counter è maggiore la sostituisco
-proseguo con il nodo successivo, la vecchia struttura viene reimpostata a 1 e incrementata per essere riconfrontata con quella che contiene la chiave con più elementi
Fatico a capire cosa dovrei fare con gli step, figuriamoci in codice... :suicidio: