Префіксні дерева, також відомі як 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.