Existe-t-il un dans l'espace de travail constant pour effectuer une taille arbitraire et des conversions de base arbitraires. C'est-à-dire, pour convertir une séquence de n
nombres dans la plage [1,m]
à une séquence de ceiling(n*log(m)/log(p))
nombres dans la plage [1,p]
en utilisant un 1-à-1 mappage que (de préférence mais pas nécessairement) conservateurs ordre lexicographique et donne des résultats séquentiels?Conversion de base de nombre en tant qu'opération de flux
Je suis particulièrement intéressé par les solutions qui sont viables en tant que fonction de tuyau, e.i. sont capables de gérer un plus grand ensemble de données que ce qui peut être stocké dans la RAM.
J'ai trouvé un certain nombre de solutions qui nécessitent un «espace de travail» proportionnel à la taille de l'entrée mais aucun qui puisse encore s'en sortir avec un «espace de travail» constant.
La suppression de la contrainte séquentielle peut-elle faire une différence? C'est: permettre lexicographique entrées séquentielles résultat en sorties non séquentielles lexicographique:
F(1,2,6,4,3,7,8) -> (5,6,3,2,1,3,5,2,4,3)
F(1,2,6,4,3,7,9) -> (5,6,3,2,1,3,5,2,4,5)
quelques réflexions:
pourrait ce travail?
StreamBase n -> convert (
n
,lcm(n,p)
) -> convert (lcm(n,p)
,p
) -> StreamBase p
(où lcm
est plus petit commun multiple)
Je ne pense pas que vous pouvez jeter le deuxième terme dans la somme, parce que le plancher (un + b) ≠ étage (a) + étage (b) en général. Si le premier terme est juste une minuscule fraction inférieure à un entier, la valeur du second terme est très significative. –
Je pense avoir (à tort) énoncé les conditions de sélection de z. Conceptuellement, ce que j'essaie de faire est d'utiliser une plage pour le nombre entrant 'a'. Lorsque nous obtenons chaque chiffre, la plage que 'a' peut être plus étroite. Une fois qu'il est suffisamment étroit, nous pouvons savoir avec certitude (dans toute base que nous aimons) quelle est la séquence initiale (si nous convertissons 0x4b ?? en décimal, même en manquant les 2 derniers chiffres, nous savons que les premiers chiffres décimaux sont 19, puisque le nombre ne peut être que entre 19200 et 19455. Je vais réexaminer ce que j'ai fait et voir si je peux l'exprimer correctement dans une édition – Wuggy
Ce processus me rappelle le décompresseur arithmétique (décodage de gamme?) - ce qui pourrait être suffisant pour montrer que n'importe quel flux peut être divisé en chiffres uniquement Je pense qu'il existe un cas de type pathalogique dans lequel vous ne pouvez pas sortir le chiffre suivant tant que vous n'avez pas vu tous les flux entrants – caffiend