Ejemplo n.º 1
0
        static void search(BkNode node, List <string> result, string value, int distanceTolerance)
        {
            var currentDistance = LevenshteinDistance(node.Value, value);

            var minDistance = (long)currentDistance - distanceTolerance;
            var maxDistance = (long)currentDistance + distanceTolerance;

            if (currentDistance <= distanceTolerance)
            {
                result.Add(node.Value);
            }

            var edges = node.Edges.Where(edge => minDistance <= edge && edge <= maxDistance);

            foreach (var edge in edges)
            {
                search(node[edge], result, value, distanceTolerance);
            }
        }
Ejemplo n.º 2
0
    /// <summary>
    /// Add a word to the tree's dictionary.
    /// </summary>
    /// <param name="value"></param>
    public void Add(string value)
    {
        if (_root == null)
        {
            _root = new BkNode(value);
            return;
        }

        int distance;
        var currentNode = _root;

        do
        {
            distance = LevenshteinDistance(currentNode.Value, value);
            if (distance == 0)
            {
                return;
            }

            currentNode = currentNode[distance] ?? currentNode;
        } while(currentNode.ContainsKey(distance));

        currentNode.AddChild(distance, value);
    }