  We study in detail the algebraic structures underlying quantum circuits
generated by CNOT gates. Our results allow us to propose polynomial-time
heuristics to reduce the number of gates used in a given CNOT circuit and we
also give algorithms to optimize this type of circuits in some particular
cases. Finally we show how to create some usefull entangled states when a CNOT
circuit acts on a fully factorized state.
