In the design of algorithms, the greedy paradigm provides a powerful tool for solving efficiently
classical computational problems, within the framework of procedural languages. However,
expressing these algorithms within the declarative framework of logic-based languages has
proven a difficult research challenge. In this paper, we extend the framework of Datalog-like
languages to obtain simple declarative formulations for such problems, and propose
effective implementation techniques to ensure computational complexities comparable to
those of procedural formulations. These advances are achieved through the use of the choice
construct, extended with preference annotations to effect the selection of alternative stable-models
and nondeterministic fixpoints. We show that, with suitable storage structures, the
differential fixpoint computation of our programs matches the complexity of procedural
algorithms in classical search and optimization problems.