16ビット整数に順列を格納して適用する必要があります。私が思いついた最善の解決策は、各4ビットは、i番目のビットの新しい位置に対応する64ビットの整数として格納順列であり、アプリケーションは次のようになり:高速ビット順列
int16 permute(int16 bits, int64 perm)
{
int16 result = 0;
for(int i = 0; i < 16; ++i)
result |= ((bits >> i) & 1) * (1 << int((perm >> (i*4))&0xf));
return result;
}
のより高速な方法がありますこれを行う?ありがとうございました。
少し広い文脈を提供できれば助かります。たとえば、多くの異なるビットで同じ順列を実行する必要がある場合(ルックアップテーブルを準備することもできます)、同じ順列を複数回順番に適用する必要があります(この場合、サイクル分解を使用できます)。 –
一般に、私は順列(最大9階乗)のリストを持ち、それぞれが512個の整数のシーケンス(各整数ごとに1回)に適用されます。 –
あなたはあなたのプログラムから512回まで9つの要因出力を持っていますか? –