Suppose une compréhension de la notation Big O. Les exemples sont en JavaScript. Références d'informations "Cracking the Coding Interview" par Gayle Laakmann McDowell
Dans certains langages comme JavaScript ou Python, les tableaux sont automatiquement redimensionnables, ce qui signifie qu'ils grandissent à mesure que vous ajoutez des éléments. Dans d'autres langages comme Java, les tableaux ont des longueurs fixes, ce qui signifie que la taille est définie lorsque vous initialisez le tableau. Ces tableaux qui grandissent automatiquement sont appelés tableaux dynamiques.
En Java, une ArrayList est une structure de données de type tableau qui offre un redimensionnement dynamique tout en fournissant O(1) accéder. Lorsque le tableau est plein, sa taille double. Chaque doublement prend Sur) temps, mais cela arrive si rarement que son temps d'insertion amorti est toujours O(1) .
Parmi les différents langages de programmation, le nom de cette structure de données ainsi que son facteur de redimensionnement (qui est de 2 en Java) varient. Le facteur de redimensionnement détermine la taille d'un tableau qui sera redimensionné.
Lors du redimensionnement, en supposant que le facteur de redimensionnement est de 2, nous pouvons observer que nous passons à un tableau de taille N en doublant le tableau précédent (qui est la moitié de N). De plus, nous devons également copier N/2 éléments à ce nouveau tableau.
Si nous additionnons le nombre d'éléments que nous copions de l'augmentation de capacité finale à la première augmentation de capacité : 2n 4n 8 n 16n ... 2 1 ce qui équivaut à un peu moins de N. Par conséquent, l’insertion de N éléments prend environ Sur) travail au total. Chaque insertion est O(1) en moyenne, même si certaines insertions prennent Sur) temps dans le pire des cas.
Les tableaux dynamiques en JavaScript ont généralement plusieurs méthodes de base, chacune avec des complexités temporelles différentes :
get(i) : Cette méthode récupère l'élément à l'index i.
set(i, n) : cette méthode définit l'élément à l'index i sur n.
pushback(n) : Cette méthode ajoute l'élément n à la fin du tableau.
popback() : Cette méthode supprime le dernier élément du tableau.
resize() : Cette méthode double la capacité du tableau et copie tous les éléments dans le nouveau tableau.
getSize() : Cette méthode renvoie le nombre d'éléments dans le tableau.
getCapacity() : Cette méthode renvoie la capacité actuelle du tableau.
class DynamicArray { // size is # of filled slots while capacity is total slots in array constructor(capacity) { this.capacity = capacity; this.arr = new Array(this.capacity); this.size = 0; } // O(1) get(i) { if (i = this.size) return undefined; return this.arr[i]; } // O(1) set(i, n) { if (i = this.size) return undefined; this.arr[i] = n; } // O(1) amortized pushback(n) { if (this.size === this.capacity) { this.resize(); } this.arr[this.size] = n; this.size ; } // O(1) popback() { if (this.size === 0) return undefined; this.size--; let temp = this.arr[this.size]; this.arr[this.size] = undefined; return temp; } // O(n) resize() { this.capacity *= 2; let newArr = new Array(this.capacity); for (let i = 0; iConclusion
Les baies dynamiques constituent une structure de données puissante qui combine la flexibilité d'un stockage redimensionnable avec l'efficacité d'un accès en temps constant. J'espère que cela t'aides!
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3