private void GetClosestFlatDynamic(ClosestToPointQuery q, long top, long count) // count = 2,4,8 { for (long end = Fun.Min(m_size, top + count); top < end; top = 2 * top + 1, count *= 2, end = Fun.Min(m_size, top + count)) { for (long hi = top; hi < end; hi++) { long index = m_perm[hi]; var dist = q.Dist(q.Point, m_aget(m_array, index)); if (dist <= q.MaxDist) { q.List.Add(new IndexDist <double>(index, dist)); } } } }
private void GetClosestFlat(ClosestToPointQuery q, long top, long count) // count = 2,4,8 { for (long end = Fun.Min(m_size, top + count); top < end; top = 2 * top + 1, count *= 2, end = Fun.Min(m_size, top + count)) { for (long hi = top; hi < end; hi++) { long index = m_perm[hi]; var dist = q.Dist(q.Point, m_aget(m_array, index)); if (dist <= q.MaxDist) { q.List.HeapDescendingEnqueue(new IndexDist <double>(index, dist)); if (q.List.Count > q.MaxCount) { q.List.HeapDescendingDequeue(); var md = q.List[0].Dist; q.MaxDist = md; q.MaxDistEps = md + m_eps; } } } } }