/****************************************************************************** * * Tree repair distance. * * Computes the shortest sequence of edits to transform tree A into tree B. * * This algorithm is intended to be used to score shopping carts, by reporting * the number of edits to convert an observed cart to an expected cart. * * Edit cost assumptions * 1. any subtree can be deleted in its entirety is a single edit. * 2. adding a single instance of specific item that is its generic's default * form is a single edit. This applies to top-level products, and their * children. * 3. changing an attribute value is a single edit. * 4. changing a quantity is a single edit. * ******************************************************************************/ export interface DiffResults { cost: number; edits: Array>; } export declare enum EditOp { NONE = 0, DELETE_A = 1, INSERT_A = 2, REPAIR_A = 3 } export interface Edit { op: EditOp; cost: number; steps: STEP[]; } export interface IRepairs { delete(item: T): Edit; insert(item: T): Edit; repair(observed: T, expected: T): Edit; } export declare type TreeDiffFunction = (costs: IRepairs, observed: T[], expected: T[]) => DiffResults; export declare function treeDiff(costs: IRepairs, observed: T[], expected: T[]): DiffResults;