Program Analysis Techniques For Algorithmic Complexity And Relational Properties