SlideShare a Scribd company logo
DATA STRUCTURE
TRIE
What Is TRIE?
Trie Is An Efficient Information Retrieval Data Structure Also Called
Digital Tree And Sometimes Radix Tree Or Prefix Tree (As They Can
Be Searched By Prefixes), Is An Ordered Tree Data Structure That Is
Used To Store A Dynamic Set Or Associative Array Where The Keys
Are Usually Strings.
Why Trie Data Structure?
• Searching trees in general favor keys which are of fixed size
since this leads to efficient storage management.
• However in case of applications which are retrieval based and
which call for keys varying length, tries provide better options.
• Tries are also called as Lexicographic Search trees.
• The name trie (pronounced as “try”)originated from the word
“retrieval”.
TYPES OF TRIE
1.Standard Tries
2.Compressed Tries
3.Suffix Tries
STANDARD TRIE
The Standard Trie For A Set Of Strings S Is An Ordered Tree Such That:
Each Node Labeled With A Character (Without Root).
The Children Of A Node Are Alphabetically Ordered.
The Paths From The External Nodes To The Root Yield The Strings Of S
EXAMPLE:
Standard Trie For A Set Of Strings S
S = { bear, bell, bid, bull, buy, sell, stock, stop }
TIME COMPLEXITY
A Standard Trie Uses O(n) Space. Operations (find, insert, remove) Take Time
O(dm) Each, Where:
n = Total Size Of The Strings In S,
m = Size Of The String Parameter Of The Operation
d = Alphabet Size
TRIE SPECIFICATION
Operations:
addWord
Function Adds word to an .
Postcondition Trie is not full
searchWord
Function Search a word in the trie
Postcondition Returns true if the world is found and false otherwise.
deleteWord
Function Delete a word in the trie
Postcondition Trie is not empty
TRIE SPECIFICATION
Operations:
print
Function Print the word in the trie
Postcondition Trie either maybe full or not
NODE STRUCTURE
Class Node
{
public:
char value;
bool end;
Node *children[26];
}
The Character Value (A – Z) / (a – z).
Indicates Whether This Node Completes A Word
Represents The 26 Letters In The Alphabet
NODE STRUCTURE
char value
bool end
0 1 2 3 4 5 6 7 8 9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
2
5
Character
Data
Boolean
Data
A Node Type
Pointer
Array

