A Primal-Dual Interior Point Algorithm for Linear Programming