Applied Algebra, Algebraic Algorithms and Error-Correcting Codes