Top 30 des structures de données et des questions d'entretien sur les algorithmes [Pour les débutants et les expérimentés]

Publié: 2021-08-31

Les structures de données et les algorithmes sont parmi les sujets les plus importants dans le monde de l'informatique et de l'ingénierie. Si vous vous présentez à un entretien d'ingénierie logicielle, vous pouvez être sûr d'être confronté à une série de questions spécialement dédiées aux structures de données et aux algorithmes, tant ils sont cruciaux !

Les algorithmes sont au cœur de tout ce qui se passe en informatique et en science des données. De l'apprentissage automatique à l'IA en passant par la blockchain - toutes les technologies fonctionnent sur des algorithmes. Et les algorithmes ont besoin de structures de données pour fonctionner. Ainsi, la connaissance combinée des structures de données et des algorithmes peut vous aider à vous démarquer lors de votre entretien.

Cependant, le défi est que DSA est un domaine étendu. Ici, l'apprentissage ne s'arrête jamais et il y a toujours de nouveaux développements que vous devez comprendre. Bien qu'une mise à niveau continue soit obligatoire lorsqu'il s'agit de structures de données et d'algorithmes, nous examinerons aujourd'hui certains principes fondamentaux de DSA qui vous aideront à réussir les entretiens techniques.

Table des matières

Principales questions-réponses sur les structures de données et les algorithmes

  1. Que comprenez-vous des "structures de données" ?

Les structures de données peuvent être définies comme des techniques utilisées pour définir, stocker et accéder systématiquement aux données. Ils forment le composant le plus important de tout algorithme. Selon le type de Structures de Données, elles stockent différents types de données et sont accessibles de différentes manières. Pour qu'un algorithme renvoie un résultat, il doit opérer et manipuler un ensemble de structures de données de manière organisée et efficace pour arriver au résultat final.

  1. Comment faire la différence entre une structure de fichiers et une structure de données ?

Dans les structures de fichiers, les données sont stockées sur des disques conformément aux politiques de stockage de fichiers standard et ne sont pas compatibles avec les applications tierces externes. Dans les structures de données, en revanche, les données sont stockées à la fois sur le disque et dans la RAM dans des politiques de stockage personnalisées, et celles-ci sont hautement compatibles avec les applications externes.

  1. Quels sont les grands types de structures de données ?

Les structures de données peuvent être globalement divisées en deux catégories :

  • Linéaire : dans ce cas, tous les éléments sont stockés de manière séquentielle et la récupération s'effectue de manière linéaire. L'arrangement n'est pas hiérarchique et chaque élément a un successeur et un prédécesseur. Exemple – Tableaux, listes chaînées, piles, files d'attente, etc.
  • Non linéaire : Ici, le stockage ne se produit pas dans une séquence linéaire - c'est-à-dire que tous les éléments n'ont pas nécessairement un successeur et un prédécesseur. Au lieu de cela, les éléments des structures de données non linéaires sont connectés à deux éléments ou plus de manière non linéaire. Exemple – Arbres, Graphiques, Tas.

4. Quels sont les principaux domaines d'utilisation des structures de données ?

Les structures de données sont à peu près nécessaires dans tous les domaines informatiques auxquels vous pouvez penser, en particulier les algorithmes et l'optimisation des algorithmes. Voici quelques autres domaines où les structures de données sont largement utilisées :

  • Conception du système d'exploitation
  • Analyse numérique
  • Apprentissage automatique et IA
  • Conception et développement du compilateur
  • Gestion de base de données
  • Analyse lexicale
  • Programmation graphique
  • Algorithmes de recherche et de tri, et plus encore.
  1. Expliquez la structure de données de la pile et mentionnez ses domaines d'utilisation.

Stack est simplement une liste ordonnée qui ne permet l'insertion et la suppression qu'à partir de l'une des extrémités, connue sous le nom de « sommet ». Il s'agit d'une structure de données récursive qui a un pointeur vers ses éléments "supérieurs" qui nous permet de connaître l'élément le plus élevé de la pile. Basé sur la stratégie de récupération d'éléments, Stack est également connu sous le nom de Last-In-First-Out, puisque le dernier élément poussé dans la pile sera en haut et sera le premier à sortir. Voici quelques utilisations de la structure de données Stack :

  • Retour en arrière
  • Gestion de la mémoire
  • Retour de fonction et appel
  • Évaluation des expressions
  1. Quelles sont les opérations pouvant être effectuées sur une pile ?

