Live Today
[μλ£κ΅¬μ‘°] Trie(νΈλΌμ΄) λ³Έλ¬Έ
π λͺ©μ°¨
- Trie μλ£κ΅¬μ‘°λ?
- Trie μ₯/λ¨μ
- Trie μ½λ ꡬν
- Trie κ΄λ ¨ μκ³ λ¦¬μ¦ λ¬Έμ
1οΈβ£ Trie μλ£κ΅¬μ‘°λ?
- λ¬Έμμ΄μ νΉνλ μλ£ κ΅¬μ‘°μΈ νΈλΌμ΄(Trie)λ λ¬Έμμ΄ μ§ν©μ νννλ νΈλ¦¬ μλ£κ΅¬μ‘°μ΄λ€.
- μ°λ¦¬κ° μνλ μμλ₯Ό μ°Ύλ μμ μ O(n)μ ν΄κ²° ν μ μλ μλ£κ΅¬μ‘°μ΄λ€. μ¬κΈ°μ nμ λ¬Έμμ΄μ κΈΈμ΄μ λλ€.
- λ£¨νΈ λ Έλκ° λλ κ°μ₯ μ΅μμ λ Έλμλ μ΄λ ν λ¨μ΄λ λ€μ΄κ°μ§ μκ³ , λ£¨νΈ μλ λ ΈλλΆν° λ¬Έμμ΄λ€μ μ λμ¬κ° νλμ© λνλκ² λλ€.
π‘μ°λ¦¬κ° μ¬μ μμ λ¨μ΄λ₯Ό μ°Ύμ λμ λΉμ·ν λ©μ»€λμ¦μ λλ€. ν κΈμμ© μ°Ύμκ°λ©° λ¬Έμμ΄μ λλ¬ν©λλ€.
2οΈβ£ Trie μ₯λ¨μ
- νΈλΌμ΄(Trie)λ λ¬Έμμ΄ κ²μμ λΉ λ₯΄κ² νλ€.
- λ¬Έμμ΄μ νμν λ, νλνλμ© μ λΆ λΉκ΅νλ©΄μ νμμ νλ κ²λ³΄λ€ μκ° λ³΅μ‘λ μΈ‘λ©΄μμ ν¨μ¬ λ ν¨μ¨μ μ΄λ€.
- κ° λ Έλμμ μμλ€μ λν ν¬μΈν°λ€μ λ°°μ΄λ‘ λͺ¨λ μ μ₯νκ³ μλ€λ μ μμ μ μ₯ 곡κ°μ ν¬κΈ°κ° ν¬λ€λ λ¨μ λ μλ€. (λ©λͺ¨λ¦¬ μΈ‘λ©΄μμ λΉν¨μ¨μ μΌ μ μμ!)
→ νΈλΌμ΄μ μΉλͺ μ λ¨μ μ κ³΅κ° λ³΅μ‘λμμ λνλλ€.
→ κ·Έ μ΄μ λ νΈλΌμ΄μμ μκ°λ³΅μ‘λκ° λ¬Έμμ΄μ κΈΈμ΄λ§νΌ λμ€κΈ° μν΄μλ λ€μ λ¬Έμλ₯Ό κ°λ¦¬ν€λ λ Έλκ° νμνλ€.
λ¬Έμμ΄μ΄ λͺ¨λ μμλ¬Έμλ‘ μ΄λ£¨μ΄μ Έ μλ€κ³ ν΄λ, μμ λ Έλλ₯Ό κ°λ¦¬ν€λ 26κ°μ ν¬μΈν°λ₯Ό μ μ₯ν΄μΌ νλ€. μ΅μ μ κ²½μ°μλ μ§ν©μ ν¬ν¨λλ λ¬Έμμ΄λ€μ κΈΈμ΄μ μ΄ν©λ§νΌ λ Έλκ° νμνλ―λ‘, μ΄ λ©λͺ¨λ¦¬λ O(ν¬μΈν° ν¬κΈ° * ν¬μΈν° λ°°μ΄ κ°μ * μ΄ λ Έλμ κ°μ)κ° λλ€.
νΈλΌμ΄μμ λ©λͺ¨λ¦¬λ₯Ό μ μ½νκΈ° μν νΈλ¦¬ν μ΄λ μ΄νΈλ¦¬(triple-array trie)μ κ°μ μ¬λ¬ κΈ°λ²λ€μ΄ κ°λ°λμ΄ μμ§λ§ μ΄λ€μ μ½ν λ μκ³ λ¦¬μ¦ λνμ μ¬μ©νκΈ°μλ λ무 볡μ‘νκ³ μμ±νλλ° μ€λ μκ°μ΄ 걸리λ κ²½μ°κ° λλΆλΆμ΄λ€. λλ¬Έμ λνμμ νΈλΌμ΄λ₯Ό μΈ μ μλ κ²½μ°λ λ€λ£¨λ λ¬Έμμ΄μ κ°μκ° κ·Έλ κ² λ§μ§ μμ κ²½μ°λ‘ μ νλλ€.
μ°Έκ³ ) μ€μ λ‘ μΉ΄μΉ΄μ€ μ½ν μ ν¨μ¨μ± λ¬Έμ μμ νΈλΌμ΄(Trie)λ₯Ό μ¬μ©νλ λ¬Έμ κ° λμλλ° μ 체 λ¬Έμμ΄μ κΈΈμ΄λ₯Ό 10,000μΌλ‘ μ νμ λλ€.
3οΈβ£ Trie μ½λ ꡬν
μ νΈλ¦¬μμ λΉ¨κ°μ ν λλ¦¬λ‘ λ λ Έλλ λ¬Έμμ΄μ λ§μ§λ§ μ§μ μ μλ―Έν©λλ€.μ΄κ²μ΄ νμν μ΄μ λ "HE", "HELLO" μ κ°μ΄ μμ λ¬Έμκ° μ€λ³΅λλ λ¬Έμμ΄μ μν΄μμΈλ°μ, λ¬Έμμ΄ μ§ν©μμ "HE"λΌλ λ¬Έμμ΄μ΄ μλμ§ νμΈν΄μΌνλ€κ³ ν΄λ³΄κ² μ΅λλ€. κ·ΈλΌ νμ κ³Όμ μ λ€μκ³Ό κ°μ΅λλ€.
- rootμμλΆν° μμν΄μ child λ Έλ μ€ Hλ₯Ό κ°μ§λ λ Έλκ° μλμ§ μ°Ύμ΅λλ€.
- μ°Ύμλ€λ©΄, Hλ₯Ό κ°μ§λ λ Έλλ‘ μ΄λν©λλ€. (μλ€λ©΄ returnν΄μ ν΄λΉ λ¬Έμκ° μλ€κ³ ν΄μ£Όλ©΄ λ©λλ€.)
- child λ Έλλ‘ Eλ₯Ό κ°μ§λ λ Έλκ° μλμ§ μ°Ύμ΅λλ€.
- μ°Ύμλ€λ©΄, ν΄λΉ Eκ° λ¬Έμμ΄μ λμμ μ리λ flagκ°μ΄ μ€μ λμ΄ μλμ§ νμΈν©λλ€.
- μ€μ λμ΄ μλ€λ©΄, λ¬Έμμ΄ μ§ν©μ ν΄λΉ λ¬Έμμ΄μ΄ μ‘΄μ¬νλ κ²μμ μ μ μμ΅λλ€.
public class TrieTest {
public static void main(String[] args) {
String[] strArr = {"HE", "HELLO", "WORLD", "SHE"};
Trie trie = new Trie();
for (String str : strArr) {
trie.insert(trie.root, str, 0);
}
System.out.println(trie.contains(trie.root, "HELLO", 0));
}
private static class Trie {
private Node root = new Node();
public void insert(Node head, String str, int idx) {
int charIdx = str.charAt(idx) - 65;
if (head.child[charIdx] == null) {
head.child[charIdx] = new Node();
}
if (idx == str.length() - 1) {
head.child[charIdx].finish = true;
} else {
insert(head.child[charIdx], str, idx + 1);
}
}
public boolean contains(Node head, String str, int idx) {
int charIdx = str.charAt(idx) - 65;
if (head.child[charIdx] == null) {
return false;
}
if (idx == str.length() - 1) {
return head.child[charIdx].finish;
}
return contains(head.child[charIdx], str, idx + 1);
}
private static class Node {
Node[] child = new Node[26];
boolean finish = false;
}
}
}
4οΈβ£ Trie κ΄λ ¨ μκ³ λ¦¬μ¦ λ¬Έμ
π μ°Έκ³ λ§ν¬
[μκ³ λ¦¬μ¦/ μλ£κ΅¬μ‘°] νΈλΌμ΄(Trie) λ¬Έμμ΄ νμ νΈλ¦¬ κ°λ μ 리 (Java)
[μλ£κ΅¬μ‘°] νΈλΌμ΄ (Trie)
[μλ£κ΅¬μ‘°] Trie(νΈλΌμ΄)
[μλ£κ΅¬μ‘°] νΈλΌμ΄(Trie) μλ£κ΅¬μ‘°
'Computer Science > μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ£κ΅¬μ‘°] B-Tree & B+ Tree (3) | 2022.09.19 |
---|---|
[μλ£κ΅¬μ‘°] Binary Search Tree(μ΄μ§ νμ νΈλ¦¬) (3) | 2022.08.30 |
[μλ£κ΅¬μ‘°] Array & ArrayList & LinkedList (6) | 2022.08.15 |
[μλ£κ΅¬μ‘°] Stack & Queue & Map & Set (6) | 2022.08.07 |