adaptive algorithms