Estructura de datos Trie | Insertar y buscar

Estructura de datos Trie | Insertar y buscar

El Pruebe la estructura de datos es una estructura de datos en forma de árbol que se utiliza para almacenar un conjunto dinámico de cadenas. Se utiliza comúnmente para eficiente recuperación y almacenamiento de claves en un gran conjunto de datos. La estructura soporta operaciones como inserción , buscar , y supresión de claves, lo que la convierte en una herramienta valiosa en campos como la informática y la recuperación de información. En este artículo vamos a explorar inserción y búsqueda operación en la estructura de datos Trie.

Pruebe la estructura de datos

Pruebe la estructura de datos

Tabla de contenidos

A continuación se muestra la implementación del enfoque anterior:

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 el nodo para el carácter actual no existe // entonces crea un nuevo nodo TrieNode* newNode = new TrieNode();  // Mantenga la referencia para el // nodo recién creado.  NodoActual->NodoNiño[c - 'a'] = NuevoNodo;  } // Ahora, mueva el puntero del nodo actual al // nodo recién creado.  NodoActual = NodoActual->NodoNiño[c - 'a'];  } // Incrementa wordEndCount para el último // puntero currentNode, esto implica que hay una cadena que termina en // currentNode.  nodoactual->findepalabra = 1; } bool search_key(TrieNode* root, string& key) { // Inicializa el puntero del nodo actual // con el nodo raíz TrieNode* currentNode = root;  // Iterar a lo largo de la longitud de la cadena for (auto c: key) { // Comprobar si el nodo existe para el // carácter actual en Trie.  if (currentNode->childNode[c - 'a'] == NULL) { // La palabra dada no existe en Trie return false;  } // Mueve el puntero del NodoActual al // nodo ya existente para el carácter actual.  NodoActual = NodoActual->NodoNiño[c - 'a'];  } return (currentNode->wordEnd == verdadero); } // Código del controlador int main() { // Crea un nodo raíz para Trie TrieNode* root = new TrieNode();  // Almacena las cadenas que queremos insertar en el // vector Trie inputStrings = { 'y', 'hormiga', 'hacer', 'geek', 'papá', 'bola' };  // número de operaciones de inserción en Trie int n = inputStrings.size();  para (int i = 0; i < n; i++) {  insert_key(root, inputStrings[i]);  }  // Stores the strings that we want to search in the Trie  vector searchQueryStrings = { 'do', 'geek', 'bat' };  // número de operaciones de búsqueda en Trie int searchQueries = searchQueryStrings.size();  para (int i = 0; i < 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');  }  }  } } 
Pitón
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(cadena)); const searchQueryStrings = ['do', 'geek', 'bat']; // Busca cada cadena e imprime si se encuentra en el Trie searchQueryStrings.forEach((query) => { console.log(`Query String: ${query}`); if (trie.search(query)) { console.log('La cadena de consulta está presente en el Trie'); } else { console.log('La cadena de consulta no está presente en el Trie'); 

Producción
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 

Intenta eliminar
  • Mostrando contenido de Trie
  • Función de autocompletar usando Trie
  • Búsqueda de patrones usando un Trie de todos los sufijos
  • Problemas de práctica:

    • Salto mínimo de palabra
    • Filas únicas en una matriz binaria
    • Recuento de subcadenas distintas
    • Palabra alucinante
    • Ordenar una matriz de cadenas (o palabras) usando Trie