Q182FreeSystemVerilog
Use lower-bound insertion for top-K largest
Interview prompt
Question
Keep the bounded top-K queue sorted and use binary search to locate each insertion position.
Candidate starting point
Implementation scaffold
// Implement here: Explain why the full predicate is captured before insertion.
// Implement here: Explain the required baseline and complexity comparison.
class TopKLargestBinary;
int values[$]; // ascending, size <= k
int k;
int sentinel;
function new(int k, int sentinel = -1);
if (k <= 0) $fatal(1, "k must be positive");
this.k = k;
this.sentinel = sentinel;
endfunction
function automatic int lower_bound(int x);
int low = 0;
int high = values.size();
// Implement here: find the first position whose value is at least x.
endfunction
function void push(int x);
int position;
bit full_before_insert;
// Implement here: update the state for one new observation.
endfunction
function int get_kth();
// Implement here: return the required kth value or sentinel.
endfunction
function void snapshot_desc(ref int out[$]);
// Implement here: replace out with a descending copy of the retained values.
endfunction
endclassReviewed example
Trace one case
Input
K=3; ascending retained queue=[4,7,9]; insert(8)Expected output
lower_bound(8)=2; retained queue=[7,8,9]Binary search locates the insertion point, then the smallest of four candidates is removed to restore the K bound.
What to cover
Requirements
- Implement lower_bound(x) over an ascending queue.
- Insert every value while fewer than K observations are retained.
- Once full, ignore values no greater than the smallest retained value.
- Explain why binary search reduces comparisons but queue insertion still costs O(K).
