private static void AddToTree(string s) { var node = new DistanceTree.Node(s, null); List <DistanceTree.Node> neighbors; var radius = Levenshtein.MAX_RADIUS; var levenshtein = new Fastenshtein.Levenshtein(s); do { neighbors = Levenshtein.tree.Select(n => { n.Cache = levenshtein.Distance(n.Content); return(n.Cache <= radius); }).ToList(); radius++; } while (neighbors.Count == 0); var edges = neighbors.Select(x => new DistanceTree.Edge(node, x, x.Cache)); node.Edges = edges.ToList(); Levenshtein.tree.Add(node); Levenshtein.NodeDictionary.Add(s, node); }
private static void FindSimilar(DistanceTree.Node node, int radius, List <DistanceTree.Node> nodes, int distance, int searchRadius) { if (radius > searchRadius) { return; } node.Cache = distance; nodes.Add(node); foreach (var edge in node.Edges) { Levenshtein.FindSimilar(edge.End, radius + 1, nodes, distance + edge.Distance, searchRadius); } }