- 数据结构与算法
- DSA - 主页
- DSA - 概述
- DSA - 环境设置
- 数据结构
- DSA - 数据结构基础知识
- DSA - 数据结构和类型
- DSA - 数组数据结构
- 链表
- DSA - 链表基础知识
- DSA - 双向链表
- DSA - 循环链表
- 堆栈和队列
- DSA - 堆栈
- DSA - 表达式解析
- DSA-队列
- 图数据结构
- DSA - 图数据结构
- DSA-深度优先遍历
- DSA-广度优先遍历
- DSA——生成树
- 树数据结构
- DSA - 树数据结构
- DSA - 树遍历
- DSA - 二叉搜索树
- DSA - AVL 树
- DSA - 红黑树
- DSA - B 树
- DSA - B+ 树
- DSA - 八字树
- DSA - 尝试
- DSA-堆
- 递归
- DSA - 递归基础知识
- DSA - 河内塔
- DSA - 斐波那契数列
- DSA 有用资源
- DSA - 问题与解答
- DSA - 快速指南
- DSA - 有用的资源
- DSA - 讨论
数据结构和算法 - 尝试
trie 是一种多路搜索树,它基本上用于从一个字符串或一组字符串中检索特定的键。它以有序有效的方式存储数据,因为它使用指向字母表中每个字母的指针。
trie 数据结构基于字符串的公共前缀工作。考虑到集合中存在的字符串数量,根节点可以具有任意数量的节点。除了指向其子节点的指针之外,trie 的根不包含任何值。
trie 数据结构分为三种类型 -
标准尝试
压缩尝试
后缀尝试
trie 的实际应用包括自动更正、文本预测、情感分析和数据科学。
尝试中的基本操作
trie 数据结构还执行与树数据结构相同的操作。他们是 -
插入
删除
搜索
插入
trie 中的插入操作是一种简单的方法。trie 中的根不保存任何值,插入从根的直接子节点开始,这些子节点充当其子节点的键。然而,我们观察到 trie 中的每个节点代表输入字符串中的单个字符。因此,字符被逐个添加到尝试中,而特里中的链接充当指向下一级节点的指针。
例子
//C code for insertion operation of tries algorithm
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define ALPHABET_SIZE 26
struct TrieNode {
struct TrieNode* children[ALPHABET_SIZE];
bool isEndOfWord;
};
struct TrieNode* createNode() {
struct TrieNode* node = (struct TrieNode*)malloc(sizeof(struct TrieNode));
node->isEndOfWord = false;
for (int i = 0; i < ALPHABET_SIZE; i++) {
node->children[i] = NULL;
}
return node;
}
void insert(struct TrieNode* root, char* word) {
struct TrieNode* curr = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = word[i] - 'a';
if (curr->children[index] == NULL) {
curr->children[index] = createNode();
}
curr = curr->children[index];
}
curr->isEndOfWord = true;
}
bool search(struct TrieNode* root, char* word) {
struct TrieNode* curr = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = word[i] - 'a';
if (curr->children[index] == NULL) {
return false;
}
curr = curr->children[index];
}
return (curr != NULL && curr->isEndOfWord);
}
bool startsWith(struct TrieNode* root, char* prefix) {
struct TrieNode* curr = root;
for (int i = 0; prefix[i] != '\0'; i++) {
int index = prefix[i] - 'a';
if (curr->children[index] == NULL) {
return false;
}
curr = curr->children[index];
}
return true;
}
int main() {
struct TrieNode* root = createNode();
//inserting the elements
insert(root, "Lamborghini");
insert(root, "Mercedes-Benz");
insert(root, "Land Rover");
insert(root, "Maruti Suzuki");
//printing the elements
printf("Inserted values are: \n");
printf("Lamborghini\n");
printf( "Mercedes-Benz\n");
printf( "Land Rover\n");
printf( "Maruti Suzuki");
return 0;
}
输出
Inserted values are: Lamborghini Mercedes-Benz Land Rover Maruti Suzuki
// C++ code for Insertion operation of tries algorithm
#include <iostream>
#include <unordered_map>
using namespace std;
class TrieNode
{
public:
unordered_map<char, TrieNode*> children;
bool isEndOfWord;
TrieNode()
{
isEndOfWord = false;
}
};
class Trie
{
private:
TrieNode* root;
public:
Trie()
{
root = new TrieNode();
}
void insert(string word)
{
TrieNode* curr = root;
for (char ch : word) {
if (curr->children.find(ch) == curr->children.end()) {
curr->children[ch] = new TrieNode();
}
curr = curr->children[ch];
}
curr->isEndOfWord = true;
}
bool search(string word)
{
TrieNode* curr = root;
for (char ch : word) {
if (curr->children.find(ch) == curr->children.end()) {
return false;
}
curr = curr->children[ch];
}
return curr->isEndOfWord;
}
bool startsWith(string prefix)
{
TrieNode* curr = root;
for (char ch : prefix) {
if (curr->children.find(ch) == curr->children.end()) {
return false;
}
curr = curr->children[ch];
}
return true;
}
};
int main()
{
Trie car;
//inserting the elements
car.insert("Lamborghini");
car.insert("Mercedes-Benz");
car.insert("Land Rover");
car.insert("Maruti Suzuki");
//printing the elmenents
printf("Inserted values are: \n");
cout << "Lamborghini" << endl;
cout <<"Mercedes-Benz"<< endl;
cout <<"Land Rover" << endl;
cout << "Maruti Suzuki" << endl;
return 0;
}
输出
Inserted values are: Lamborghini Mercedes-Benz Land Rover Maruti Suzuki
//Java Code for insertion operation of tries Algorithm
import java.util.HashMap;
import java.util.Map;
class TrieNode {
Map<Character, TrieNode> children;
boolean isEndOfWord;
TrieNode() {
children = new HashMap<>();
isEndOfWord = false;
}
}
class Trie {
private TrieNode root;
Trie() {
root = new TrieNode();
}
void insert(String word) {
TrieNode curr = root;
for (char ch : word.toCharArray()) {
curr.children.putIfAbsent(ch, new TrieNode());
curr = curr.children.get(ch);
}
curr.isEndOfWord = true;
}
boolean search(String word) {
TrieNode curr = root;
for (char ch : word.toCharArray()) {
if (!curr.children.containsKey(ch)) {
return false;
}
curr = curr.children.get(ch);
}
return curr.isEndOfWord;
}
boolean startsWith(String prefix) {
TrieNode curr = root;
for (char ch : prefix.toCharArray()) {
if (!curr.children.containsKey(ch)) {
return false;
}
curr = curr.children.get(ch);
}
return true;
}
}
public class Main {
public static void main(String[] args) {
Trie car = new Trie();
//Inserting the elements
car.insert("Lamborghini");
car.insert("Mercedes-Benz");
car.insert("Land Rover");
car.insert("Maruti Suzuki");
//Printing the elements
System.out.println("Inserted values are: ");
System.out.println("Lamborghini");
System.out.println("Mercedes-Benz");
System.out.println("Land Rover");
System.out.println("Maruti Suzuki");
}
}
输出
Inserted values are: Lamborghini Mercedes-Benz Land Rover Maruti Suzuki
#Python Code for insertion operation of tries Algorithm
class TrieNode:
def __init__(self):
self.children = {}
self.isEndOfWord = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
curr = self.root
for ch in word:
if ch not in curr.children:
curr.children[ch] = TrieNode()
curr = curr.children[ch]
curr.isEndOfWord = True
def search(self, word):
curr = self.root
for ch in word:
if ch not in curr.children:
return False
curr = curr.children[ch]
return curr.isEndOfWord
def startsWith(self, prefix):
curr = self.root
for ch in prefix:
if ch not in curr.children:
return False
curr = curr.children[ch]
return True
if __name__ == '__main__':
car = Trie()
#inserting the elements
car.insert("Lamborghini")
car.insert("Mercedes-Benz")
car.insert("Land Rover")
car.insert("Maruti Suzuki")
#printing the elements
print("Inserted values are: ")
print("Lamborghini")
print("Mercedes-Benz")
print("Land Rover")
print("Maruti Suzuki")
输出
Inserted values are: Lamborghini Mercedes-Benz Land Rover Maruti Suzuki
删除
trie 中的删除操作是使用自下而上的方法执行的。在 trie 中搜索该元素,如果找到则将其删除。但是,在执行删除操作时需要记住一些特殊情况。
情况 1 - 密钥是唯一的 - 在这种情况下,整个密钥路径将从节点中删除。(唯一键表明没有其他路径从一条路径分支出来)。
情况 2 - 键不唯一 - 叶节点已更新。例如,如果要删除的键是see但它是另一个键seethe的前缀;我们删除 see 并将 t、h 和 e 的布尔值更改为 false。
情况 3 - 要删除的键已经有一个前缀 - 删除前缀之前的值并且前缀保留在树中。例如,如果要删除的键是heart但存在另一个键he;所以我们删除 a、r 和 t,直到只剩下他。
例子
//C code for Deletion Operation of tries Algorithm
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//Define size 26
#define ALPHABET_SIZE 26
struct TrieNode {
struct TrieNode* children[ALPHABET_SIZE];
bool isEndOfWord;
};
struct TrieNode* createNode() {
struct TrieNode* node = (struct TrieNode*)malloc(sizeof(struct TrieNode));
node->isEndOfWord = false;
for (int i = 0; i < ALPHABET_SIZE; i++) {
node->children[i] = NULL;
}
return node;
}
void insert(struct TrieNode* root, char* word) {
struct TrieNode* curr = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = word[i] - 'a';
if (curr->children[index] == NULL) {
curr->children[index] = createNode();
}
curr = curr->children[index];
}
curr->isEndOfWord = true;
}
bool search(struct TrieNode* root, char* word) {
struct TrieNode* curr = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = word[i] - 'a';
if (curr->children[index] == NULL) {
return false;
}
curr = curr->children[index];
}
return (curr != NULL && curr->isEndOfWord);
}
bool startsWith(struct TrieNode* root, char* prefix) {
struct TrieNode* curr = root;
for (int i = 0; prefix[i] != '\0'; i++) {
int index = prefix[i] - 'a';
if (curr->children[index] == NULL) {
return false;
}
curr = curr->children[index];
}
return true;
}
bool deleteWord(struct TrieNode* root, char* word) {
struct TrieNode* curr = root;
struct TrieNode* parent = NULL;
int index;
for (int i = 0; word[i] != '\0'; i++) {
index = word[i] - 'a';
if (curr->children[index] == NULL) {
return false; // Word does not exist in the Trie
}
parent = curr;
curr = curr->children[index];
}
if (!curr->isEndOfWord) {
return false; // Word does not exist in the Trie
}
curr->isEndOfWord = false; // Mark as deleted
if (parent != NULL) {
parent->children[index] = NULL; // Remove the child node
}
return true;
}
int main() {
struct TrieNode* root = createNode();
//Inserting the elements
insert(root, "lamborghini");
insert(root, "mercedes-benz");
insert(root, "land rover");
insert(root, "maruti suzuki");
//Before Deletion
printf("Before Deletion\n");
printf("%d\n", search(root, "lamborghini")); // Output: 1 (true)
printf("%d\n", search(root, "mercedes-benz")); // Output: 1 (true)
printf("%d\n", search(root, "land rover")); // Output: 1 (true)
printf("%d\n", search(root, "maruti suzuki")); // Output: 1 (true)
//Deleting the elements
deleteWord(root, "lamborghini");
deleteWord(root, "land rover");
//After Deletion
printf("After Deletion\n");
printf("%d\n", search(root, "lamborghini")); // Output: 0 (false)
printf("%d\n", search(root, "mercedes-benz")); // Output: 1 (true)
printf("%d\n", search(root, "land rover")); // Output: 0 (false)
printf("%d\n", search(root, "maruti suzuki")); // Output: 1 (true)
return 0;
}
输出
Before Deletion 1 1 1 1 After Deletion 0 1 0 1
//C++ code for Deletion operation of tries algorithm
#include <iostream>
#include <unordered_map>
using namespace std;
class TrieNode {
public:
unordered_map<char, TrieNode*> children;
bool isEndOfWord;
TrieNode() {
isEndOfWord = false;
}
};
class Trie {
private:
TrieNode* root;
public:
Trie() {
root = new TrieNode();
}
void insert(string word) {
TrieNode* curr = root;
for (char ch : word) {
if (curr->children.find(ch) == curr->children.end()) {
curr->children[ch] = new TrieNode();
}
curr = curr->children[ch];
}
curr->isEndOfWord = true;
}
bool search(string word) {
TrieNode* curr = root;
for (char ch : word) {
if (curr->children.find(ch) == curr->children.end()) {
return false;
}
curr = curr->children[ch];
}
return curr->isEndOfWord;
}
bool startsWith(string prefix) {
TrieNode* curr = root;
for (char ch : prefix) {
if (curr->children.find(ch) == curr->children.end()) {
return false;
}
curr = curr->children[ch];
}
return true;
}
bool deleteWord(string word) {
return deleteHelper(root, word, 0);
}
private:
bool deleteHelper(TrieNode* curr, string word, int index) {
if (index == word.length()) {
if (!curr->isEndOfWord) {
return false; // Word does not exist in the Trie
}
curr->isEndOfWord = false; // Mark as deleted
return curr->children.empty(); // Return true if no more children
}
char ch = word[index];
if (curr->children.find(ch) == curr->children.end()) {
return false; // Word does not exist in the Trie
}
TrieNode* child = curr->children[ch];
bool shouldDeleteChild = deleteHelper(child, word, index + 1);
if (shouldDeleteChild) {
curr->children.erase(ch); // Remove the child node if necessary
return curr->children.empty(); // Return true if no more children
}
return false;
}
};
int main() {
Trie car;
//inserting the elemnets
car.insert("Lamborghini");
car.insert("Mercedes-Benz");
car.insert("Land Rover");
car.insert("Maruti Suzuki");
//Before Deletion
cout << "Before Deletion" << endl;
cout << car.search("Lamborghini") << endl; // Output: 1 (true)
cout << car.search("Mercedes-Benz") << endl; // Output: 1 (true)
cout << car.search("Land Rover") << endl; // Output: 1 (true)
cout << car.search("Maruti Suzuki") << endl; // Output: 1 (true)
//Deleting elements using deletion operation
car.deleteWord("Lamborghini");
car.deleteWord("Land Rover");
//After Deletion
cout << "After Deletion" << endl;
cout << car.search("Lamborghini") << endl; // Output: 0 (false)
cout << car.search("Mercedes-Benz") << endl; // Output: 1 (true)
cout << car.search("Land Rover") << endl; // Output: 0 (false)
cout << car.search("Maruti Suzuki") << endl; // Output: 1 (true)
return 0;
}
输出
Before Deletion 1 1 1 1 After Deletion 0 1 0 1
//Java code for Deletion operator of tries algotrithm
import java.util.HashMap;
import java.util.Map;
class TrieNode {
Map<Character, TrieNode> children;
boolean isEndOfWord;
TrieNode() {
children = new HashMap<>();
isEndOfWord = false;
}
}
class Trie {
private TrieNode root;
Trie() {
root = new TrieNode();
}
void insert(String word) {
TrieNode curr = root;
for (char ch : word.toCharArray()) {
curr.children.putIfAbsent(ch, new TrieNode());
curr = curr.children.get(ch);
}
curr.isEndOfWord = true;
}
boolean search(String word) {
TrieNode curr = root;
for (char ch : word.toCharArray()) {
if (!curr.children.containsKey(ch)) {
return false;
}
curr = curr.children.get(ch);
}
return curr.isEndOfWord;
}
boolean startsWith(String prefix) {
TrieNode curr = root;
for (char ch : prefix.toCharArray()) {
if (!curr.children.containsKey(ch)) {
return false;
}
curr = curr.children.get(ch);
}
return true;
}
boolean delete(String word) {
return deleteHelper(root, word, 0);
}
private boolean deleteHelper(TrieNode curr, String word, int index) {
if (index == word.length()) {
if (!curr.isEndOfWord) {
return false; // Word does not exist in the Trie
}
curr.isEndOfWord = false; // Mark as deleted
return curr.children.isEmpty(); // Return true if no more children
}
char ch = word.charAt(index);
if (!curr.children.containsKey(ch)) {
return false; // Word does not exist in the Trie
}
TrieNode child = curr.children.get(ch);
boolean shouldDeleteChild = deleteHelper(child, word, index + 1);
if (shouldDeleteChild) {
curr.children.remove(ch); // Remove the child node if necessary
return curr.children.isEmpty(); // Return true if no more children
}
return false;
}
}
public class Main {
public static void main(String[] args) {
Trie car = new Trie();
//Inserting the elements
car.insert("Lamborghini");
car.insert("Mercedes-Benz");
car.insert("Land Rover");
car.insert("Maruti Suzuki");
//Before Deletion
System.out.println("Before Deletion");
//Printing the elements
System.out.println(car.search("Lamborghini")); // Output: true
System.out.println(car.search("Mercedes-Benz")); // Output: true
System.out.println(car.search("Land Rover")); // Output: true
System.out.println(car.search("Maruti Suzuki")); // Output: true
//Deleting the elements using deletion operation
car.delete("Lamborghini");
car.delete("Land Rover");
// After Deletion
System.out.println("After Deletion");
// Prints the elements in the Boolean expression
System.out.println(car.search("Lamborghini")); // Output: false
System.out.println(car.search("Mercedes-Benz")); // Output: true
System.out.println(car.search("Land Rover")); // Output: false
System.out.println(car.search("Maruti Suzuki")); // Output: true
}
}
输出
Before Deletion true true true true After Deletion false true false true
#python Code for Deletion operation of tries algorithm
class TrieNode:
def __init__(self):
self.children = {}
self.isEndOfWord = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
curr = self.root
for ch in word:
if ch not in curr.children:
curr.children[ch] = TrieNode()
curr = curr.children[ch]
curr.isEndOfWord = True
def search(self, word):
curr = self.root
for ch in word:
if ch not in curr.children:
return False
curr = curr.children[ch]
return curr.isEndOfWord
def startsWith(self, prefix):
curr = self.root
for ch in prefix:
if ch not in curr.children:
return False
curr = curr.children[ch]
return True
def delete(self, word):
return self.deleteHelper(self.root, word, 0)
def deleteHelper(self, curr, word, index):
if index == len(word):
if not curr.isEndOfWord:
return False # Word does not exist in the Trie
curr.isEndOfWord = False # Mark as deleted
return len(curr.children) == 0 # Return True if no more children
ch = word[index]
if ch not in curr.children:
return False # Word does not exist in the Trie
child = curr.children[ch]
shouldDeleteChild = self.deleteHelper(child, word, index + 1)
if shouldDeleteChild:
del curr.children[ch] # Remove the child node if necessary
return len(curr.children) == 0 # Return True if no more children
return False
trie = Trie()
#inserting the elements
trie.insert("Lamborghini")
trie.insert("Mercedes-Benz")
trie.insert("Land Rover")
trie.insert("Maruti Suzuki")
#Before Deletion
print("Before Deletion:")
print(trie.search("Lamborghini")) # Output: True
print(trie.search("Mercedes-Benz")) # Output: True
print(trie.search("Land Rover")) # Output: True
print(trie.search("Maruti Suzuki")) # Output: True
#deleting the elements using Deletion operation
trie.delete("Lamborghini")
trie.delete("Land Rover")
#After Deletion
print("After Deletion:")
#print elements
print(trie.search("Lamborghini")) # Output: False
print(trie.search("Mercedes-Benz")) # Output: True
print(trie.search("Land Rover")) # Output: False
print(trie.search("Maruti Suzuki")) # Output: True
输出
Before Deletion: True True True True After Deletion: False True False True
搜索
在 trie 中搜索是一种相当简单的方法。我们只能根据关键节点(插入操作开始的节点)来向下移动 trie 的级别。搜索一直进行到到达路径末端为止。如果找到该元素,则查找成功;否则提示搜索失败。
例子
//C program for search operation of tries algorithm
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define ALPHABET_SIZE 26
struct TrieNode {
struct TrieNode* children[ALPHABET_SIZE];
bool isEndOfWord;
};
struct TrieNode* createNode() {
struct TrieNode* node = (struct TrieNode*)malloc(sizeof(struct TrieNode));
node->isEndOfWord = false;
for (int i = 0; i < ALPHABET_SIZE; i++) {
node->children[i] = NULL;
}
return node;
}
void insert(struct TrieNode* root, char* word) {
struct TrieNode* curr = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = word[i] - 'a';
if (curr->children[index] == NULL) {
curr->children[index] = createNode();
}
curr = curr->children[index];
}
curr->isEndOfWord = true;
}
bool search(struct TrieNode* root, char* word) {
struct TrieNode* curr = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = word[i] - 'a';
if (curr->children[index] == NULL) {
return false;
}
curr = curr->children[index];
}
return (curr != NULL && curr->isEndOfWord);
}
bool startsWith(struct TrieNode* root, char* prefix) {
struct TrieNode* curr = root;
for (int i = 0; prefix[i] != '\0'; i++) {
int index = prefix[i] - 'a';
if (curr->children[index] == NULL) {
return false;
}
curr = curr->children[index];
}
return true;
}
int main() {
struct TrieNode* root = createNode();
//inserting the elements
insert(root, "Lamborghini");
insert(root, "Mercedes-Benz");
insert(root, "Land Rover");
insert(root, "Maruti Suzuki");
//Searching elements
printf("Searching Cars\n");
//Printing searched elements
printf("%d\n", search(root, "Lamborghini")); // Output: 1 (true)
printf("%d\n", search(root, "Mercedes-Benz")); // Output: 1 (true)
printf("%d\n", search(root, "Honda")); // Output: 0 (false)
printf("%d\n", search(root, "Land Rover")); // Output: 1 (true)
printf("%d\n", search(root, "BMW")); // Output: 0 (false)
//Searching the elements the name starts with?
printf("Cars name starts with\n");
//Printing the elements
printf("%d\n", startsWith(root, "Lambo")); // Output: 1 (true)
printf("%d\n", startsWith(root, "Hon")); // Output: 0 (false)
printf("%d\n", startsWith(root, "Hy")); // Output: 0 (false)
printf("%d\n", startsWith(root, "Mar")); // Output: 1 (true)
printf("%d\n", startsWith(root, "Land")); // Output: 1 (true)
return 0;
}
输出
Searching Cars 1 1 0 1 0 Cars name starts with 1 0 0 1 1
//C++ code for Search operation of tries algorithm
#include <iostream>
#include <unordered_map>
using namespace std;
class TrieNode {
public:
unordered_map<char, TrieNode*> children;
bool isEndOfWord;
TrieNode() {
isEndOfWord = false;
}
};
class Trie {
private:
TrieNode* root;
public:
Trie() {
root = new TrieNode();
}
void insert(string word) {
TrieNode* curr = root;
for (char ch : word) {
if (curr->children.find(ch) == curr->children.end()) {
curr->children[ch] = new TrieNode();
}
curr = curr->children[ch];
}
curr->isEndOfWord = true;
}
bool search(string word) {
TrieNode* curr = root;
for (char ch : word) {
if (curr->children.find(ch) == curr->children.end()) {
return false;
}
curr = curr->children[ch];
}
return curr->isEndOfWord;
}
bool startsWith(string prefix) {
TrieNode* curr = root;
for (char ch : prefix) {
if (curr->children.find(ch) == curr->children.end()) {
return false;
}
curr = curr->children[ch];
}
return true;
}
};
int main() {
Trie car;
//inserting the elements
car.insert("Lamborghini");
car.insert("Mercedes-Benz");
car.insert("Land Rover");
car.insert("Maruti Suzuki");
//searching elements
cout<< "Searching Cars"<< endl;
// Printing searched elements in Boolean expression
cout << car.search("Lamborghini") << endl; // Output: 1 (true)
cout << car.search("Mercedes-Benz") << endl; // Output: 1 (true)
cout << car.search("Honda") << endl; // Output: 0 (false)
cout << car.search("Land Rover") << endl; // Output: 1 (true)
cout << car.search("BMW") << endl; // Output: 0 (false)
//searching names starts with?
cout<<"cars name starts with" << endl;
//Printing the elements
cout << car.startsWith("Lambo") << endl; // Output: 1 (true)
cout << car.startsWith("Hon") << endl; // Output: 0 (false)
cout << car.startsWith("Hy") << endl; // Output: 0 (false)
cout << car.startsWith("Mar") << endl; // Output: 1 (true)
cout << car.startsWith("Land") << endl; // Output: 1 (true)
return 0;
}
输出
Searching Cars 1 1 0 1 0 cars name starts with 1 0 0 1 1
//Java program for tries Algorithm
import java.util.HashMap;
import java.util.Map;
class TrieNode {
Map<Character, TrieNode> children;
boolean isEndOfWord;
TrieNode() {
children = new HashMap<>();
isEndOfWord = false;
}
}
class Trie {
private TrieNode root;
Trie() {
root = new TrieNode();
}
void insert(String word) {
TrieNode curr = root;
for (char ch : word.toCharArray()) {
curr.children.putIfAbsent(ch, new TrieNode());
curr = curr.children.get(ch);
}
curr.isEndOfWord = true;
}
boolean search(String word) {
TrieNode curr = root;
for (char ch : word.toCharArray()) {
if (!curr.children.containsKey(ch)) {
return false;
}
curr = curr.children.get(ch);
}
return curr.isEndOfWord;
}
boolean startsWith(String prefix) {
TrieNode curr = root;
for (char ch : prefix.toCharArray()) {
if (!curr.children.containsKey(ch)) {
return false;
}
curr = curr.children.get(ch);
}
return true;
}
}
public class Main {
public static void main(String[] args) {
Trie car = new Trie();
//Inserting the elements
car.insert("Lamborghini");
car.insert("Mercedes-Benz");
car.insert("Land Rover");
car.insert("Maruti Suzuki");
//searching the elements
System.out.println("Searching Cars");
//Printing the searched elements
System.out.println(car.search("Lamborghini")); // Output: true
System.out.println(car.search("Mercedes-Benz")); // Output: true
System.out.println(car.search("Honda")); // Output: false
System.out.println(car.search("Land Rover")); // Output: true
System.out.println(car.search("BMW")); // Output: false
//searching the elements name start with?
System.out.println("Cars name starts with");
//Printing the elements
System.out.println(car.startsWith("Lambo")); // Output: true
System.out.println(car.startsWith("Hon")); // Output: false
System.out.println(car.startsWith("Hy")); // Output: false
System.out.println(car.startsWith("Mar")); // Output: true
System.out.println(car.startsWith("Land")); // Output: true
}
}
输出
Searching Cars true true false true false Cars name starts with true false false true true
#Python code for Search operation of tries algorithm
class TrieNode:
def __init__(self):
self.children = {}
self.isEndOfWord = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
curr = self.root
for ch in word:
if ch not in curr.children:
curr.children[ch] = TrieNode()
curr = curr.children[ch]
curr.isEndOfWord = True
def search(self, word):
curr = self.root
for ch in word:
if ch not in curr.children:
return False
curr = curr.children[ch]
return curr.isEndOfWord
def startsWith(self, prefix):
curr = self.root
for ch in prefix:
if ch not in curr.children:
return False
curr = curr.children[ch]
return True
if __name__ == '__main__':
car = Trie()
#Inserting the elements
car.insert("Lamborghini")
car.insert("Mercedes-Benz")
car.insert("Land Rover")
car.insert("Maruti Suzuki")
#Searching elements
print("Searching Cars")
#Printing the searched elements
print(car.search("Lamborghini")) # Output: True
print(car.search("Mercedes-Benz")) # Output: True
print(car.search("Honda")) # Output: False
print(car.search("Land Rover")) # Output: True
print(car.search("BMW")) # Output: False
#printing elements name starts with?
print("Cars name starts with")
print(car.startsWith("Lambo")) # Output: True
print(car.startsWith("Hon")) # Output: False
print(car.startsWith("Hy")) # Output: False
print(car.startsWith("Mar")) # Output: True
print(car.startsWith("Land")) # Output: True
输出
Before Deletion: True True True True After Deletion: False True False True