一定の作業スペースで任意のサイズと任意のベース変換を行う方法はありますか? つまり、範囲内の一連の数値を、1 対 1 のマッピングを使用して範囲内の一連の数値に変換するには(必須でn
はありませんが、望ましい) 辞書順を維持し、連続した結果を得るにはどうすればよいでしょうか?[1,m]
ceiling(n*log(m)/log(p))
[1,p]
パイプ関数として実行可能なソリューションに特に興味があります.eiは、RAMに保存できるよりも大きなデータセットを処理できます。
入力のサイズに比例する「作業スペース」を必要とする多くのソリューションを見つけましたが、一定の「作業スペース」を回避できるソリューションはまだありません。
シーケンシャル制約を削除しても違いはありますか? つまり、辞書順の連続した入力が非辞書順の出力になることを許可します。
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)
いくつかの考え:
これはうまくいくでしょうか?
streamBase n -> convert(
n
,lcm(n,p)
) -> convert(lcm(n,p)
,p
) -> streamBase p
(ここでlcm
は最小公倍数)