Похоже, что часть замедления с 0 === Min
, использованного в вопросе, является вмешательством в автокомпиляцию Map
. Разделение этих шагов дает почти двукратное улучшение:
r = Range@9;
p = Permutations@r;
Min@# === 0 & /@ (BitXor[r, #] & /@ p); // Timing
{0.296, Null}
Если я принимаю результат как (0 | 1) и если я обрабатываю список как один, я могу использовать это:
Unitize[Times @@ BitXor[r, #] & /@ p]; // Timing
{0.156, Null}