  This paper focuses on kernelization algorithms for the fundamental Knapsack
problem. A kernelization algorithm (or kernel) is a polynomial-time reduction
from a problem onto itself, where the output size is bounded by a function of
some problem-specific parameter. Such algorithms provide a theoretical model
for data reduction and preprocessing and are central in the area of
parameterized complexity. In this way, a kernel for Knapsack for some parameter
$k$ reduces any instance of Knapsack to an equivalent instance of size at most
$f(k)$ in polynomial time, for some computable function $f(\cdot)$. When
$f(k)=k^{O(1)}$ then we call such a reduction a polynomial kernel.
  Our study focuses on two natural parameters for Knapsack: The number of
different item weights $w_{\#}$, and the number of different item profits
$p_{\#}$. Our main technical contribution is a proof showing that Knapsack does
not admit a polynomial kernel for any of these two parameters under standard
complexity-theoretic assumptions. Our proof discovers an elaborate application
of the standard kernelization lower bound framework, and develops along the way
novel ideas that should be useful for other problems as well. We complement our
lower bounds by showing the Knapsack admits a polynomial kernel for the
combined parameter $w_{\#}+p_{\#}$.
