J'ai remarqué de très étranges utilisation de O(1) lors de la discussion des algorithmes impliquant hachage et les types de recherche, souvent dans le contexte de l'utilisation d'un dictionnaire de type fourni par le système de la langue, ou à l'aide du dictionnaire ou de hachage-tableau des types utilisés à l'aide du tableau de l'index de la notation.
Fondamentalement, O(1) signifie bornée par une constante de temps et (généralement) fixe de l'espace. Quelques jolies opérations fondamentales sont en O(1), bien que l'utilisation d'intermédiaire langues étrangères et VMs tend à déformer sa pensée (par exemple, comment fait-on à amortir le garbage collector et d'autres processus dynamiques sur ce qui serait autrement O(1) activités).
Mais en ignorant l'amortissement des latences, garbage collection, et ainsi de suite, je ne comprends toujours pas comment le saut à l'hypothèse que certaines techniques qui impliquent un certain type de recherche peut être O(1) sauf dans des conditions très spéciales.
Bien que j'ai remarqué cela avant, un exemple qui vient d'être montré à l' Pandincus question, "Bon" collection à utiliser pour obtenir des éléments en O(1) de temps en C# .NET?".
Comme je l'ai dit il, la seule collection que je connaisse qui offre O(1) accès garanti lié fixe lié tableau avec un index entier valeur. La présomption est que le tableau est mis en œuvre par certains de cartographie de la mémoire d'accès aléatoire qui utilise O(1) opérations pour localiser la cellule ayant l'indice.
Pour les collections qui implique une certaine forme de recherche pour déterminer l'emplacement d'un correspondant de la cellule pour un autre type d'indice (ou pour un tableau fragmenté avec index entier), la vie n'est pas si facile. En particulier, si il y a des collisons et la congestion est possible, l'accès n'est pas exactement O(1). Et si la collection est souple, on doit reconnaître et d'amortir le coût de l'extension de la structure sous-jacente (comme un arbre ou une table de hachage) pour lequel soulagement de la congestion (par exemple, la collision de l'incidence d'arbres ou de déséquilibre).
Je n'aurais jamais pensé à parler de ces flexible et dynamique des structures de O(1). Pourtant, je les vois offert comme O(1) des solutions sans identification des conditions qui doivent être maintenues pour avoir O(1) l'accès doit être assuré (ainsi que la constante d'être négligeable).
LA QUESTION: l'Ensemble de cette préparation est vraiment pour une question. Qu'est-ce que le laisser-aller autour de O(1) et pourquoi est-elle acceptée si aveuglément? Est-il reconnu que même O(1) peut être considérée comme indésirable gros, même si à peu près constante? Ou est O(1), il suffit de l'appropriation d'un calcul de complexité de la notion d'informel utiliser? Je suis perplexe.
Mise à JOUR: les Réponses et Les commentaires du point où j'étais décontracté sur la définition de O(1) moi-même, et j'ai réparé ça. Je suis toujours à la recherche de bonnes réponses, et une partie des commentaires, les threads sont plutôt plus intéressant que leurs réponses, dans quelques cas.