trial-and-error algorithms