A Concise and Practical Introduction to Programming Algorithms in Java (Undergraduate Topics in Computer Science)