// Lazily fill v's k-best list. void KBestExtractor::LazyKthBest(boost::shared_ptr<KVertex> v, std::size_t k, std::size_t globalK) { // If this is the first visit to vertex v then initialize the priority queue. if (v->visited == false) { // The 1-best derivation should already be in v's k-best list. assert(v->kBestList.size() == 1); // Initialize v's priority queue. GetCandidates(v, globalK); v->visited = true; } // Add derivations to the k-best list until it contains k or there are none // left to add. while (v->kBestList.size() < k) { assert(!v->kBestList.empty()); // Update the priority queue by adding the successors of the last // derivation (unless they've been seen before). boost::shared_ptr<Derivation> d(v->kBestList.back()); LazyNext(*v, *d, globalK); // Check if there are any derivations left in the queue. if (v->candidates.empty()) { break; } // Get the next best derivation and delete it from the queue. boost::weak_ptr<Derivation> next = v->candidates.top(); v->candidates.pop(); // Add it to the k-best list. v->kBestList.push_back(next); } }
TVec<TFltV> TLSHash::GetNearPoints(TFltV Datum) { TVec<TFltV> Candidates = GetCandidates(Datum); TVec<TFltV> NearPoints; for (int i=0; i<Candidates.Len(); i++) { if (IsNear(Datum, Candidates[i])) NearPoints.Add(Candidates[i]); } return NearPoints; }