natix.SimilaritySearch.LocalSearchRestarts.GreedySearch C# (CSharp) Method

GreedySearch() protected method

protected GreedySearch ( object q, int startID, HashSet visited, IResult res ) : void
q object
startID int
visited HashSet
res IResult
return void
        protected void GreedySearch(object q, int startID, HashSet<int> visited, IResult res)
        {
            visited.Add (startID);
            res.Push (startID, this.DB.Dist (this.DB [startID], q));

            var minDist = double.MaxValue;
            int minItem;
            var evaluated = new HashSet<int> ();

            // visited is a global set containing nodes already expanded and explored
            // evaluated is a local variable containing items already evaluated
            // evaluated must be local to preserve diversity

            do {
                minItem = -1;
                var adjList = this.Vertices[startID];

                foreach (var objID in adjList) {
                    if (evaluated.Add(objID)) { // true iff it wasn't evaluated
                        var d = this.DB.Dist (this.DB [objID], q);
                        res.Push (objID, d);
                        if (minDist > d) {
                            minDist = d;
                            minItem = objID;
                        }
                    }
                }
                startID = minItem;
            } while (minItem >= 0 && visited.Add(startID));
        }