algorithm generalization