DSA

Tri par fusion simultanée dans la mémoire partagée
2026

Tri par fusion simultanée dans la mémoire partagée

Étant donné un nombre « n » et un n nombres, triez les nombres à l’aide du tri par fusion simultanée. (Indice : essayez d'utiliser les appels système shmget, shmat).Partie 1 : L'algorithme (COMMENT ?) Créez de manière récursive deux processus enfants, un pour la moitié gauche, un pour la moitié droite. Si le nombre d'éléments dans le tableau d'un processus est inférieur à 5, effectuez un tri par insertion. Le parent des deux enfants fusionne ensuite le résultat et revient au parent et ainsi de suite. Mais comment le rendre concurrent ?Partie 2 : La logique (POURQUOI ?) La partie importante de la solution à ce problème n'est pas algorithmique, mais consiste à expliquer les concepts de système d'exploitation et de noyau. Pour réaliser un tri simultané, nous avons besoin d’un moyen de faire fonctionner deux processus sur le même tableau en même temps. Pour faciliter les choses, Linux fournit de nombreux appels système via de simples points de terminaison API. Deux d'entre eux sont shmget() (pour l'allocation de mémoire partagée) et shmat() (pour les opérations de mémoire partagée). Nous créons un espace mémoire partagé entre le processus enfant que nous bifurquons. Chaque segment est divisé en enfants gauche et droit qui sont triés, la partie intéressante étant qu'ils travaillent simultanément ! shmget() demande au noyau d'attribuer une page partagée pour les deux processus. Pourquoi le fork() traditionnel ne fonctionne pas ? La réponse réside dans ce que fait réellement fork(). D'après la documentation, « fork() crée un nouveau processus en dupliquant le processus appelant ». Le processus enfant et le processus parent s'exécutent dans des espaces mémoire distincts. Au moment de fork(), les deux espaces mémoire ont le même contenu. Les écritures en mémoire, les modifications du descripteur de fichier (fd), etc., effectuées par l'un des processus n'affectent pas l'autre. Nous avons donc besoin d'un segment de mémoire partagée.

Trouver le coût d'ajustement minimum d'un tableau
2026

Trouver le coût d'ajustement minimum d'un tableau

Étant donné un tableau d'entiers positifs, remplacez chaque élément du tableau de telle sorte que la différence entre les éléments adjacents du tableau soit inférieure ou égale à une cible donnée. Nous devons minimiser le coût d’ajustement, c’est-à-dire la somme des différences entre les nouvelles et les anciennes valeurs. Nous devons essentiellement minimiser ?|A[i] - Anew[i]| où 0 ? je ? n-1, n est la taille de A[] et Anew[] est le tableau avec une différence adjacente inférieure ou égale à la cible. Supposons que tous les éléments du tableau soient inférieurs à la constante M = 100.

Réorganiser une liste donnée de telle sorte qu'elle consiste en une alternance d'éléments minimum et maximum
2026

Réorganiser une liste donnée de telle sorte qu'elle consiste en une alternance d'éléments minimum et maximum

Étant donné une liste d'entiers, réorganisez la liste de telle sorte qu'elle consiste en une alternance d'éléments minimum et maximum en utilisant uniquement des opérations de liste. Le premier élément de la liste doit être le minimum et le deuxième élément doit être le maximum de tous les éléments présents dans la liste. De même, le troisième élément sera le prochain élément minimum et le quatrième élément sera le prochain élément maximum et ainsi de suite. L'utilisation d'espace supplémentaire n'est pas autorisée. Exemples :

Cellules actives et inactives après k jours
2026

Cellules actives et inactives après k jours

Étant donné un tableau binaire de taille n où n > 3. Une valeur vraie (ou 1) dans le tableau signifie actif et faux (ou 0) signifie inactif. Étant donné un nombre k, la tâche consiste à trouver le nombre de cellules actives et inactives après k jours. Après chaque jour, le statut de la ième cellule devient actif si les cellules gauche et droite ne sont pas identiques et inactif si les cellules gauche et droite sont identiques (toutes deux 0 ou toutes deux 1).

Recherche par interpolation
2026

Recherche par interpolation

Étant donné un tableau trié de n valeurs uniformément distribuées arr[], écrivez une fonction pour rechercher un élément particulier x dans le tableau. La recherche linéaire trouve l'élément en un temps O(n), la recherche sautée prend un temps O(n) et la recherche binaire prend un temps O(log n). La recherche par interpolation est une amélioration par rapport à la recherche binaire pour les instances, où les valeurs d'un tableau trié sont uniformément distribuées. L'interpolation construit de nouveaux points de données dans la plage d'un ensemble discret de points de données connus. La recherche binaire va toujours à l'élément du milieu pour vérifier. D'un autre côté, la recherche par interpolation peut aller vers différents emplacements en fonction de la valeur de la clé recherchée. Par exemple, si la valeur de la clé est plus proche du dernier élément, la recherche par interpolation commencera probablement vers la fin. Pour trouver la position à rechercher, elle utilise la formule suivante.