# Scheduling Algorithms

A **scheduling algorithm** is a method for solving the scheduling problem.

* Note: don’t confuse scheduling algorithm (the process/method) with schedule (the result).

Classification of scheduling algorithms:

* Preemptive vs non-preemptive.
* Static vs dynamic (priorities).
* Off-line vs on-line.
* Optimal vs sub-optimal.
* With strict guarantees vs best effort.

## A short note on temporal complexity

Measurement of the **growth** of the execution time of an algorithm as a function of the problem size ( e.g. the number of elements of a vector, the number of tasks of a real-time system).

Expressed via the _O()_ operator (big O notation).

_O()_ arithmetic, _n_=problem dimension, _k_=constant.

* ![](https://3011170443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxBNeQZTqLnbb3C3JTlRu%2Fuploads%2F5qrKxy9piaRxpiIojRLZ%2Fa.png?alt=media\&token=cf1478dc-eac4-4b37-847a-53544ec62664)

<figure><img src="https://3011170443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxBNeQZTqLnbb3C3JTlRu%2Fuploads%2FSrhUR068KBCSBrPDQglN%2Fa.png?alt=media&#x26;token=543eaf6b-4622-4e3d-b92f-2cb938b5f5e7" alt=""><figcaption></figcaption></figure>
