私が取り組んでいる圧縮の問題を次のように減らしました。
入力として、浮動小数点値の 2 つの長さ n ベクトルが与えられます。
float64 L1, L2, ..., Ln;
float64 U1, U2, ..., Un;
そのようなすべての私のために
0.0 <= Li <= Ui <= 1.0
(ちなみに n が大きい: ~10^9)
このアルゴリズムは、L と U を入力として受け取り、それらを使用してプログラムを生成します。
生成されたプログラムを実行すると、長さ n のベクトル X が出力されます。
float64 X1, X2, ..., Xn;
そのようなすべての私のために:
L1 <= Xi <= Ui
生成されたプログラムは、これらの境界に適合する任意の X を出力できます。
たとえば、生成されたプログラムは、単純に L を配列として格納し、それを出力することができます。(これには、L を格納するために 64n ビットのスペースが必要であり、プログラムがそれを出力するために少し余分に必要になることに注意してください)
目標は、与えられた L と U で、生成されたプログラム (データを含む) をできるだけ小さくすることです。
たとえば、L のすべての要素が 0.3 未満であり、U のすべての要素が 0.4 より大きい場合、生成されたプログラムは次のようになります。
for i in 1 to n
output 0.35
これは小さいでしょう。
これに取り組むための戦略、アルゴリズム、またはアーキテクチャを提案できる人はいますか?