Rails Insights

Implementing Prefix Trees in Ruby

Introduction

Prefix trees, also known as tries, are data structures that are commonly used for storing and searching strings efficiently. In this article, we will explore how to implement prefix trees in Ruby, a popular programming language known for its simplicity and readability.

What is a Prefix Tree?

A prefix tree is a tree data structure that is used to store a set of strings. Each node in the tree represents a single character, and the path from the root to a particular node represents a string. By traversing the tree, we can efficiently search for strings and perform operations such as insertion, deletion, and prefix matching.

Implementing a Prefix Tree in Ruby

Let's start by defining a Node class that represents a single node in the prefix tree:

class Node
  attr_accessor :children, :is_end_of_word

  def initialize
    @children = {}
    @is_end_of_word = false
  end
end

The Node class has two attributes: children, which is a hash that maps characters to child nodes, and is_end_of_word, which indicates whether the node represents the end of a word.

Next, we can define the Trie class, which will be responsible for managing the prefix tree:

class Trie
  attr_accessor :root

  def initialize
    @root = Node.new
  end

  def insert(word)
    node = @root

    word.each_char do |char|
      node.children[char] ||= Node.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

The Trie class has three methods: insert, search, and starts_with. The insert method is used to insert a word into the prefix tree, the search method is used to search for a word in the tree, and the starts_with method is used to check if a word starts with a given prefix.

Using the Prefix Tree

Now that we have implemented the prefix tree, let's see how we can use it:

trie = Trie.new
trie.insert("apple")
trie.insert("banana")

puts trie.search("apple") # true
puts trie.search("orange") # false

puts trie.starts_with("app") # true
puts trie.starts_with("ora") # false

In this example, we create a new Trie instance, insert two words ("apple" and "banana") into the tree, and then perform search and starts_with operations to check if the words are present in the tree.

Conclusion

In this article, we have explored how to implement prefix trees in Ruby. Prefix trees are powerful data structures that can be used for efficient string storage and searching. By following the steps outlined in this article, you can easily implement and use prefix trees in your Ruby projects.

Published: June 04, 2024

© 2024 RailsInsights. All rights reserved.