何年もの間、私はこれについて考えてきましたが、それを実装することができませんでした. 私は、入力で整数値 (たとえば 16 ビット) を受け入れ、出力で同じビットサイズのまったく異なる数を与えるが、すべての数値を「考慮に入れる」迅速で効率的な C 関数について話しています。実際のメモリを使用するのではなく、数学の魔法によって既に与えられています。申し訳ありませんが、英語は私の母国語ではありません。つまり、関数は 1 対 1 でランダムにマッピングする必要がありますが、重複はありません。
私が想像した可能なアプリケーションは、たとえば、画面上の古い写真をピクセルごとに新しい写真に置き換えるピクセルクロスフェードグラフィックルーチンの1つでした。座標はランダムに選択する必要があり、ピクセルが置き換えられると、再度アドレス指定しないでください (重複なし)。これはすべて、数学ベースの小さくて迅速かつ効率的な関数によって自然に行われます (メモリを使用してこれを実装するのは簡単ですが、それは私が望むものではありません)。
ランダムに見えないため、明らかに「ビットリバース」ソリューションは機能しません。たとえば、ビット 3 をビット 11 に交換するなどして、より多くの「カオス」を作成したり、一部のビットを反転させたりしても、見栄えがよくなかったので、純粋に数学的な、本当にランダムに見える関数を探していますおそらく少なくとも16ビットが可能で、できるだけ少ないメモリを使用します(事前に計算されたテーブルはありません。最終的に使用する最初のアプリケーションは、パブリックドメインのハードウェアとソフトウェアを使用して古いスタイルのゲームを作成するためのマイクロコントローラーシステムです) .
助けていただけますか?