Feistel networks are another way to map your index from linear sequence to a pseudorandom permutation.

I was reading into it and came across your blog post. It's a good followup read.

It has better avalanching compared to indexing by `(i * prime) % n`, but at the tradeoff of `n` being restricted to powers of 2.