Trie

트라이 노드는 다음과 같이 구현할 수 있다.

class Trie:
    class Node:
        def __init__(self, char=None):
            self.child = [None] * 26
            self.end = False

        def __getitem__(self, key):
            return self.child[ord(key) - ord('a')]

        def __setitem__(self, key, value):
            self.child[ord(key) - ord('a')] = value

        def __contains__(self, key):
            return True if self[key] else False

        def done(self):
            self.end = True

        def is_word(self):
            return self.end

    def __init__(self):
        self.sentinel = Trie()

    def add(self, word):
        node = self.sentinel
        for char in word:
            if char not in node:
                node[char] = Trie()
            node = node[char]
        node.done()

    def startswith(self, prefix):
        node = self.sentinel
        for char in prefix:
            if char not in node:
                return False
            node = node[char]
        return True
  • 알파벳 소문자만 담는 트라이다.
  • __getitem__, __setitem__을 오버라이딩 하여 Trie[key]Trie[key] = value로 사용할 수 있도록 한다.
  • __contains__를 오버라이딩 하여 key in Triekey not in Trie 테스트가 가능하도록 한다.
Last Update: 2023-01-25 11:47:55 PM