algorithmic techniques