-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathvptree.min.js
3 lines (3 loc) · 2.89 KB
/
vptree.min.js
1
2
3
/* vptree.js v0.2.3 | https://github.com/fpirsch/vptree.js | ISC Licence. François Pirsch. 2013-2015.
*/
!function(t,r){"function"==typeof define&&define.amd?define(["exports"],function(n){r(t.VPTreeFactory=n)}):r("object"==typeof exports?exports:t.VPTreeFactory={})}(this,function(t){"use strict";function r(t,r,n,e,i){var o=t[e],f=t[e];t[e]=t[n],t[n]=f;for(var u=r,s=r;n>s;s++)i(t[s],o)&&(f=t[u],t[u]=t[s],t[s]=f,u++);return f=t[n],t[n]=t[u],t[u]=f,u}function n(t,r,n,e,i){var o=t[r],f=t[n],u=t[e];return i(o,f)?i(f,u)?n:i(o,u)?e:r:i(o,u)?r:i(f,u)?e:n}function e(t,e,i,o,f){if(0>=i||i>o-e+1)throw new Error("VPTree.nth_element: nth must be in range [1, right-left+1] (nth="+i+")");for(var u,s,a;;){if(u=n(t,e,o,e+o>>1,f),s=r(t,e,o,u,f),a=s-e+1,a===i)return t[s];a>i?o=s-1:(i-=a,e=s+1)}}function i(t,r,n){if(0>r||r>=t.length)throw new Error("VPTree.select: k must be in range [0, list.length-1] (k="+r+")");return e(t,0,r+1,t.length-1,n)}function o(t){return Math.floor(Math.random()*t.length)}function f(t,r,n){for(var e=[],i=0,o=t.length;o>i;i++)e[i]={i:i};var f=u(t,e,r,n);return new c(t,r,f)}function u(t,r,n,e){if(0===r.length)return null;var f,s=r.length;if(e>0&&e>=s){var a=[];for(f=0;s>f;f++)a[f]=r[f].i;return a}var h=o(r),c=r[h];if(r.splice(h,1),s--,c={i:c.i},0===s)return c;var v,g,p,d=t[c.i],m=1/0,y=0;for(f=0,p=s;p>f;f++)v=r[f],g=n(d,t[v.i]),v.dist=g,m>g&&(m=g),g>y&&(y=g);c.m=m,c.M=y;var w=s>>1,b=i(r,w,l),P=r.splice(0,w),M=r;return c.μ=b.dist,c.L=u(t,P,n,e),c.R=u(t,M,n,e),c}function s(t){for(var r=[t||this.tree],n="";r.length;){var e=r.pop();if(e.length)return"["+e.join(",")+"]";if(n+="{i:"+e.i,e.hasOwnProperty("m")&&(n+=",m:"+e.m+",M:"+e.M+",μ:"+e.μ),e.hasOwnProperty("b")&&(n+=",b:["+e.b+"]"),e.hasOwnProperty("L")){var i=e.L;i&&(n+=",L:",n+=i.length?"["+i+"]":s(i))}if(e.hasOwnProperty("R")){var o=e.R;o&&(n+=",R:",n+=o.length?"["+o+"]":s(o))}n+="}"}return n}function a(t){function r(t){for(var r,e,i=0,o=n.length-1;o>=i;)if(r=i+o>>1,e=n[r].priority,t>e)i=r+1;else{if(!(e>t))return r;o=r-1}return-1-i}t=t||5;var n=[],e={get length(){return n.length},insert:function(e,i){var o=r(i);return 0>o&&(o=-1-o),t>o&&(n.splice(o,0,{data:e,priority:i}),n.length>t&&n.length--),n.length===t?n[n.length-1].priority:void 0},list:function(){return n.map(function(t){return{i:t.data,d:t.priority}})}};return e}function h(t,r,n){function e(r){if(null!==r)if(r.length)for(var s=0,a=r.length;a>s;s++){u++;var h=r[s],c=o[h],l=f(t,c);n>l&&(n=i.insert(h,l)||n)}else{var v=r.i,g=o[v],p=f(t,g);u++,n>p&&(n=i.insert(v,p)||n);var d=r.μ,m=r.L,y=r.R;void 0!==d&&(d>p?(m&&r.m-n<p&&e(m),y&&p>d-n&&e(y)):(y&&p<r.M+n&&e(y),m&&d+n>p&&e(m)))}}n=n||1/0;var i=new a(r||1),o=this.S,f=this.distance,u=0;return e(this.tree),this.comparisons=u,i.list()}function c(t,r,n){this.S=t,this.distance=r,this.tree=n,this.search=h,this.comparisons=0,this.stringify=s}var l=function(t,r){return t.dist<r.dist};t.select=i,t.build=f,t.load=function(t,r,n){return new c(t,r,n)}});