Pourquoi des tailles d'entrée plus grandes impliquent des instances plus difficiles?


12

Ci-dessous, supposons que nous travaillons avec une machine de Turing à bande infinie.

En expliquant la notion de complexité temporelle à quelqu'un et pourquoi elle est mesurée par rapport à la taille d'entrée d'une instance, je suis tombé sur la revendication suivante:

[..] Par exemple, il est naturel que vous ayez besoin de plus d'étapes pour multiplier deux entiers avec 100 000 bits que, disons, multiplier deux entiers avec 3 bits.

L'affirmation est convaincante, mais en quelque sorte agitant la main. Dans tous les algorithmes que j'ai rencontrés, plus la taille d'entrée est grande, plus vous avez besoin d'étapes. En termes plus précis, la complexité temporelle est une fonction augmentant de façon monotone de la taille d'entrée.

Est-il vrai que la complexité temporelle est toujours une fonction croissante de la taille d'entrée? Si oui, pourquoi est-ce le cas? Y a-t-il une preuve de cela au-delà de la main agitant?


"Directement proportionnel" a une signification mathématique spécifique qui signifie, essentiellement un temps linéaire. En d'autres termes, si votre entrée a une taille , si le temps est directement proportionnel, l'algorithme s'exécute dans le temps . J'imagine que ce n'est pas ce que vous voulez dire, car de nombreux algorithmes ne fonctionnent pas en temps linéaire, c'est-à-dire le tri. Pouvez-vous expliquer davantage? c nncn
SamM

Vous demandez donc un algorithme qui s'exécute en temps ? O ( 1 ) signifie que l'algorithme s'exécute en même temps quelle que soit la taille d'entrée, o ( 1 ) signifie qu'il s'exécute plus rapidement à mesure que l'entrée augmente. Je ne peux pas penser à celui qui s'exécute à ce moment-là du haut de ma tête, mais la notation est assez courante car un algorithme s'exécutera souvent dans quelque chose comme O ( n 2 ) + o ( 1 ) - en d'autres termes , il faut O ( n 2 )o(1)O(1)o(1)O(n2)+o(1)O(n2)temps, et il y a d'autres termes qui deviennent plus petits à mesure que l'entrée augmente.
SamM

Bonne question. Qu'en est-il du contre-exemple de calcul des facteurs premiers de pour certains grands c (ce n'est qu'une fonction croissante pour n c )? @Sam Notez qu'une fonction croissante indique que le temps doit être décroissant à un certain point le long de la ligne réelle (c'est-à-dire f ( b ) < f ( a ) , a < b ). c/ncncf(b)<f(a),a<b
Casey Kuball

@ Darthfett J'ai peur de ne pas suivre. Toutes les fonctions croissantes ne diminuent pas à un moment donné le long de la ligne réelle.
SamM

@Jennifer Oui, je comprends, cela a du sens. Je recommanderais d'utiliser le terme car il a le sens que vous recherchez. Et je voudrais souligner à nouveau que la proportionnalité directe implique la linéarité; Je vois où vous voulez en venir, mais cela peut être déroutant pour ceux qui lisent la question pour la première fois. o(1)
SamM

Réponses:


12

Est-il vrai que la complexité temporelle est toujours une fonction croissante de la taille d'entrée? Si oui, pourquoi est-ce le cas?

nnn2n

Si vous parlez de la complexité d'un problème , la réponse est toujours non. La complexité du test de primalité est beaucoup plus faible pour les nombres pairs que pour les nombres impairs.


4

Est-il vrai que la complexité temporelle est toujours une fonction croissante de la taille d'entrée? Si oui, pourquoi est-ce le cas? Y a-t-il une preuve de cela au-delà de la main agitant?

nnn/cc


n=1n>1


Les algorithmes sublinéaires sont probablement intéressants pour vous, qui ne lisent pas l'intégralité de l'entrée. Voir par exemple http://www.dcs.warwick.ac.uk/~czumaj/PUBLICATIONS/DRAFTS/Sublinear-time-Survey-BEATCS.pdf .


O(logn)o(1)

@Sam: Désolé, je n'ai pas vu votre commentaire avant ma modification (ajout d'algorithmes sublinéaires).
Christopher

plutôt l'inverse; Je n'ai pas vu votre modification avant d'ajouter mon commentaire. Je le supprimerais mais la seconde moitié s'applique toujours et un lien supplémentaire ne peut pas nuire à l'OP
SamM

1
f(x)=0

1

(N,)Ω(1)

Cela dit, les temps d'exécution moyens peuvent contenir des composants oscillants, par exemple Mergesort .


Je ne vois pas comment cette réponse est liée à la question.
A.Schulz

@ A.Schulz Cela donne une preuve pour la question principale "Est-ce que la complexité temporelle est toujours une fonction croissante dans la taille d'entrée?", Lisant "croissant" comme "non décroissant", c'est-à-dire pas nécessairement strictement croissant.
Raphael

1

@ A.Schulz: Pourtant, mon interprétation semble être ce qui intéresse Jennifer .
Raphael
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.