If applied to the Bell state in our example, we may write that as: Computational complexity and the tensor product The time complexity for multiplying two -matrices is at least if using a classical machine. Because the size of a gate that operates on qubits is it means that the time for simulating a step in a quantum circuit (by means of multiplying the gates) that operates on generic entangled states is For this reason it is believed to be intractable to simulate large entangled quantum systems using classical computers. Subsets of the gates, such as the Clifford gates, or the trivial case of circuits that only implement classical boolean functions (e.g. combinations of X, CNOT, Toffoli), can however be efficiently simulated on classical computers. The state vector of a quantum register with qubits is complex entries. Storing the probability amplitudes as a list of floating point values is not tractable for large . Unitary inversion of gates Because all quantum logical gates are reversible, any composition of multiple gates is also reversible. All products and tensor products (i.e. series and parallel combinations) of unitary matrices are also unitary matrices. This means that it is possible to construct an inverse of all algorithms and functions, as long as they contain only gates. Initialization, measurement, I/O and spontaneous decoherence are side effects in quantum computers. Gates however are purely functional and bijective. If is a unitary matrix, then and The dagger () denotes the conjugate transpose. It is also called the Hermitian adjoint. If a function is a product of gates, the unitary inverse of the function can be constructed: Because we have, after repeated application on itself Similarly if the function consists of two gates and in parallel, then and Gates that are their own unitary inverses are called Hermitian or self-adjoint operators. Some elementary gates such as the Hadamard (H) and the Pauli gates (I, X, Y, Z) are Hermitian operators, while others like the phase shift (S, T, P, CPhase) gates generally are not. For example, an algorithm for addition can be used for subtraction, if it is being "run in reverse", as its unitary inverse. The inverse quantum fourier transform is the unitary inverse. Unitary inverses can also be used for uncomputation. Programming languages for quantum computers, such as Microsoft's Q#, Bernhard Ömer's QCL, and IBM's Qiskit, contain function inversion as programming concepts. Measurement Measurement (sometimes called