La structure de données de pile prend en charge les trois opérations suivantes :

  • push () - pour insérer un élément dans la position supérieure de la pile.
  • pop() — pour faire sortir un élément du haut de la pile.
  • peek () - pour simplement vérifier l'élément présent en haut de la pile sans le faire sortir de la pile.
  1. Que comprenez-vous des expressions Postfix ?

Postfix Expression est une expression où les opérateurs suivent les opérandes. Ceci est extrêmement bénéfique en termes informatiques car il ne nécessite aucun regroupement de sous-expressions entre parenthèses ni même de considération de la priorité des opérateurs. L'expression a+b est simplement représentée par ab+ en suffixe.

  1. Comment les éléments de tableau 2D sont-ils stockés dans la mémoire ?

Les éléments d'un tableau 2D peuvent être stockés dans la mémoire de l'une des deux manières suivantes :

  • Row-Major : dans cette méthode, toutes les lignes du tableau sont d'abord stockées de manière contiguë dans la mémoire. Tout d'abord, la 1ère ligne est stockée complètement, puis la 2ème ligne, et ainsi de suite jusqu'à la dernière.
  • Column-Major : dans ce cas, toutes les colonnes du tableau sont stockées en permanence dans la mémoire. D'abord, la 1ère colonne est complètement stockée, puis la 2ème colonne, et ainsi de suite.
  1. Définir la structure des données de la liste liée.

Les listes liées sont des collections de nœuds - qui sont des objets stockés de manière aléatoire. Chaque nœud a deux éléments internes - un champ de données et un champ de lien. Le champ Données contient la valeur du nœud particulier, tandis que le champ Lien contient un pointeur vers le nœud suivant auquel celui-ci est lié. Selon la situation, une liste chaînée peut être considérée à la fois comme une structure de données linéaire et non linéaire.

  1. En quoi les listes chaînées sont-elles meilleures que les tableaux ?

Les listes chaînées sont meilleures que les tableaux de la manière suivante :

  • Les tailles de tableau sont fixées au moment de l'exécution et ne peuvent pas être modifiées ultérieurement, mais les listes liées peuvent être étendues en temps réel, selon les exigences.
  • Les listes chaînées ne sont pas stockées de manière contiguë dans la mémoire, par conséquent, elles sont beaucoup plus efficaces en mémoire que les tableaux stockés statiquement.
  • Le nombre d'éléments pouvant être stockés dans une liste chaînée est limité à l'espace mémoire disponible, tandis que le nombre d'éléments est lié à la taille du tableau.
  1. En langage de programmation C, quel pointeur utiliseriez-vous pour implémenter une liste chaînée hétérogène ?

Les listes liées hétérogènes, comme leur nom l'indique, contiennent différents types de données. Par conséquent, il n'est pas possible d'utiliser ici des pointeurs ordinaires. Ainsi, les pointeurs Void sont normalement utilisés dans un tel scénario car ils sont capables de pointer vers n'importe quel type de valeur.

  1. Qu'est-ce qu'une liste doublement chaînée ?

Comme son nom l'indique, une liste doublement liée est une liste liée qui a des nœuds liés à la fois aux nœuds suivants et précédents. Par conséquent, les nœuds de la liste doublement liée ont trois champs, et non deux :

  • Le champ de données
  • Pointeur suivant (pour pointer le nœud suivant)
  • Pointeur précédent (pour pointer le nœud précédent)
  1. Expliquez la structure de données de file d'attente avec certaines de ses applications.

Une file d'attente est une liste ordonnée qui permet l'insertion et la suppression d'éléments à partir non pas d'une mais de deux extrémités - appelées REAR et FRONT. L'insertion a lieu à partir de l'extrémité AVANT tandis que la suppression à partir de l'extrémité ARRIÈRE. En conséquence, la file d'attente est souvent appelée premier entré, premier sorti (FIFO). Voici quelques applications répandues des files d'attente en tant que structure de données :

  • Pour les listes d'attente pour les ressources partagées individuellement comme le processeur, l'imprimante, le disque, etc.
  • Pour le transfert asynchrone de données, par exemple fichier IO, sockets, pipes.
  • Comme tampons dans la plupart des applications de lecteur multimédia.
  • Dans les systèmes d'exploitation pour gérer les interruptions.
  1. Pouvez-vous énumérer certains inconvénients de l'implémentation de files d'attente à l'aide de tableaux ?

