properties of algorithms