Submodular functions and optimization