  In the near future, the $5^{th}$ generation (5G) wireless systems will be
established. They will consist of an integration of different techniques,
including distributed antenna systems and massive multiple-input
multiple-output systems, and the overall performance will highly depend on the
channel coding techniques employed. Due to the nature of future wireless
networks, space--time codes are no longer merely an object of choice, but will
often appear naturally in the communications setting. However, as the involved
communication devices often exhibit a modest computational power, the
complexity of the codes to be utilised should be reasonably low for possible
practical implementation.
  Fast-decodable codes enjoy reduced complexity of maximum-likelihood (ML)
decoding due to a smart inner structure allowing for parallelisation in the ML
search. The complexity reductions considered in this chapter are entirely owing
to the algebraic structure of the considered codes, and could be further
improved by employing non-ML decoding methods, however yielding suboptimal
performance.
  The aim of this chapter is twofold. First, we provide a tutorial introduction
to space--time coding and study powerful algebraic tools for their design and
construction. Secondly, we revisit algebraic techniques used for reducing the
worst-case decoding complexity of both single-user and multiuser space-time
codes, alongside with general code families and illustrative examples.
