/** * */ package edu.berkeley.nlp.PCFGLA; import java.util.ArrayList; import java.util.List; import edu.berkeley.nlp.util.PriorityQueue; /** * @author petrov * */ public class LazyList { List<HyperEdge> sortedBegining; PriorityQueue<HyperEdge> fringe; int nSorted, nFringe; boolean[] grammarTags; // double bestScore; public LazyList(boolean[] tags){ sortedBegining = new ArrayList<HyperEdge>(); fringe = new PriorityQueue<HyperEdge>(); nSorted = 0; nFringe = 0; grammarTags = tags; // bestScore = Double.NEGATIVE_INFINITY; } public int sortedListSize(){ return nSorted; } public void addToFringe(HyperEdge el){ fringe.add(el, el.score); nFringe++; } // public void addToSorted(HyperEdge el){ // sortedBegining.add(el); // nSorted++; // } public HyperEdge getKbest(int k){ if (k>nSorted){ System.out.println("Don't have this element yet"); return null; // } else if (k==nSorted&&(k==0||!fringe.hasNext())){ // return null; } else if (k==nSorted){ // extract the next best expandNextBest(); } if (k==nSorted) return null; return sortedBegining.get(k); } public void expandNextBest(){ while (fringe.hasNext()) { HyperEdge edge = fringe.next(); boolean isNew = true; for (HyperEdge alreadyIn : sortedBegining){ if (alreadyIn.differsInPOSatMost(edge,grammarTags)) { isNew = false; break; } } if (isNew){ sortedBegining.add(edge); nFringe--; nSorted++; break; } } } }