Continuous knapsack problem
In theoretical computer science, the continuous knapsack problem (also known as the fractional knapsack problem) is an algorithmic problem in combinatorial optimization in which the goal is to fill a container (the "knapsack") with fractional amounts of different materials chosen to maximize the value of the selected materials. It resembles the classic knapsack problem, in which the items to be placed in the container are indivisible; however, the continuous knapsack problem may be solved in polynomial time whereas the classic knapsack problem is NP-hard. It is a classic example of how a seemingly small change in  the formulation of a problem can have a large impact on its computational complexity. Problem definition. An instance of either the continuous or classic knapsack problems may be specified by the numerical capacity of the knapsack, together with a collection of materials, each of which has two numbers associated with it: the weight of material that is available to be selected and the total value of that material. The goal is to choose an amount of each material, subject to the capacity constraint formula_1 and maximizing the total benefit formula_2 In the classic knapsack problem, each of the amounts must  be either zero or ; the continuous knapsack problem differs by allowing to range continuously from zero to . Some formulations of this problem rescale the variables to be in the range from 0 to 1. In this case the capacity constraint becomes formula_3 and the goal is to maximize the total benefit formula_2 Solution technique. The continuous knapsack problem may be solved by a greedy algorithm, first published in 1957 by George Dantzig, that considers the materials in sorted order by their values per unit weight. For each material, the amount "x" is chosen to be as large as possible: Because  of the need to sort the materials, this algorithm takes time "O"("n" log "n") on inputs with "n" materials. However, by adapting an algorithm for finding weighted medians, it is possible to solve the problem in time "O"("n").