Il existe principalement deux inconvénients lors de l'implémentation de files d'attente avec des tableaux :

  • Mauvaise gestion de la mémoire, puisque les tableaux sont des structures de données statiques, l'implémentation de files d'attente avec des tableaux supprime de nombreuses fonctionnalités des files d'attente.
  • Problème de taille, car les tailles de tableau sont définies lors de la définition du tableau. Donc, si nous voulons ajouter plus d'éléments à notre file d'attente que la taille du tableau, ce ne sera pas possible.
  1. Quelles conditions doivent être remplies pour qu'un élément soit inséré dans une file d'attente circulaire ?

Voici quelques conditions pertinentes concernant l'insertion dans des files d'attente circulaires :

  • Si (rear + 1)%maxsize == front -> cela signifie que la file d'attente est pleine -> plus d'insertion possible.
  • Si arrière != max – 1, la valeur de arrière est incrémentée jusqu'à maxsize et une nouvelle valeur sera insérée à l'extrémité arrière.
  • Si front != 0 et rear == max -1 -> cela signifie que la file d'attente n'est pas pleine. Ainsi, la valeur de arrière est définie sur 0 et un nouvel élément est inséré à l'extrémité arrière de la file d'attente circulaire.

16. Qu'est-ce qu'un retrait de la file d'attente ?

Double-Ended Queue ou deque est un ensemble ordonné d'éléments qui facilite l'insertion et la suppression des deux extrémités - arrière et avant. En conséquence, cela est encore plus flexible que la structure de données de la file d'attente.

  1. Définissez la structure des données arborescentes et répertoriez certains types d'arbres.

Tree est une structure de données non linéaire et récursive qui contient divers nœuds. Un nœud particulier est désigné comme la racine de l'arbre d'où émergent tous les autres nœuds. Hormis la racine, tous les autres nœuds sont appelés nœuds enfants. Il existe globalement les types suivants de structures de données arborescentes :

  • Arbres généraux
  • Arbres binaires
  • Arbres de recherche binaires
  • Les forêts
  • Arbre d'expressions
  • Arbre du tournoi
  1. Comment fonctionne le tri à bulles ?

Bubble Sort est l'un des algorithmes de tri les plus utilisés et est utilisé avec des tableaux en comparant des éléments adjacents et en échangeant leurs positions en fonction de leurs valeurs. C'est ce qu'on appelle le tri par bulles parce que la visualisation de son fonctionnement ressemble à des bulles flottant au-dessus de l'eau et à des entités plus grandes qui coulent.

Lire : Structures de données en C & Comment utiliser ?

  1. Quel est l'algorithme de tri le plus rapide disponible ?

Il existe de nombreux algorithmes de tri différents, comme le tri par fusion, le tri rapide, le tri à bulles, etc. Parmi ceux-ci, nous ne pouvons pas choisir un algorithme spécifique qui soit objectivement le plus rapide car leurs performances varient considérablement en fonction des données d'entrée, de la réaction après que l'algorithme a traité les données et de la manière dont elles sont stockées.

  1. Que sont les arbres binaires ?

Les arbres binaires sont des types d'arbres spéciaux dans lesquels chaque nœud peut avoir AU PLUS deux enfants. Pour faciliter les choses, les arbres binaires sont généralement divisés en trois ensembles disjoints - nœud racine, sous-arbre droit et sous-arbre gauche.

  1. Comment les arbres AVL peuvent-ils être utilisés dans diverses opérations par rapport à BST ?

Les arbres AVL sont des arbres équilibrés en hauteur, ils ne permettent donc pas à l'arbre d'être biaisé d'un côté. Le temps pris pour toutes les opérations effectuées sur BST de hauteur h est O(h). Cependant, cela peut devenir O(n) dans le pire des cas - où la BST devient biaisée. AVL aide à éliminer cette limitation en limitant la hauteur de l'arbre. Ce faisant, il impose une limite supérieure à toutes les opérations pour être au maximum de O (log n) où n = nombre de nœuds.

  1. Quelles sont les propriétés d'un B-Tree ?

Un B-Tree d'ordre m contient les propriétés suivantes :

  • Toutes les propriétés d'un arbre M-way.
  • Chaque nœud du B_tree aura un maximum de m enfants.
  • Chaque nœud, à l'exception de la racine et de la feuille, aura au moins m / 2 enfants.
  • Le nœud racine doit avoir au moins 2 nœuds enfants.
  • Tous les nœuds feuilles doivent se trouver au même niveau horizontal.
  1. Que comprenez-vous de la structure de données de graphe ?

