Semidefinite Programming and its Applications