An algorithmic paradigm, algorithm design paradigm, algorithmic technique, or algorithmic strategy is a generic method or approach which underlies the design of a class of algorithms. It is an abstraction higher than the notion of an algorithm, just as an algorithm is an abstraction higher than a computer program. Examples of algorithmic paradigms include the greedy algorithm in optimization problems, dynamic programming, prune and search, and divide and conquer algorithms. More specialized algorithmic paradigms used in parameterized complexity include kernelization and iterative compression. In computational geometry, additional algorithmic paradigms include sweep line algorithms, rotating calipers, and randomized incremental construction.