La structure de données du graphe (G) peut être définie comme un ensemble ordonné G(V,E) où V représente l'ensemble des sommets et E les arêtes qui forment les connexions. Fondamentalement, un graphe peut être considéré comme un arbre cyclique où les nœuds peuvent maintenir des relations complexes entre eux et pas seulement des relations parent-enfant.

  1. Faites la distinction entre cycle, chemin et circuit en vous référant à la structure de données du graphe.

Les différences entre le cycle, le chemin et le circuit sont les suivantes :

  • Un patch est un ordre de sommets voisins reliés par des arêtes sans aucune restriction.
  • Un cycle est un chemin fermé dans lequel le sommet initial est le même que le sommet final. Dans un cycle, aucune verte particulière ne peut être visitée deux fois.
  • Un circuit, comme un cycle, est un chemin fermé dont le sommet initial est le même que le sommet final. Cependant, un sommet particulier dans un circuit peut être visité plus d'une fois.
  1. Comment fonctionne l'algorithme de Kruskal ?

L'algorithme de Kruskal considère le graphe comme une forêt et chacun de ses nœuds comme un arbre individuel. On dit qu'un arbre se connecte à un autre arbre si et seulement s'il a le moindre coût parmi toutes les options, et qu'il ne viole aucune propriété d'un minimum Spanning Tree (MST).

En relation: Arbre binaire dans la structure de données

  1. Comment l'algorithme de Prim trouve-t-il l'arbre couvrant ?

L'algorithme de Prim fonctionne en considérant les nœuds comme des arbres uniques. Ensuite, il continue d'ajouter de nouveaux nœuds à l'arbre couvrant à partir du graphe donné qui doit être converti dans l'arbre couvrant requis.

  1. Qu'est-ce qu'un arbre couvrant minimum (MST) ?

Les MST, dans les graphes pondérés, sont des arbres qui ont un poids minimum, mais qui s'étendent sur tous les sommets.

  1. Qu'est-ce qu'une fonction récursive ?

Par définition, une fonction récursive se rappelle ou appelle directement une fonction qui l'appelle. Chaque fonction récursive a des critères de base, après quoi la fonction cesse de s'appeler.

  1. Qu'est-ce que la technique de recherche par interpolation ?

La technique de recherche par interpolation est une modification de la méthode de recherche binaire. L'algorithme de recherche d'interpolation fonctionne sur la position de sondage des valeurs souhaitées.

  1. Qu'est-ce que le hachage ?

Le hachage est une technique très utile utilisée pour convertir une plage de paires clé-valeur en index d'un tableau. Les tables de hachage sont pratiques lors de la création d'un stockage de données associatif dans lequel l'index de données peut facilement être trouvé en fournissant simplement sa paire clé-valeur !

En conclusion

Les structures de données sont vraiment à la base de tout ce qui se passe en informatique. Même les applications les plus complexes de l'informatique, c'est-à-dire la science des données, l'apprentissage automatique, l'intelligence artificielle, l'IoT, sont toutes construites sur des structures de données et des algorithmes.

Donc, si vous êtes un débutant cherchant à faire carrière dans l'un des domaines de la nouvelle ère, il vous est recommandé de commencer par maîtriser les structures de données et les algorithmes. Sinon, vous pouvez également consulter notre cours sur le programme Executive PG en science des données, conçu pour les débutants. Apprenez à partir de zéro et devenez un expert en science des données. Inscrivez-vous dès aujourd'hui !

Les entretiens pour quel poste posent généralement des questions sur la structure des données et l'algorithme ?

Si vous postulez pour un rôle de développement logiciel ou d'ingénierie, vos compétences DSA seront certainement vérifiées. En dehors de cela, si vous postulez à des emplois en science des données ou si vous souhaitez vous aventurer dans l'apprentissage automatique, vous devrez connaître DSA.

Dois-je connaître la programmation pour comprendre la structure des données et les algorithmes ?

Non pas forcément. DSA est principalement abstrait, et il s'agit de mathématiques, de représentations et de flux de ce qui se passe dans les coulisses de toute application ou programme. Bien que l'expérience de la programmation vous soit utile lorsque vous implémentez des algorithmes, ce n'est en aucun cas une condition préalable à l'étude de DSA.

Les Structures de Données sont-elles toujours statiques ?

Non, les structures de données peuvent être à la fois dynamiques et statiques, selon la façon dont l'allocation de mémoire fonctionne pour elles. Par exemple, les tableaux sont des structures de données statiques puisqu'un lot entier de mémoire contiguë leur est alloué lorsqu'ils sont définis. D'autre part, les listes chaînées sont des structures de données dynamiques car elles n'ont pas de taille fixe et le nombre de nœuds peut augmenter en fonction des besoins du programmeur.