Structures de données et algorithmes

Des méthodes de tri dont la suite d'étapes de comparaison-échange est fixée d'avance (réseaux de tri), comme le tri bitonique, sont parfois utilisées pour trier sur du matériel parallèle comme les GPU. Pourquoi ?

  1. AElles effectuent O(n) comparaisons, moins que la borne inférieure O(n log n) des tris par comparaison
  2. BCe sont des tris stables, qui conservent l'ordre d'origine des éléments de clés égales
  3. CLes paires d'éléments comparées et échangées sont fixées à l'avance, indépendamment des valeurs des données, si bien que de nombreux threads peuvent exécuter les mêmes étapes en même temps, avec des branchements uniformes
Afficher la réponse et l'explication

Réponse : C. Les paires d'éléments comparées et échangées sont fixées à l'avance, indépendamment des valeurs des données, si bien que de nombreux threads peuvent exécuter les mêmes étapes en même temps, avec des branchements uniformes

Dans le tri bitonique, les paires comparées à chaque étape ne dépendent que de leurs indices, et toutes les opérations de comparaison-échange d'une même étape peuvent s'exécuter en même temps. n = 2ᵏ données sont triées en k(k+1)/2 étapes : 16 données demandent 10 étapes et 80 comparaisons au total, et 1024 données 55 étapes et 28 160 comparaisons. Le nombre total de comparaisons est en O(n log² n), plus que pour le tri rapide et les algorithmes similaires, mais comme les étapes ne dépendent pas des données, les dispositifs comme les GPU, où de nombreux threads exécutent les mêmes instructions, les exécutent efficacement, sans branchements divergents. Aucune méthode qui trie uniquement par comparaisons ne peut faire moins de O(n log n) comparaisons, et le tri bitonique n'est en général pas stable non plus.

S'entraîner sur ce thème Retour au thème

Autres questions sur Structures de données et algorithmes

  1. Pour un tableau de n éléments, quelle est la complexité temporelle d'un traitement qui compare une seule fois chaque paire d'éléments distincts (une double boucle qui compare l'élément i à tous les éléments situés après lui, en faisant avancer i d'un cran à chaque fois) ?
  2. Un programme de complexité temporelle O(n²) met 0,5 seconde pour 1000 données. Combien de temps mettra-t-il environ pour 4000 données ?
  3. Une recherche linéaire compare un à un, depuis le début, les éléments d'un tableau de 100 valeurs distinctes pour trouver une valeur cible. Si la cible se trouve toujours dans le tableau et a la même probabilité d'être à n'importe quelle position, quel est le nombre moyen de comparaisons ?
  4. Par rapport à un tableau, quelle description d'une liste chaînée (liste dont chaque élément contient un pointeur vers l'élément suivant) est correcte ?
  5. Sur une pile vide, on effectue dans cet ordre les opérations push 1, push 2, pop, push 3, push 4, pop, pop. Dans quel ordre les valeurs sont-elles retirées par pop ?