Sequenz von Zahlen -> unique id
-
Hallo,
ich suche eine Möglichkeit aus einer Sequenz von Zahlen (Integern) eine eindeutige (wiederholbare) Id zu berechnen.Ich weiß das ich für den allgemeinen Fall für eine beliebige Sequenz von Zahlen a1, a2,...,an und Primzahlen p1, p2, ..., pn eine eindeutig Id über die Formal:
p1[h]a1[/h]* p2[h]a2[/h] * ... * pn[h]an[/h]
erhalten kann.
Den allgemeinen Fall brauche ich allerdings wohl nicht, da ich folgendes weiß:
1. Die Eingabesequenz ist aufsteigend sortiert
2. In der Sequenz kommen Zahlen nicht doppelt vor
3. Das Ergebnis muss nicht umkehrbar sein.
4. Keine Zahl in der Sequenz ist deutlich größer als 10000Was habe ich für Möglichkeiten?
Oder sollte ich das Ganze vergessen und lieber gleich einen String als Id verwenden?PS: Ich poste zwar im Mathematik-Forum, das Ganze ist aber schon ein Programmierproblem. Sprich: Die resultierenden Zahlen müssen sich noch in einem int-Datentyp darstellen lassen (<= 64-bit).
-
Bin nicht sicher ob ich dich verstanden habe ...
Wie viele Zahlen kann denn deine Sequenz maximal beinhalten? Ein Verfahren das eine Unique Id erzeugt kann das bei 64-Bit Zielwert natürlich nicht mit beliebig vielen Sequenzen.
Bei wenigen Sequenzen reicht ja evenutell schon sowas:Ergebnis = 0 Für jede Sequenz { Sequenznummer = Sequenznummer + 1 Ergebnis = Ergebnis + Zahl * Sequenznummer*10 }
-
hmmmm schrieb:
Wie viele Zahlen kann denn deine Sequenz maximal beinhalten?
Die maximale Länge einer Sequenz entspricht der größten Zahl die in einer Sequenz auftreten kann. Sprich: nicht deutlich größer als 10000.
-
hmmmm schrieb:
Bei wenigen Sequenzen reicht ja evenutell schon sowas:
Ergebnis = 0 Für jede Sequenz { Sequenznummer = Sequenznummer + 1 Ergebnis = Ergebnis + Zahl * Sequenznummer*10 }
Entweder missinterpretiere ich den Code oder aber sowas reicht nicht.
Bsp:
[1, 3, 7] -> 280
[28] -> 280
Ups.
-
Also in einem 64-bit integer passen nur recht wenige ids rein, es ist unmöglich für alle möglichen Sequenzen von zahlen (auch mit deinen einschränkungen) eine eindeutige id zu bekommen die als 64-bit int darstellbar ist.
-
Man könnte vielleicht eine Folge konstruieren
y_n = 1 wenn n in der Sequenz vorkommt, sonst y_n = 0,
und diese Bits dann bis zur letzten 1 abspeichern. Das könnte dann aber immer
noch gut 1 KB werden, um deine Sequenz abzuspeichern, es könnten aber auch nur
wenige Bits sein. Vielleicht könnte man diese Bit-Folge auch geeignet kompriemieren?Oder vielleicht auch ganz anders