/** @import { Metric } from "../metrics/index.js" */ /** @import { ParametersBallTree } from "./index.js" */ /** * @template {number[] | Float64Array} T * @typedef {Object} ElementWithIndex * @property {number} index * @property {T} element */ /** * Ball Tree for efficient nearest neighbor search. * * A Ball Tree is a metric tree that partitions points into a nested set of * hyperspheres (balls). It is particularly effective for high-dimensional * data and supports any valid metric. * * @class * @category KNN * @template {number[] | Float64Array} T * @extends KNN */ export class BallTree extends KNN { /** * Generates a BallTree with given `elements`. * * @param {T[]} elements - Elements which should be added to the BallTree * @param {ParametersBallTree} [parameters={metric: euclidean}] Default is `{metric: euclidean}` * @see {@link https://en.wikipedia.org/wiki/Ball_tree} * @see {@link https://github.com/invisal/noobjs/blob/master/src/tree/BallTree.js} */ constructor(elements: T[], parameters?: ParametersBallTree); /** * @private * @type {BallTreeNode | BallTreeLeaf} */ private _root; /** @returns {Metric} */ get _metric(): Metric; /** * @private * @param {ElementWithIndex[]} elements * @returns {BallTreeNode | BallTreeLeaf} Root of balltree. */ private _construct; /** * @private * @param {ElementWithIndex[]} B * @returns {number} */ private _greatest_spread; /** * @param {number} i * @param {number} k */ search_by_index( i: number, k?: number, ): { element: T; index: number; distance: number; }[]; /** * @param {T} t - Query element. * @param {number} [k=5] - Number of nearest neighbors to return. Default is `5` * @returns {{ element: T; index: number; distance: number }[]} - List consists of the `k` nearest neighbors. */ search( t: T, k?: number, ): { element: T; index: number; distance: number; }[]; /** * @private * @param {T} t - Query element. * @param {number} k - Number of nearest neighbors to return. * @param {Heap>} Q - Heap consists of the currently found `k` nearest neighbors. * @param {BallTreeNode | BallTreeLeaf} B */ private _search; } export type ElementWithIndex = { index: number; element: T; }; import type { ParametersBallTree } from "./index.js"; import { KNN } from "./KNN.js"; import type { Metric } from "../metrics/index.js"; //# sourceMappingURL=BallTree.d.ts.map