Polynomial root-finding algorithms