0
INSERTION
INSERTION ALGORITHM
Insert: Apple
First Create A Root That Has Empty String And Every Single Pointer Array
Must Point To The NULL (Default). And Boolean Value Of Every Node Must Be
false By Default.
false
0 …
1
0
…
2
0
…
2
6
NULL
INSERTION ALGORITHM
Insert: Apple
Root
INSERTION ALGORITHM
Insert: Apple
Second Convert All Of The String’s Character To Uppercase Or To Lowercase.
char currentChar = tolower(word.at(i));
INSERTION ALGORITHM
Insert: Apple
Second Convert All Of The String’s Character To Uppercase Or To Lowercase.
char currentChar = tolower(word.at(i));
Here, Suppose string s = “Apple” And Length Of String Is 5 So……….
INSERTION ALGORITHM
Insert: Apple
Second Convert All Of The String’s Character To Uppercase Or To Lowercase.
char currentChar = tolower(word.at(i));
Here, Suppose string s = “Apple” And Length Of String Is 5 So……….
s[0] = A, s[1] = p, s[2] = p, s[3] = l, s[4] = e
INSERTION ALGORITHM
Insert: Apple
Second Convert All Of The String’s Character To Uppercase Or To Lowercase.
char currentChar = tolower(word.at(i));
A p p l e
0 1 2 3 4
Here, Suppose string s = “Apple” And Length Of String Is 5 So……….
s[0] = A, s[1] = p, s[2] = p, s[3] = l, s[4] = e
INSERTION ALGORITHM
Insert: Apple
A p p l e
0 1 2 3 4
INSERTION ALGORITHM
Insert: Apple
A p p l e
0 1 2 3 4
char currentChar = tolower(word.at(0));
currentChar a
INSERTION ALGORITHM
Insert: Apple
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar a
int index = currentChar - 'a'; int index = a - 'a';
int index = 0;
INSERTION ALGORITHM
Insert: Apple
Declare A Pointer Node Type Pointer Variable That Point To The Root
Node *currentNode = root;
Root
currentNode
Pointing To
INSERTION ALGORITHM
Insert: Apple
Root
currentNode
INSERTION ALGORITHM
Insert: Apple
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
false
0 …
1
0
…
2
0
…
2
6
NULL
If 0 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
INSERTION ALGORITHM
Insert: Apple
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
Is 0 Pointing To The NULL?
YES!
So IF Statement Won’t Execute…………
And The Current Node Doesn't have the current
character as one of its descendants
Here 0 Is The Index Value ( a – ‘a’ )
Check If The Current Node Has The Current Character As One Of Its
Descendants
false
0 …
1
0
…
2
0
…
2
6
NULL
INSERTION ALGORITHM
Insert: Apple
else
{
Node *newNode = new Node(currentChar);
currentNode->children[0] = newNode;
currentNode = newNode;
}
So………. Node Constructor
INSERTION ALGORITHM
Insert: Apple
Node *newNode = new Node(currentChar);
So……….
currentChar a
Node(curre
ntChar)
INSERTION ALGORITHM
Insert: Apple
Node *newNode = new Node(currentChar);
So……….
currentChar a
a
Node(curre
ntChar)
INSERTION ALGORITHM
Insert: Apple
Node *newNode = new Node(currentChar);
So……….
currentChar a
a
Node(curre
ntChar)
a
newNode
All 26 Children Of newNode Will Point To The NULL
INSERTION ALGORITHM
Insert: Apple
currentNode->children[0] = newNode;
So……….
a
newNode Root
currentNode
0
INSERTION ALGORITHM
Insert: Apple
currentNode->children[0] = newNode;
So……….
a
newNode Root
0
currentNode
INSERTION ALGORITHM
Insert: Apple
currentNode = newNode;
So……….
a
newNode Root
0
currentNode
INSERTION ALGORITHM
Insert: Apple
if (i == word.size() - 1)
{
currentNode->end = true;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
0 == 4? NO  Won’t Execute
INSERTION ALGORITHM
Insert: Apple
So……….
a
newNode Root
0
currentNode
bool end will be false
INSERTION ALGORITHM
Insert: Apple
Root
0
a
currentNode
INSERTION ALGORITHM
Insert: Apple
A p p l e
0 1 2 3 4
char currentChar = tolower(word.at(1));
currentChar p
INSERTION ALGORITHM
Insert: Apple
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar p
int index = currentChar - 'a'; int index = p - 'a';
int index = 15;
INSERTION ALGORITHM
Insert: Apple
if (currentNode->children[15] != NULL)
{
currentNode = currentNode->children[15];
}
a
false
1
5
…
1
0
…
2
0
…
2
6
NULL
If 15 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
INSERTION ALGORITHM
Insert: Apple
if (currentNode->children[15] != NULL)
{
currentNode = currentNode->children[15];
}
Check If The Current Node Has The Current Character As One Of Its
Descendants
a
false
1
5
…
1
0
…
2
0
…
2
6
Is 15 Pointing To The NULL?
YES!
So IF Statement Won’t Execute…………
And The Current Node Doesn't have the current
character as one of its descendants
Here 15 Is The Index Value ( p – ‘a’ )
NULL
INSERTION ALGORITHM
Insert: Apple
else
{
Node *newNode = new Node(currentChar);
currentNode->children[15] = newNode;
currentNode = newNode;
}
So………. Node Constructor
INSERTION ALGORITHM
Insert: Apple
Node *newNode = new Node(currentChar);
So……….
currentChar p
Node(curre
ntChar)
INSERTION ALGORITHM
Insert: Apple
Node *newNode = new Node(currentChar);
So……….
currentChar p
p
Node(curre
ntChar)
INSERTION ALGORITHM
Insert: Apple
Node *newNode = new Node(currentChar);
So……….
currentChar p
p
Node(curre
ntChar)
p
newNode
All 26 Children Of newNode Will Point To The NULL
INSERTION ALGORITHM
Insert: Apple
currentNode->children[15] = newNode;
So……….
p
newNode a
currentNode
1
5
INSERTION ALGORITHM
Insert: Apple
currentNode->children[15] = newNode;
So……….
p
newNode a
1
5
currentNode
INSERTION ALGORITHM
Insert: Apple
currentNode = newNode;
So……….
p
newNode a
1
5
currentNode
INSERTION ALGORITHM
Insert: Apple
if (i == word.size() - 1)
{
currentNode->end = true;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
1 == 4? NO  Won’t Execute
INSERTION ALGORITHM
Insert: Apple
So……….
p
newNode a
1
5
currentNode
bool end will be false
INSERTION ALGORITHM
Insert: Apple
Root
0
a
1
5
p
currentNode
INSERTION ALGORITHM
Insert: Apple
SIMILARLY
INSERTION ALGORITHM
Insert: Apple
Root
0
a
1
5
p
1
5
p
INSERTION ALGORITHM
Insert: Apple
Root
0
a
1
5
p
1
5
p
1
1
l
INSERTION ALGORITHM
Insert: Apple
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
INSERTION ALGORITHM
Insert: Apple
if (i == word.size() - 1)
{
currentNode->end = true;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
4 == 4? YES  Will Execute
INSERTION ALGORITHM
Insert: Apple
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
INSERTION ALGORITHM
Now Insert: Army
INSERTION ALGORITHM
Insert: Army
A r m y
0 1 2 3
INSERTION ALGORITHM
Insert: Army
A r m y
0 1 2 3
char currentChar = tolower(word.at(0));
currentChar a
INSERTION ALGORITHM
Insert: Army
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar a
int index = currentChar - 'a'; int index = a - 'a';
int index = 0;
INSERTION ALGORITHM
Insert: Army
Declare A Pointer Node Type Pointer Variable That Point To The Root
Node *currentNode = root;
Root
currentNode
Pointing To
DELETE ALGORITHM
Delete: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
currentNode
INSERTION ALGORITHM
Insert: Army
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
false
0 …
1
0
…
2
0
…
2
6
NULL
If 0 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
INSERTION ALGORITHM
Insert: Army
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
Is 0 Pointing To The NULL?
NO!
So IF Statement Will Execute…………
Here 0 Is The Index Value ( a – ‘a’ )
Check If The Current Node Has The Current Character As One Of Its
Descendants
false
0 …
1
0
…
2
0
…
2
6
NULL
INSERTION ALGORITHM
Insert: Army
currentNode = currentNode->children[0];
So……….
INSERTION ALGORITHM
Insert: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
currentNode
bool end will be True
INSERTION ALGORITHM
Insert: Army
if (i == word.size() - 1)
{
currentNode->end = true;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
0 == 3? NO  Won’t Execute
INSERTION ALGORITHM
Insert: Army
A r m y
0 1 2 3
char currentChar = tolower(word.at(1));
currentChar r
INSERTION ALGORITHM
Insert: Army
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar r
int index = currentChar - 'a'; int index = r - 'a';
int index = 17;
INSERTION ALGORITHM
Insert: Army
if (currentNode->children[17] != NULL)
{
currentNode = currentNode->children[17];
}
a
false
1
7
…
1
0
…
2
0
…
2
6
NULL
If 15 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
INSERTION ALGORITHM
Insert: Army
if (currentNode->children[17] != NULL)
{
currentNode = currentNode->children[17];
}
Check If The Current Node Has The Current Character As One Of Its
Descendants
a
false
1
7
…
1
0
…
2
0
…
2
6
Is 17 Pointing To The NULL?
YES!
So IF Statement Won’t Execute…………
And The Current Node Doesn't have the current
character as one of its descendants
Here 17 Is The Index Value ( r – ‘a’ )
NULL
INSERTION ALGORITHM
Insert: Army
else
{
Node *newNode = new Node(currentChar);
currentNode->children[17] = newNode;
currentNode = newNode;
}
So………. Node Constructor
INSERTION ALGORITHM
Insert: Army
Node *newNode = new Node(currentChar);
So……….
currentChar r
Node(curre
ntChar)
INSERTION ALGORITHM
Insert: Army
Node *newNode = new Node(currentChar);
So……….
currentChar r
r
Node(curre
ntChar)
INSERTION ALGORITHM
Insert: Army
Node *newNode = new Node(currentChar);
So……….
currentChar r
r
Node(curre
ntChar)
r
newNode
All 26 Children Of newNode Will Point To The NULL
INSERTION ALGORITHM
Insert: Army
currentNode->children[17] = newNode;
So……….
INSERTION ALGORITHM
Insert: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
currentNode
INSERTION ALGORITHM
Insert: Army
currentNode = newNode;
So……….
INSERTION ALGORITHM
Insert: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
currentNode
INSERTION ALGORITHM
Insert: Army
if (i == word.size() - 1)
{
currentNode->end = true;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
1 == 3? NO  Won’t Execute
INSERTION ALGORITHM
Insert: Army
SIMILARLY
INSERTION ALGORITHM
Insert: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
INSERTION ALGORITHM
Insert: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
INSERTION ALGORITHM
Insert: Army
if (i == word.size() - 1)
{
currentNode->end = true;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
3 == 3? YES  Will Execute
INSERTION ALGORITHM
Insert: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
DELETION
DELETION ALGORITHM
Delete: Army
A r m y
0 1 2 3
char currentChar = tolower(word.at(0));
currentChar a
DELETION ALGORITHM
Delete: Army
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar a
int index = currentChar - 'a'; int index = a - 'a';
int index = 0;
DELETION ALGORITHM
Delete: Army
Declare A Pointer Node Type Pointer Variable That Point To The Root
Node *currentNode = root;
Root
currentNode
Pointing To
DELETION ALGORITHM
Delete: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
DELETION ALGORITHM
Delete: Army
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
false
0 …
1
0
…
2
0
…
2
6
NULL
If 0 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
DELETION ALGORITHM
Delete: Army
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
Is 0 Pointing To The NULL?
NO!
So IF Statement Will Execute…………
Here 0 Is The Index Value ( a – ‘a’ )
Check If The Current Node Has The Current Character As One Of Its
Descendants
false
0 …
1
0
…
2
0
…
2
6
NULL
DELETION ALGORITHM
Delete: Army
currentNode = currentNode->children[0];
So……….
DELETION ALGORITHM
Delete: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
DELETION ALGORITHM
Delete: Army
A r m y
0 1 2 3
char currentChar = tolower(word.at(1));
currentChar r
DELETION ALGORITHM
Delete: Army
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar r
int index = currentChar - 'a'; int index = r - 'a';
int index = 17;
DELETION ALGORITHM
Delete: Army
if (currentNode->children[17] != NULL)
{
currentNode = currentNode->children[17];
}
a
false
1
7
…
1
0
…
2
0
…
2
6
NULL
If 15 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
DELETION ALGORITHM
Delete: Army
if (currentNode->children[17] != NULL)
{
currentNode = currentNode->children[17];
}
Check If The Current Node Has The Current Character As One Of Its
Descendants
a
false
1
7
…
1
0
…
2
0
…
2
6
Is 17 Pointing To The NULL?
NO!
So IF Statement Will Execute…………
Here 17 Is The Index Value ( r – ‘a’ )
NULL
DELETION ALGORITHM
Delete: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
DELETION ALGORITHM
Delete: Army
SIMILARLY
DELETION ALGORITHM
Delete: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
DELETION ALGORITHM
Delete: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
DELETION ALGORITHM
Delete: Army
if (i == word.size() – 1 && currentNode->end)
{
currentNode->end = false;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
3 == 3? && currentNode  end? YES  Will Execute
DELETION ALGORITHM
Delete: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
bool end will be False So Word Couldn’t
Be Found By Search So The Word Is
Deleted.
SEARCH
SEARCHING ALGORITHM
Search: Army
A r m y
0 1 2 3
char currentChar = tolower(word.at(0));
currentChar a
SEARCHING ALGORITHM
SEARCH: Army
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar a
int index = currentChar - 'a'; int index = a - 'a';
int index = 0;
SEARCHING ALGORITHM
Search: Army
Declare A Pointer Node Type Pointer Variable That Point To The Root
Node *currentNode = root;
Root
currentNode
Pointing To
SEARCHING ALGORITHM
Search: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
SEARCHING ALGORITHM
Search: Army
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
false
0 …
1
0
…
2
0
…
2
6
NULL
If 0 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
SEARCHING ALGORITHM
Search: Army
if (currentNode->children[0] != NULL)
{
currentNode = currentNode->children[0];
}
Is 0 Pointing To The NULL?
NO!
So IF Statement Will Execute…………
Here 0 Is The Index Value ( a – ‘a’ )
Check If The Current Node Has The Current Character As One Of Its
Descendants
false
0 …
1
0
…
2
0
…
2
6
NULL
SEARCHING ALGORITHM
Search: Army
currentNode = currentNode->children[0];
So……….
SEARCHING ALGORITHM
Search: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
SEARCHING ALGORITHM
Search: Army
A r m y
0 1 2 3
char currentChar = tolower(word.at(1));
currentChar r
SEARCHING ALGORITHM
Search: Army
Then Get The Correct Index For The Appropriate Character
int index = currentChar - 'a';
So……….
currentChar r
int index = currentChar - 'a'; int index = r - 'a';
int index = 17;
SEARCHING ALGORITHM
Search: Army
if (currentNode->children[17] != NULL)
{
currentNode = currentNode->children[17];
}
a
false
1
7
…
1
0
…
2
0
…
2
6
NULL
If 15 Pointing To The NULL?
Check If The Current Node Has The Current Character As One Of Its
Descendants
SEARCHING ALGORITHM
Search: Army
if (currentNode->children[17] != NULL)
{
currentNode = currentNode->children[17];
}
Check If The Current Node Has The Current Character As One Of Its
Descendants
a
false
1
7
…
1
0
…
2
0
…
2
6
Is 17 Pointing To The NULL?
NO!
So IF Statement Will Execute…………
Here 17 Is The Index Value ( r – ‘a’ )
NULL
SEARCHING ALGORITHM
Search: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
SEARCHING ALGORITHM
Search: Army
SIMILARLY
SEARCHING ALGORITHM
Search: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
SEARCHING ALGORITHM
Search: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
currentNode
SEARCHING ALGORITHM
Search: Army
if (i == word.size() – 1 && currentNode->end)
{
return true;
}
Now Check If It Is The Last Character Of The Word Has Been Reached
3 == 3? && currentNode  end? YES  Will Execute
SEARCHING ALGORITHM
Search: Army
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
Return True. Item Found !
PRINTING WORD
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
if (node->end) (1)
PRINTING ALGORITHM
Printing Result
CASE RESULT
CASE 1 FALSE
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
if (node->children[0] != NULL) (2)
PRINTING ALGORITHM
Printing Result
CASE RESULT
CASE 1 FALSE
CASE 2 TRUE
string currentString = prefix + node->children[0]->value;
string currentString = “” +a;
string currentString = a;
alphabetize(node->children[0], currentString);
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
if (node->children[1] != NULL) (3)
PRINTING ALGORITHM
Printing Result
CASE RESULT
CASE 3 FALSE
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
if (node->children[2] != NULL) (4)
PRINTING ALGORITHM
Printing Result
CASE RESULT
CASE 4 FALSE
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
if (node->children[15] != NULL)
(17)
PRINTING ALGORITHM
Printing Result
CASE RESULT
CASE 17 TRUE
string currentString = prefix + node->children[15]->value;
string currentString = a + p;
string currentString = ap;
alphabetize(node->children[15], currentString);
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
if (node->children[15] != NULL)
(18)
PRINTING ALGORITHM
Printing Result
CASE RESULT
CASE 18 TRUE
string currentString = prefix + node->children[15]->value;
string currentString = ap + p;
string currentString = app;
alphabetize(node->children[15], currentString);
PRINTING ALGORITHM
SIMILARLY
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Root
0
a
1
5
p
1
5
p
1
1
l
4
e
bool end will be True
1
7
r
1
2
m
1
5
y
if (node->children[4] != NULL)
(19)
PRINTING ALGORITHM
Trie::alphabetize(Node * node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
PRINTING ALGORITHM
Printing Result
CASE RESULT
CASE 19 TRUE
string currentString = prefix + node->children[15]->value;
string currentString = appl + e;
string currentString = apple;
alphabetize(node->children[4], currentString);
PRINTING ALGORITHM
Printing Result
Print  apple
PRINTING ALGORITHM
SIMILARLY
PRINTING ALGORITHM
Printing Result
Print  apple
Print  army
SOURCE CODE
Trie.h
#ifndef TRIE_H
#define TRIE_H
#include <iostream>
#include <vector>
#include <string>
#include <assert.h>
#include <new>
using namespace std;
class Node
{
public:
char value;
bool end;
Node *children[26];
Node(char value);
};
class Trie
{
public:
Trie();
void addWord(string word);
bool searchForWord(string word);
void deleteWord(string word);
Node *getRoot();
void alphabetize(Node *, string);
private:
Node *root;
};
#endif // TRIE_H
SOURCE CODE
Trie.c
#ifndef TRIE_CPP
#define TRIE_CPP
#include <iostream>
#include "trie.h"
using namespace std;
Node::Node(char value)
{
this->value = value;
end = false;
for(int i = 0; i < 26; ++i)
{
children[i] = NULL;
}
}
Trie::Trie()
{
root = new Node(' ');
root->end = true;
}
Node *Trie::getRoot()
{
return root;
}
SOURCE CODE
Trie.c
void Trie::addWord(string word)
{
Node * currentNode = root;
for (int i = 0; i < (int)word.size(); ++i)
{
char currentChar = tolower(word.at(i));
int index = currentChar - 'a';
assert(index >= 0); // Makes sure the character is between a-z
if (currentNode->children[index] != NULL)
{
// check if the current node has the current character as one of its
decendants
currentNode = currentNode->children[index];
}
else
{
// the current node doesn't have the current character as one of its
decendants
Node * newNode = new Node(currentChar);
currentNode->children[index] = newNode;
currentNode = newNode;
}
if (i == (int)word.size() - 1)
{
// the last character of the word has been reached
currentNode->end = true;
}
}
}
SOURCE CODE
Trie.c
bool Trie::searchForWord(string word)
{
Node *currentNode = root;
for(int i = 0; i < (int)word.size(); ++i)
{
char currentChar = tolower(word.at(i));
int index = currentChar - 'a';
assert(index >= 0);
if(currentNode->children[index] != NULL)
{
currentNode = currentNode->children[index];
}
else
{
return false;
}
if(i == (int)word.size() - 1 && !currentNode->end)
{
return false;
}
}
return true;
}
SOURCE CODE
Trie.c
void Trie::deleteWord(string word)
{
Node *currentNode = root;
for(int i = 0; i < (int)word.size(); ++i)
{
char currentChar = tolower(word.at(i));
int index = currentChar - 'a';
assert(index >= 0);
if(currentNode->children[index] != NULL)
{
currentNode = currentNode->children[index];
}
else
{
return;
}
if(i == (int)word.size() - 1 && currentNode->end)
{
currentNode->end = false;
}
}
}
SOURCE CODE
Trie.c
void Trie::alphabetize(Node *node, string prefix = "")
{
if (node->end)
cout << prefix << endl;
for (int i = 0; i < 26; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value;
alphabetize(node->children[i], currentString);
}
}
}
#endif // TRIE_CPP
SOURCE CODE
Main.cpp
#include <iostream>
#include “trie.h”
using namespace std;
int main()
{
Trie * t = new Trie();
t->addWord("Carlos");
t->addWord("Perea");
t->addWord("Hello");
t->addWord("Ball");
t->addWord("Balloon");
t->addWord("Show");
t->addWord("Shower");
t->alphabetize(t->getRoot(), "");
t-> alphabetize(t->getRoot(), "");
return 0;
}
OUTPUT
APPLICATIONS OF TRIE DATA
STRUCTURES
TRIES IN AUTO COMPLETE
• Since a trie is a tree-like data structure in which each node
contains an array of pointers, one pointer for each character in the
alphabet.
• Starting at the root node, we can trace a word by following pointers
corresponding to the letters in the target word.
• Starting from the root node, you can check if a word exists in the
trie easily by following pointers corresponding to the letters in the
TRIES IN AUTO COMPLETE
• Auto-complete functionality is used widely over the internet and
mobile apps. A lot of websites and apps try to complete your input
as soon as you start typing.
• All the descendants of a node have a common prefix of the string
associated with that node.
TRIES IN AUTO COMPLETE
AUTO COMPLETE IN GOOGLE SEARCH
WHY TRIES IN AUTO COMPLETE
• Implementing auto complete using a trie is easy.
• We simply trace pointers to get to a node that represents the string
the user entered. By exploring the trie from that node down, we
can enumerate all strings that complete user’s input.
AUTOMATIC COMMAND COMPLETION
• When using an operating system such as Unix or DOS, we type in
system commands to accomplish certain tasks. For example, the
Unix and DOS command cd may be used to change the current
directory.
SPELL CHECKERS
PHONE BOOK SEARCH
THANKS

More Related Content

Similar to trie.pptxnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

Lazy Java
Lazy JavaLazy Java
Lazy Java
J On The Beach
 
Lazy Java
Lazy JavaLazy Java
Lazy Java
Nicola Pedot
 
Mario Fusco - Lazy Java - Codemotion Milan 2018
Mario Fusco - Lazy Java - Codemotion Milan 2018Mario Fusco - Lazy Java - Codemotion Milan 2018
Mario Fusco - Lazy Java - Codemotion Milan 2018
Codemotion
 
Lazy java
Lazy javaLazy java
Lazy java
Mario Fusco
 
Introduction to Erlang
Introduction to ErlangIntroduction to Erlang
Introduction to Erlang
Corrado Santoro
 
stack (1).pptx
stack (1).pptxstack (1).pptx
stack (1).pptx
CrazyKiller4
 
Theory of automata and formal language lab manual
Theory of automata and formal language lab manualTheory of automata and formal language lab manual
Theory of automata and formal language lab manual
Nitesh Dubey
 
Real World Haskell: Lecture 7
Real World Haskell: Lecture 7Real World Haskell: Lecture 7
Real World Haskell: Lecture 7Bryan O'Sullivan
 
Call Execute For Everyone
Call Execute For EveryoneCall Execute For Everyone
Call Execute For Everyone
Daniel Boisvert
 
Stacks
StacksStacks
Stacks
sweta dargad
 
Stacks & Queues
Stacks & QueuesStacks & Queues
Stacks & Queuestech4us
 
Stacks & Queues By Ms. Niti Arora
Stacks & Queues By Ms. Niti AroraStacks & Queues By Ms. Niti Arora
Stacks & Queues By Ms. Niti Arora
kulachihansraj
 
Revisiting a data structures in detail with linked list stack and queue
Revisiting a data structures in detail with linked list stack and queueRevisiting a data structures in detail with linked list stack and queue
Revisiting a data structures in detail with linked list stack and queue
ssuser7319f8
 
Python quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung FuPython quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung Fu
climatewarrior
 
Rana Junaid Rasheed
Rana Junaid RasheedRana Junaid Rasheed
Rana Junaid Rasheed
Rana junaid Rasheed
 
Stacks queues-1220971554378778-9
Stacks queues-1220971554378778-9Stacks queues-1220971554378778-9
Stacks queues-1220971554378778-9Getachew Ganfur
 
OCR GCSE Computing - Binary logic and Truth Tables
OCR GCSE Computing - Binary logic and Truth TablesOCR GCSE Computing - Binary logic and Truth Tables
OCR GCSE Computing - Binary logic and Truth Tables
northernkiwi
 
Basic iOS Training with SWIFT - Part 2
Basic iOS Training with SWIFT - Part 2Basic iOS Training with SWIFT - Part 2
Basic iOS Training with SWIFT - Part 2
Manoj Ellappan
 
Stacks
StacksStacks
Stacks
Sadaf Ismail
 
Intro to DSAA.ppt
Intro to DSAA.pptIntro to DSAA.ppt
Intro to DSAA.ppt
jumar dimas
 

Similar to trie.pptxnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn (20)

Lazy Java
Lazy JavaLazy Java
Lazy Java
 
Lazy Java
Lazy JavaLazy Java
Lazy Java
 
Mario Fusco - Lazy Java - Codemotion Milan 2018
Mario Fusco - Lazy Java - Codemotion Milan 2018Mario Fusco - Lazy Java - Codemotion Milan 2018
Mario Fusco - Lazy Java - Codemotion Milan 2018
 
Lazy java
Lazy javaLazy java
Lazy java
 
Introduction to Erlang
Introduction to ErlangIntroduction to Erlang
Introduction to Erlang
 
stack (1).pptx
stack (1).pptxstack (1).pptx
stack (1).pptx
 
Theory of automata and formal language lab manual
Theory of automata and formal language lab manualTheory of automata and formal language lab manual
Theory of automata and formal language lab manual
 
Real World Haskell: Lecture 7
Real World Haskell: Lecture 7Real World Haskell: Lecture 7
Real World Haskell: Lecture 7
 
Call Execute For Everyone
Call Execute For EveryoneCall Execute For Everyone
Call Execute For Everyone
 
Stacks
StacksStacks
Stacks
 
Stacks & Queues
Stacks & QueuesStacks & Queues
Stacks & Queues
 
Stacks & Queues By Ms. Niti Arora
Stacks & Queues By Ms. Niti AroraStacks & Queues By Ms. Niti Arora
Stacks & Queues By Ms. Niti Arora
 
Revisiting a data structures in detail with linked list stack and queue
Revisiting a data structures in detail with linked list stack and queueRevisiting a data structures in detail with linked list stack and queue
Revisiting a data structures in detail with linked list stack and queue
 
Python quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung FuPython quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung Fu
 
Rana Junaid Rasheed
Rana Junaid RasheedRana Junaid Rasheed
Rana Junaid Rasheed
 
Stacks queues-1220971554378778-9
Stacks queues-1220971554378778-9Stacks queues-1220971554378778-9
Stacks queues-1220971554378778-9
 
OCR GCSE Computing - Binary logic and Truth Tables
OCR GCSE Computing - Binary logic and Truth TablesOCR GCSE Computing - Binary logic and Truth Tables
OCR GCSE Computing - Binary logic and Truth Tables
 
Basic iOS Training with SWIFT - Part 2
Basic iOS Training with SWIFT - Part 2Basic iOS Training with SWIFT - Part 2
Basic iOS Training with SWIFT - Part 2
 
Stacks
StacksStacks
Stacks
 
Intro to DSAA.ppt
Intro to DSAA.pptIntro to DSAA.ppt
Intro to DSAA.ppt
 

Recently uploaded

Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
gdsczhcet
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
VENKATESHvenky89705
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
Kamal Acharya
 
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
H.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdfH.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdf
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
MLILAB
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
R&R Consult
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
ydteq
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
AmarGB2
 
ethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.pptethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.ppt
Jayaprasanna4
 
ML for identifying fraud using open blockchain data.pptx
ML for identifying fraud using open blockchain data.pptxML for identifying fraud using open blockchain data.pptx
ML for identifying fraud using open blockchain data.pptx
Vijay Dialani, PhD
 
WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234
AafreenAbuthahir2
 
Railway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdfRailway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdf
TeeVichai
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
Kamal Acharya
 
block diagram and signal flow graph representation
block diagram and signal flow graph representationblock diagram and signal flow graph representation
block diagram and signal flow graph representation
Divya Somashekar
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
JoytuBarua2
 
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
obonagu
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation & Control
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
bakpo1
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
thanhdowork
 
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdfTop 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Teleport Manpower Consultant
 
English lab ppt no titlespecENG PPTt.pdf
English lab ppt no titlespecENG PPTt.pdfEnglish lab ppt no titlespecENG PPTt.pdf
English lab ppt no titlespecENG PPTt.pdf
BrazilAccount1
 

Recently uploaded (20)

Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
 
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
H.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdfH.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdf
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
 
ethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.pptethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.ppt
 
ML for identifying fraud using open blockchain data.pptx
ML for identifying fraud using open blockchain data.pptxML for identifying fraud using open blockchain data.pptx
ML for identifying fraud using open blockchain data.pptx
 
WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234
 
Railway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdfRailway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdf
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
 
block diagram and signal flow graph representation
block diagram and signal flow graph representationblock diagram and signal flow graph representation
block diagram and signal flow graph representation
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
 
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
 
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdfTop 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
 
English lab ppt no titlespecENG PPTt.pdf
English lab ppt no titlespecENG PPTt.pdfEnglish lab ppt no titlespecENG PPTt.pdf
English lab ppt no titlespecENG PPTt.pdf
 

trie.pptxnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn