Trier la structure des données | Insérer et rechercher

Trier la structure des données | Insérer et rechercher

Le Essayer la structure des données est une structure de données arborescente utilisée pour stocker un ensemble dynamique de chaînes. Il est couramment utilisé pour être efficace récupération et stockage de clés dans un grand ensemble de données. La structure soutient des opérations telles que insertion , recherche , et effacement de clés, ce qui en fait un outil précieux dans des domaines tels que l'informatique et la recherche d'informations. Dans cet article, nous allons explorer insertion et recherche opération dans la structure de données Trie.

Essayer la structure des données

Essayer la structure des données

Table des matières

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

C++
#include  using namespace std; struct TrieNode {  // pointer array for child nodes of each node  TrieNode* childNode[26];  // Used for indicating ending of string  bool wordEnd;  TrieNode()  {  // constructor  // initialize the wordEnd variable with false  // initialize every index of childNode array with  // NULL  wordEnd = false;  for (int i = 0; i  < 26; i++) {  childNode[i] = NULL;  }  } }; void insert_key(TrieNode* root, string& key) {  // Initialize the currentNode pointer  // with the root node  TrieNode* currentNode = root;  // Iterate across the length of the string  for (auto c : key) {  // Check if the node exist for the current  // character in the Trie.  if (currentNode->childNode[c - 'a'] == NULL) { // Si le nœud pour le caractère actuel n'existe pas // alors créez un nouveau nœud TrieNode* newNode = new TrieNode();  // Conserve la référence du nœud // nouvellement créé.  currentNode->childNode[c - 'a'] = newNode;  } // Maintenant, déplacez le pointeur du nœud actuel vers le nœud // nouvellement créé.  currentNode = currentNode->childNode[c - 'a'];  } // Incrémentez le wordEndCount pour le dernier pointeur // currentNode, cela implique qu'il y a une chaîne se terminant par // currentNode.  currentNode->wordEnd = 1 ; } bool search_key(TrieNode* root, string& key) { // Initialise le pointeur currentNode // avec le nœud racine TrieNode* currentNode = root;  // Itérer sur toute la longueur de la chaîne for (auto c : key) { // Vérifiez si le nœud existe pour le // caractère actuel dans le Trie.  if (currentNode->childNode[c - 'a'] == NULL) { // Le mot donné n'existe pas dans Trie return false;  } // Déplacez le pointeur currentNode vers le nœud // déjà existant pour le caractère actuel.  currentNode = currentNode->childNode[c - 'a'];  } return (currentNode->wordEnd == true); } // Code du pilote int main() { // Créer un nœud racine pour le Trie TrieNode* root = new TrieNode();  // Stocke les chaînes que nous voulons insérer dans le // vecteur Trie inputStrings = { 'et', 'ant', 'do', 'geek', 'papa', 'ball' } ;  // nombre d'opérations d'insertion dans le Trie int n = inputStrings.size();  pour (int je = 0; je < n; i++) {  insert_key(root, inputStrings[i]);  }  // Stores the strings that we want to search in the Trie  vector searchQueryStrings = { 'do', 'geek', 'bat' } ;  // nombre d'opérations de recherche dans le Trie int searchQueries = searchQueryStrings.size();  pour (int je = 0; je < searchQueries; i++) {  cout  < < 'Query String: '  < < searchQueryStrings[i]   < < '
';  if (search_key(root, searchQueryStrings[i])) {  // the queryString is present in the Trie  cout  < < 'The query string is present in the '  'Trie
';  }  else {  // the queryString is not present in the Trie  cout  < < 'The query string is not present in '  'the Trie
';  }  }  return 0; } 
Java
class TrieNode {  TrieNode[] childNode;  boolean wordEnd;  TrieNode()  {  childNode = new TrieNode[26];  wordEnd = false;  } } class Trie {  TrieNode root;  Trie() { root = new TrieNode(); }  // Function to insert a key into the Trie  void insert(String key)  {  TrieNode currentNode = root;  for (int i = 0; i  < key.length(); i++) {  int index = key.charAt(i) - 'a';  if (currentNode.childNode[index] == null) {  currentNode.childNode[index]  = new TrieNode();  }  currentNode = currentNode.childNode[index];  }  currentNode.wordEnd = true;  }  // Function to search for a key in the Trie  boolean search(String key)  {  TrieNode currentNode = root;  for (int i = 0; i  < key.length(); i++) {  int index = key.charAt(i) - 'a';  if (currentNode.childNode[index] == null) {  return false;  }  currentNode = currentNode.childNode[index];  }  return currentNode.wordEnd;  } } public class Main {  public static void main(String[] args)  {  Trie trie = new Trie();  String[] inputStrings  = { 'and', 'ant', 'do', 'geek', 'dad', 'ball' };  // Insert each string into the Trie  for (String str : inputStrings) {  trie.insert(str);  }  String[] searchQueryStrings  = { 'do', 'geek', 'bat' };  // Search for each string and print whether it is  // found in the Trie  for (String query : searchQueryStrings) {  System.out.println('Query String: ' + query);  if (trie.search(query)) {  System.out.println(  'The query string is present in the Trie');  }  else {  System.out.println(  'The query string is not present in the Trie');  }  }  } } 
Python
class TrieNode: def __init__(self): self.childNode = [None] * 26 self.wordEnd = False class Trie: def __init__(self): self.root = TrieNode() # Function to insert a key into the Trie def insert(self, key): currentNode = self.root for char in key: index = ord(char) - ord('a') if not currentNode.childNode[index]: currentNode.childNode[index] = TrieNode() currentNode = currentNode.childNode[index] currentNode.wordEnd = True # Function to search for a key in the Trie def search(self, key): currentNode = self.root for char in key: index = ord(char) - ord('a') if not currentNode.childNode[index]: return False currentNode = currentNode.childNode[index] return currentNode.wordEnd if __name__ == '__main__': trie = Trie() inputStrings = ['and', 'ant', 'do', 'geek', 'dad', 'ball'] # Insert each string into the Trie for word in inputStrings: trie.insert(word) searchQueryStrings = ['do', 'geek', 'bat'] # Search for each string and print whether it is found in the Trie for query in searchQueryStrings: print('Query String:', query) if trie.search(query): print('The query string is present in the Trie') else: print('The query string is not present in the Trie') 
Javascript
class TrieNode {  constructor() {  // Initialize the childNode array with 26 nulls  this.childNode = Array(26).fill(null);  // Initialize wordEnd to the false indicating that no word ends here yet  this.wordEnd = false;  } } class Trie {  constructor() {  // Initialize the root node of the Trie  this.root = new TrieNode();  }  // Function to insert a key into the Trie  insert(key) {  // Start from the root node  let currentNode = this.root;  for (let i = 0; i  < key.length; i++) {  const index = key.charCodeAt(i) - 'a'.charCodeAt(0);  if (currentNode.childNode[index] === null) {  currentNode.childNode[index] = new TrieNode();  }  // Move to the next node in the Trie  currentNode = currentNode.childNode[index];  }  // Mark the end of the word  currentNode.wordEnd = true;  }  // Function to search for a key in the Trie  search(key) {  // Start from the root node  let currentNode = this.root;  // Iterate through each character in the key  for (let i = 0; i  < key.length; i++) {  const index = key.charCodeAt(i) - 'a'.charCodeAt(0);  if (currentNode.childNode[index] === null) {  return false;  }  // Move to the next node in the Trie  currentNode = currentNode.childNode[index];  }  // Return true if the end of the word is marked otherwise false  return currentNode.wordEnd;  } } // Driver code const trie = new Trie(); const inputStrings = ['and', 'ant', 'do', 'geek', 'dad', 'ball']; // Insert each string into the Trie inputStrings.forEach((str) =>trie.insert(str)); const searchQueryStrings = ['do', 'geek', 'bat']; // Recherchez chaque chaîne et affichez si elle est trouvée dans le Trie searchQueryStrings.forEach((query) => { console.log(`Query String: ${query}`); if (trie.search(query)) { console.log('La chaîne de requête est présente dans le Trie'); } else { console.log('La chaîne de requête n'est pas présente dans le Trie' } }); 

Sortir
Query String: do The query string is present in the Trie Query String: geek The query string is present in the Trie Query String: bat The query string is not present in the Trie 

Essayer de supprimer
  • Affichage du contenu de Trie
  • Fonctionnalité de saisie semi-automatique à l'aide de Trie
  • Recherche de modèles à l'aide d'un essai de tous les suffixes
  • Problèmes de pratique :

    • Saut de mot minimum
    • Lignes uniques dans une matrice binaire
    • Nombre de sous-chaînes distinctes
    • Boggle de mots
    • Tri d'un tableau de chaînes (ou de mots) à l'aide de Trie