Travail à domicile sur les structures de données de la semaine 4 de Jean

1. Supposons qu’un tableau d’entiers dynamiques a avec des indices commençant à 0 a 1000 éléments et la ligne de code a [1000] = a [5] est exécutée. Combien de valeurs de tableau doivent être déplacées d’un emplacement mémoire à un autre pour terminer cette instruction d’affectation?

Une seule valeur de tableau doit être déplacée pour terminer cette affectation.

2. La mémoire peut être libérée lorsqu’un tableau dynamique se réduit. Quels avantages ou inconvénients cela pourrait-il avoir?

Si un tableau dynamique se réduit, il utilisera toujours toute la mémoire allouée à l’origine, puis la mémoire inutilisée est renvoyée dans la banque de mémoire pour une utilisation ultérieure. Les tableaux dynamiques dans Ruby semblent excellents car vous n’avez pas vraiment à vous soucier de l’allocation de mémoire et la mémoire peut toujours être étendue pour les tableaux. C’est génial pour le programmeur mais nécessite plus de travail pour l’ordinateur et peut être coûteux si votre utilisation de la mémoire devient incontrôlable.

3. Pour utiliser un tableau statique, des données doivent être enregistrées sur l’emplacement de base du tableau, la taille des éléments (pour l’indexation) et le nombre d’éléments dans le tableau (pour vérifier que l’indexation est dans les limites). Quelles informations doivent être enregistrées pour utiliser un tableau dynamique?

Les tailles de tableau dynamique sont établies au moment de l’exécution, donc la taille initiale du tableau est considérée comme la base de l’allocation de mémoire à mesure qu’elle se développe ou se réduit.

4. Énoncez une formule pour déterminer à quelle distance de l’emplacement de base d’un tableau Ruby se trouve un élément avec l’index i lorsque i est un nombre négatif.

(b +1) – (- i (-m))

Où b est le total des éléments du tableau, i est l’élément dont vous souhaitez trouver l’emplacement, m est la taille de l’élément du tableau. Dans un tableau de 20 éléments, voici un exemple:

(20 + 1) – (-3 (-1)) = 18

tableau [-3] est à 18 emplacements de l’emplacement de base d’un tableau de 20 éléments.

5. Donnez un exemple de référence de tableau Ruby qui provoquera une erreur d’indexation lors de l’exécution.

a = [1,2,3,4,5]

a [-8] ( cela retournera nil, ce n’est pas dans les limites du tableau)

6. Supposons que l’affectation Ruby a = (1..100) .to_a soit exécutée. Quelles sont les valeurs des expressions Ruby suivantes?

(a) a [5..10]

= & gt; [6, 7, 8, 9, 10, 11]

(b) a [5… 10]

= & gt; [6, 7, 8, 9, 10]

(c) a [5, 4]

= & gt; [6, 7, 8, 9]

(d) a [-5, 4]

= & gt; [96, 97, 98, 99]

(e) a [100..105]

= & gt; []

(f) a [5 ..- 5]

= & gt; [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80 , 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96]

(g) a [0, 3] + a [-3, 3]

= & gt; [1, 2, 3, 98, 99, 100]

7. Supposons que les instructions Ruby suivantes soient exécutées dans l’ordre. Quelle est la valeur du tableau a après chaque instruction?

(a) a = Array.new (5, 0)

= & gt; [0, 0, 0, 0, 0]

(b) a [1..2] = []

= & gt; [0, 0, 0]

(c) a [10] = 10

= & gt; [0, 0, 0, nul, nul, nul, nul, nul, nul, nul, nul, 10]

(d) a [3, 7] = [1,2,3,4,5,6,7]

= & gt; [0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 10]

(e) a [0, 2] = 5

= & gt; [5, 0, 1, 2, 3, 4, 5, 6, 7, 10]

(f) a [0, 2] = 6, 7

= & gt; [6, 7, 1, 2, 3, 4, 5, 6, 7, 10]

(g) a [0 ..- 2] = (1..3) .to_a

= & gt; [1, 2, 3, 10]