We design algorithms from the most theoretical point of view, mathematically modelling the specific problem to be resolved. The algorithm is developed adapting itself to the computational demands of the problem, and adaptability requirements are studied, together with the efficiency requested by the customer with the sole purpose of granting a final quality product. Both the complexity and the scalability of the designed algorithms are deeply analysed in order to be able to apply, if desired, parallelisation techniques, such as OPENMP or MPI in the case clusters apply. In order to grant great performance and adaptability, the designed algorithms will be implemented in the language the customer requests.