La classe Python a six exigences énumérées ci-dessous. Seuls les termes audacieux strong> doivent être lus comme des exigences. P>
Ce qui suit est laissé ici pour des raisons historiques (aidez curieux et prouve que des recherches ont été menées). P>
Après avoir examiné la bibliothèque standard de Python (spécifiquement la section sur les types de données), je n'ai toujours pas trouvé de classe qui répond aux exigences des exigences d'une table de fragmentation. Mise en œuvre d'une solution inefficace utilisant des listes serait triviale, mais la recherche d'une classe qui fonctionne bien serait bien plus souhaitable. Dans une simulation de mémoire croissante sans limite supérieure, une telle classe pourrait conserver des index de cellules vides (supprimées) et maintenir les niveaux de fragmentation vers le bas. Le module Le candidat final qui n'a pas réussi à satisfaire pleinement les exigences et est apparu le moins prometteur était le module Est-ce que quelqu'un connaît-il d'une classe ou d'une structure de données dans Python que collections.deque code> est proche de ce qui est requis, mais cela ne prend pas en charge la conservation des données contenues dans elle. Il fournit: p>
bisect code> peut aider: p>
tableau [-1] code> à peek à la dernière valeur forte> dans le tableau. LI>
ol>
HASPQ CODE>. Tout en soutenant ce qui ressemblait à des insertions efficaces et à assurer que
matry [0] code> était la plus petite valeur, le tableau n'est pas toujours dans un état entièrement trié. Rien d'autre n'a été trouvé aussi utile. P>
3 Réponses :
Vos exigences semblent être:
len code> li>
- ordre trié li>
- PEEK AT DERNIÈRE VALEUR LI>
ol>
pour lequel vous pouvez utiliser un deque code> avec une méthode personnalisée insert code> qui tourne la dqueque, ajoute à une extrémité et se détache. P> >>> from collections import deque
>>> import bisect
>>> class FunkyDeque(deque):
... def _insert(self, index, value):
... self.rotate(-index)
... self.appendleft(value)
... self.rotate(index)
...
... def insert(self, value):
... self._insert(bisect.bisect_left(self, value), value)
...
... def __init__(self, iterable):
... super(FunkyDeque, self).__init__(sorted(iterable))
...
>>> foo = FunkyDeque([3,2,1])
>>> foo
deque([1, 2, 3])
>>> foo.insert(2.5)
>>> foo
deque([1, 2, 2.5, 3])
Eh bien, il nécessite également O (1) (ou près de O (1)) pour l'insertion dans l'ordre. La dentque avec toute la rotation fait l'opération O (n), n étant la longueur de la dentelle.
Beaucoup merci à Katrielaalex CODE> pour fournir l'inspiration qui a conduit à la classe Python suivante:
Si vous le pouviez - pourriez-vous jeter un coup d'œil aux questions Q3, Q4 de mon message [ Stackoverflow.com/questions/4295806/... et dites-moi si vous utilisez FastTable est une réponse à Q3, Q4?
Pour Peek (), pourquoi ne pas utiliser file d'attente [0] code> ou
file d'attente [-1] code> comme suggéré dans les docs? L'accès indexé est O (1) aux deux extrémités (mais ralentit vers O (n) au milieu) - docs.python.org/2/library/collections.html#collections.deque .
@Milochen c'est une bonne question! Merci d'avoir posé la question. Vérifiez la version révisée pour voir si vous le souhaitez mieux.
C'est un arbre B +. P>
Quelles 6 exigences? "Ajout d'efficacité sur de chaque côté i>" et "Gardez un tableau dans la commande triée pendant l'insertion" sont contradictoires.
C'est pourquoi je cherche quelque chose qui s'approche b> aux exigences.
Je suppose que la performance O (1) pour que l'APPENCE n'est que si c'est le min / max?
Il n'y a pas d'exigence pour ajoute, seules les insertions triées. Je pense qu'un type d'arbre binaire trié est requis pour la solution.
"1. Appendez-vous efficace ... de chaque côté ... avec O (1) performance." n'est pas une exigence?
Non, seuls les termes audacieux sont des exigences. Je disais simplement ce que
collections.deque code> est capable de faire. C'est pourquoi POP des deux côtés B> est mentionné directement par la suite.
Le texte audacieux
o (1) performance code> n'est pas une exigence significative. O (1) pour quoi? Veuillez ajouter une liste d'exigences claires et succinctes que nous n'avons pas à plisser les yeux dans un texte non apparenté et devinez. Google ne sait pas quelle "table de fragmentation" est, et moi non plus.
Vous n'avez pas besoin de savoir quelle est une table de fragmentation. Cependant, j'utiliserais la structure de données décrite ci-dessus pour mon but d'une table de fragmentation de mémoire de mémoire i>. Ce que cela signifie est spécifique à mon objectif et a été prévu dans le but d'être suffisant pour le curieux. Les gens n'ont pas besoin de demander: "Qu'est-ce que tu essayes de faire?"
Je n'ai pas demandé ce que vous utilisez et je m'en fiche. Est-ce que cela est censé être une justification de refus de clarifier la liste des exigences, ou avez-vous simplement ignoré les 80% des premiers% de ce que j'ai dit?
S'il vous plaît, pardonnez-moi d'ignorer les 80% de ce que vous avez dit. C'était faux de moi. Je pensais que les lecteurs associent facilement
O (1) la préformance code> comme une exigence pour autant d'opérations que possible (spécifiquement insertion, apparaissant, jumelage et longueur de longueur). Je suis devenu de plus en plus agacé contre les gens de sorte que cela demande pourquoi quelqu'un veut faire quelque chose plutôt simplement répondre à la question (si possible sans avoir à connaître la raison). J'essayais d'être courtois à curieux en indiquant ce que la structure doit être utilisée, mais ne voulait plus offrir d'explication des raisons.
Très souvent "qu'est-ce que tu essayes de faire" est une façon courte et polie de dire "Votre question me conduit à soupçonner que vous allez sur votre problème de mauvaise manière; veuillez décrire le problème d'origine plutôt que le coin que vous avez peint vous-même dans."