入力として4バイトを受け取り、これに対して可逆線形変換を実行し、それを4バイトとして返す関数を作成する必要があります。
しかし、待ってください。それだけではありません。分散型である必要があるため、入力の1バイトを変更すると、4つの出力バイトすべてに影響するはずです。
問題:
- 乗算を使用する場合、ストレージを介してバイトとして変更された後は元に戻せません(そしてバイトとして保持する必要があります)
- 私が加算を使用する場合、それは可逆的で分配的ではありえません
1つの解決策:256 ^ 4の長さのバイトの配列を作成し、それを1対1のマッピングで埋めることができますが、これは機能しますが、問題があります。これは、サイズ256^8のグラフを検索する必要があることを意味します。すべての値について空き番号を検索する必要があります(分散度は64 * 64バイト配列に基づいてsudoランダムである必要があることに注意してください)。このソリューションには、8GBのRAMが必要になるというマイナーな問題もあり(笑)、このソリューションは意味がありません。
入力のドメインは出力のドメインと同じです。すべての入力には一意の出力があります。つまり、1対1のマッピングです。「1つの解決策」で述べたように、これは非常に可能であり、より小さなドメイン(256のみ)が問題となっているときにその方法を使用しました。事実、数値が大きくなるにつれて、その方法は非常に非効率的になり、デルタの欠陥がO(n^5)
あり、オメガはO(n^8)
メモリ使用量において同様の不自由さを持っていました。
私はそれを行うための賢い方法があるかどうか疑問に思いました。一言で言えば、それはドメインの1対1のマッピングです(4バイトまたは256 ^ 4)。ああ、そしてN + 1のような単純なものは使用できないので、sudoランダムであるが逆変換のために再作成可能なバイト値の64*64配列をキーオフする必要があります。