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

SearchKNN() public method

public SearchKNN ( object q, int K, IResult final_result ) : IResult
q object
K int
final_result IResult
return IResult
        public override IResult SearchKNN(object q, int K, IResult final_result)
        {
            var window = 2;
            if (this.Vertices.Count > 16) {
                window = 4;
            }
            var prev = double.MaxValue;
            var curr = 0.0;
            var inserted = new HashSet<int> ();
            var expanded = new HashSet<int> ();

            while (prev > curr) {
                prev = final_result.CoveringRadius;
                for (int i = 0; i < window; ++i) {
                    var res = new Result (K);
                    var next = this.rand.Next (this.Vertices.Count);
                    if (expanded.Add(next)) {
                        this.GreedySearch (q, next, expanded, res);
                        foreach (var p in res) {
                            if (inserted.Add(p.ObjID)) {
                                final_result.Push(p.ObjID, p.Dist);
                            }
                        }
                    }
                }
                curr = final_result.CoveringRadius;
            }
            return final_result;
        }