Le temps d'exécution de l'algorithme Knapsack est lié non seulement à la taille de l'entrée (n - le nombre d'articles) mais également à l'amplitude de l'entrée (W - la capacité du sac à dos) O (nW) qui est exponentielle dans sa façon représenté en ordinateur en binaire (2 ^ n). La complexité de calcul (c'est-à-dire comment le traitement est effectué à l'intérieur d'un ordinateur via des bits) ne concerne que la taille des entrées, pas leurs grandeurs / valeurs .
Ne tenez pas compte de la liste des valeurs / poids pendant un moment. Disons que nous avons une instance avec une capacité de sac à dos 2. W prendrait deux bits dans les données d'entrée. Nous allons maintenant augmenter la capacité du sac à dos à 4, en conservant le reste de l'entrée. Notre contribution n'a augmenté que d'un peu, mais la complexité du calcul a été multipliée par deux. Si nous augmentons la capacité à 1024, nous n'aurions que 10 bits d'entrée pour W au lieu de 2, mais la complexité a augmenté d'un facteur 512. La complexité temporelle croît exponentiellement dans la taille de W en représentation binaire (ou décimale) .
Un autre exemple simple qui m'a aidé à comprendre le concept pseudo-polynomial est l'algorithme de test de primalité naïve. Pour un nombre n donné, nous vérifions s'il est divisé également par chaque nombre entier dans la plage 2..√n, donc l'algorithme prend √ (n − 1) pas. Mais ici, n est la grandeur de l'entrée, pas sa taille.
Now The regular O(n) case
En revanche, la recherche d'un tableau pour un élément donné s'exécute en temps polynomial: O (n). Cela prend au plus n étapes et ici n est la taille de l'entrée (la longueur du tableau).
[ vois ici ]
Calcul des bits requis pour stocker un nombre décimal