Ich habe eine Datenstruktur, die unter anderem einen 24 Bit breiten Wert speichert. Ich habe viel dieser Objekte.Effizientes Mapping von 2^24 Werten auf einen 2^7 Index
Um die Speicherkosten zu minimieren, berechnete ich die 2^7 wichtigsten Werte aus den 2^24 möglichen Werten und speicherte sie in einem statischen Array. Daher muss ich nur einen 7-Bit-Index für dieses Array in meiner Datenstruktur speichern.
Das Problem ist: Ich bekomme diese 24-Bit-Werte und muss sie im laufenden Betrieb in meinen 7-Bit-Index umwandeln (keine Vorverarbeitung möglich). Die Berechnung ist im Grunde eine Suche, bei der einer von 2^7 Werten am besten passt. Offensichtlich braucht dies einige Zeit für eine große Anzahl von Objekten.
Eine naheliegende Lösung wäre, ein einfaches Mapping Array von Bytes mit der Länge 2^24 zu erstellen. Aber das würde 16 MB RAM benötigen. Zu viel.
Eine Beobachtung des 16 MB-Arrays: Im Durchschnitt sind 31 aufeinanderfolgende Werte gleich. Leider gibt es auch eine Anzahl von aufeinanderfolgenden Werten, die unterschiedlich sind.
Wie würden Sie diese Umwandlung von einem Wert von 24-Bit-Implementierung auf einen 7-Bit-Indices wie viel CPU und Speicher wie möglich zu speichern?
Worauf programmieren Sie, wo 16MB zu viel ist? Ein Telefon? –
@Steve, wenn 16MB nicht zu viel wären, würde er das überhaupt nicht machen :) –
@Karl: Wenn er * richtig * ist, dass 16MB zu viel ist, würde er das gar nicht erst machen . Wenn er sich irrte, würde er das tun :-) Deshalb ist das ein Kommentar, keine Antwort. Eigentlich ist meine Frage rhetorisch. Ich brauche keine Antwort, es ist nur so, dass Leute (einschließlich mir) unsere Einschränkungen nicht in Frage stellen, bis jemand anderes es tut. –