# Algorithms

##### Simulated Annealing

Simmulated Annealing is a method for solving unconstrained and bound-constrained optimization problems. The method models the physical process of heating a material and then slowly lowering the temperature to decrease defects, thus minimizing the system energy.

##### Polynomial time approximation scheme algorithm for KP (PTAS-KP)

A PTAS is an algorithm which takes an instance of an optimization problem and a parameter ε > 0 and, in polynomial time, produces a solution that is within a factor 1 + ε of being optimal [wikipedia]. This is an implementation to find solutions to the Knapsack Problem.

##### DP solution to the knapsack problem

Dynamic programming (DP) is a fancy name for using divide-and-conquer technique with a table. In this snippet, DP is used to solve the Knapsack Problem.

##### Conjugate Gradient method for matrices

The conjugate gradient method is an algorithm for the numerical solution of particular systems of linear equations, namely those whose matrix is symmetric and positive-definite [wikipedia].

##### Java Animation Framework

This is a simple animation framework made for Java. The framework supports both frame skips and thread yielding, and is a great conceptual starting point.

##### Preconditioned Conjugate Gradients method for matrices

A preconditioned version of the Conjugate Gradients method in order to improve the convergence rate. This implementation uses an Incomplete Cholesky factorization of the A matrix as the preconditioner.