002
16.01.2009, 09:16 Uhr
~ANGs_Pino
Gast
|
Zitat von ao: |
100 Millionen Zahlen, aber nur 400.000 verschiedene, d.h. jeder Wert kommt im Mittel 250-mal vor. Alle Wiederholungen sollen gelöscht werden, so dass am Ende ein Vektor mit 400.000 *verschiedenen* Elementen steht. Richtig verstanden?.
|
exakt!
Zitat von ao: |
Müssen die Wiederholungen *aus dem Originalvektor entfernt* werden? Dafür ist std::vector nicht der passende Container (vector = zusammenhängender Speicher, Element löschen bedeutet: alles, was dahinter kommt, wird ein Feld nach vorne kopiert), und darum dauert das auch so ewig. std::list wäre besser. Oder darf auch ein neuer Ergebnisvektor angelegt werden, in den jede Zahl *genau einmal* eingefügt wird? Auch für diesen würde man besser std::list als std::vector nehmen - fürs Einfügen gilt im Prinzip dasselbe wie fürs Löschen. Und diese Liste gleich sortiert aufbauen, das beschleunigt die Prüfung, ob eine Zahl schon enthalten ist.
|
Prinzipiell egal, wo sie landen oder ob gelöscht wird. Problem: eg mal ne liste mit 100 000 000 Einträgen an, da brauchst du deutlich mehr RAM als beim vektor.
Zitat von ao: |
Es gibt auch std::set (Menge - jedes Element kann nur einfach enthalten sein) - könnte sein, dass dir das diesen Test gleich abnimmt.
|
*nachschau*.
hast du ne lösungsidee mit vektoren / listen? |