Hallo 
Ich hab mal ne kleine Herausforderung für alle:
Ich suche eine Möglichkeit, ein Array zu mischen,
und wieder zurück zu sortieren -- mit Hilfe der
Mathematik.
Also ein Array so richtig gut durchwürfeln, aber
halt berechenbar -- um es wieder zurück zu bekommen.
Folgendes Szenario:
===================
Ich habe ein Array, dass gemischt werden soll. Danach
wird es auf die Festplatte geschrieben. Nun soll es
irgendwann wieder geladen werden, und in seinen originalen
Zustand zurück finden...
Das muss alles gehen, ohne ein extra Array auf die Festplatte
zu schreiben!
Infos:
======
Zur Verfügung steht: Das Eingabearray in der Form int[] mit
sehr vielen Einträgen... geht in die Millionen. 8)
Dann ein Array mit festen Werten (byte[]). Das ist etwa 20
Einträge lang. Dieses Array muss auch benutzt werden.
Es kann auch später noch eindeutig einem großen Array zugeordnet
werden.
Das war es. Damit muss man auskommen. Man kann natürlich
alle normalen mathematischen Funktionen benutzen, wie cos,
sin, exp und so weiter...
Bedingungen:
============
Es sollte in endlicher Zeit zum Ergebnis führen. :wink: Also sagen wir
mal bis zu einer Sekunde für eine Millionen Einträge im Hauptarray!
So in der Art... darf also keine Minuten dauern...
Das Hauptarray soll aber nicht nur einfach um x Einträge
verschoben werden. Also jeden Eintrag um x Positionen verschieben.
Das ist zu einfach!
Und die Arrays dürfen auch nicht vergrößert werden.
Meine eigene Idee:
===================
Die beste Lösung geht wohl leider nicht:
Ich würde am liebsten alle Einträge im Hauptarray einfach nach dem
Wert sortieren. Die niedrigsten alle nach links, die höhsten weit nach
rechts.
Das wäre die beste Lösung -- für mich!
Aber wie will man dann die Positionen der Werte rekonstruieren? Ja,
man braucht ein zweites Array, wo die Positionen drinne sind. Aber
wenn das Hauptarray 5 Millionen Einträge hat, muss man 10 Millionen
auf die Festplatte schreiben. Die Dateien werden mir einfach zu groß! :shock:
Mir fällt einfach nichts gutes ein
Ich hab mal ne kleine Herausforderung für alle:
Ich suche eine Möglichkeit, ein Array zu mischen,
und wieder zurück zu sortieren -- mit Hilfe der
Mathematik.
Also ein Array so richtig gut durchwürfeln, aber
halt berechenbar -- um es wieder zurück zu bekommen.
Folgendes Szenario:
===================
Ich habe ein Array, dass gemischt werden soll. Danach
wird es auf die Festplatte geschrieben. Nun soll es
irgendwann wieder geladen werden, und in seinen originalen
Zustand zurück finden...
Das muss alles gehen, ohne ein extra Array auf die Festplatte
zu schreiben!
Infos:
======
Zur Verfügung steht: Das Eingabearray in der Form int[] mit
sehr vielen Einträgen... geht in die Millionen. 8)
Dann ein Array mit festen Werten (byte[]). Das ist etwa 20
Einträge lang. Dieses Array muss auch benutzt werden.
Es kann auch später noch eindeutig einem großen Array zugeordnet
werden.
Das war es. Damit muss man auskommen. Man kann natürlich
alle normalen mathematischen Funktionen benutzen, wie cos,
sin, exp und so weiter...
Bedingungen:
============
Es sollte in endlicher Zeit zum Ergebnis führen. :wink: Also sagen wir
mal bis zu einer Sekunde für eine Millionen Einträge im Hauptarray!
So in der Art... darf also keine Minuten dauern...
Das Hauptarray soll aber nicht nur einfach um x Einträge
verschoben werden. Also jeden Eintrag um x Positionen verschieben.
Das ist zu einfach!
Und die Arrays dürfen auch nicht vergrößert werden.
Meine eigene Idee:
===================
Die beste Lösung geht wohl leider nicht:
Ich würde am liebsten alle Einträge im Hauptarray einfach nach dem
Wert sortieren. Die niedrigsten alle nach links, die höhsten weit nach
rechts.
Das wäre die beste Lösung -- für mich!
Aber wie will man dann die Positionen der Werte rekonstruieren? Ja,
man braucht ein zweites Array, wo die Positionen drinne sind. Aber
wenn das Hauptarray 5 Millionen Einträge hat, muss man 10 Millionen
auf die Festplatte schreiben. Die Dateien werden mir einfach zu groß! :shock:
Mir fällt einfach nichts gutes ein