Префіксні дерева, також відомі як Trie, є потужною структурою даних, яка використовується для зберігання асоціативних масивів, де ключі зазвичай є рядками. Вони особливо корисні для задач, пов'язаних з пошуком слів, автозаповненням та перевіркою орфографії. У цій статті ми розглянемо, як реалізувати префіксні дерева в Ruby, а також обговоримо їх переваги та недоліки.
Префіксне дерево — це дерево, в якому кожен вузол представляє символ рядка. Кожен шлях від кореня до листа представляє слово. Це дозволяє ефективно зберігати та шукати слова, оскільки спільні префікси слів зберігаються лише один раз.
Префіксне дерево складається з вузлів, де кожен вузол має:
Давайте розглянемо, як реалізувати префіксне дерево в Ruby. Спочатку створимо клас для вузла дерева:
class TrieNode attr_accessor :children, :is_end_of_word def initialize @children = {} @is_end_of_word = false end end
Тепер створимо клас для самого префіксного дерева:
class Trie def initialize @root = TrieNode.new end def insert(word) node = @root word.each_char do |char| node.children[char] ||= TrieNode.new node = node.children[char] end node.is_end_of_word = true end def search(word) node = @root word.each_char do |char| return false unless node.children[char] node = node.children[char] end node.is_end_of_word end def starts_with(prefix) node = @root prefix.each_char do |char| return false unless node.children[char] node = node.children[char] end true end end
У нашому класі Trie ми реалізували три основні методи:
Давайте розглянемо, як використовувати наше префіксне дерево:
trie = Trie.new trie.insert("hello") trie.insert("helium") puts trie.search("hello") # true puts trie.search("helium") # true puts trie.search("helicopter") # false puts trie.starts_with("hel") # true puts trie.starts_with("hey") # false
Як і будь-яка структура даних, префіксні дерева мають свої переваги та недоліки.
Префіксні дерева є потужним інструментом для роботи з рядками, особливо коли мова йде про пошук та автозаповнення. У цій статті ми розглянули, як реалізувати префіксне дерево в Ruby, а також обговорили його переваги та недоліки. Сподіваємося, що ця інформація була корисною для вас, і ви зможете використовувати префіксні дерева у своїх проектах!
© 2024 RailsInsights. All rights reserved.