Computational Topology: An Introduction