-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdiff.min.js
More file actions
6 lines (6 loc) · 1.98 KB
/
diff.min.js
File metadata and controls
6 lines (6 loc) · 1.98 KB
1
2
3
4
5
6
var diff, diffXY, integral, integralXY, extrema, extremaXY;
(function() {
/** JS implementation of "A Linear-Time Algorithm That Locates Local Extrema...", Karen Villaverde, Vladik Kreinovich, (Interval Computations 01/1993; 1993(4))
* @license http://en.wikipedia.org/wiki/MIT_License MIT License */
diff=function(e,t){var n,r;r=enumerate(e);n=Object.keys(r).map(Math.floor);return diffXY(n,r,t)};diffXY=function(e,t,n){if(n>1){t=diffXY(e,t,n-1);e.pop()}var r=Object.keys(e);var i=Object.keys(t);var s=Math.min(r.length-1,i.length-1);for(var o=0;o<s;o++){t[o]=(t[i[o+1]]-t[i[o]])/(e[r[o+1]]-e[r[o]])}t.pop();return t};integral=function(e,t){var n,r;r=enumerate(e);n=Object.keys(r).map(Math.floor);return integralXY(n,r,t)};integralXY=function(e,t,n){if(n>1){t=integral(e,t,n-1)}var r=Object.keys(e);var i=Object.keys(t);var s=Math.min(r.length-1,i.length-1);t[s]=-t[s]*(e[r[s]]-e[r[s-1]]);for(var o=s-1;o>=0;o--){t[o]=-t[i[o]]*(e[r[o+1]]-e[r[o]])+t[i[o+1]]}return t};extrema=function(e,t){var n,r;r=enumerate(e);n=Object.keys(r).map(Math.floor);var i=extremaXY(n,r,t);i.minlist=i.minlist.map(function(t){var n=Math.floor((t[1]+t[0])/2);return Object.keys(e)[n]});i.maxlist=i.maxlist.map(function(t){var n=Math.floor((t[1]+t[0])/2);return Object.keys(e)[n]});return{minlist:i.minlist,maxlist:i.maxlist}};extremaXY=function(e,t,n){var r,i,s,o,u,a,f,l;var c=function(e){var t=[];var n=Object.keys(e);for(var r=0;r<n.length;r++){t[r]=e[n[r]]}return t};t=c(t);e=c(e);r=t.length;i=0;s=t[0];o=t[0];u=[];a=[];f=1;if(typeof n=="undefined"){n=.1}while(f<r){if(i==0){if(!(o-n<=t[f]&&t[f]<=s+n)){if(o-n>t[f]){i=-1}if(s+n<t[f]){i=1}}o=Math.max(o,t[f]);s=Math.min(s,t[f])}else{if(i==1){if(o-n<=t[f]){o=Math.max(o,t[f])}else{l=f-1;while(t[l]>=o-n){l--}u.push([e[l],e[f]]);i=-1;s=t[f]}}else{if(i==-1){if(s+n>=t[f]){s=Math.min(s,t[f])}else{l=f-1;while(t[l]<=s+n){l--}a.push([e[l],e[f]]);i=1;o=t[f]}}}}f++}return{minlist:a,maxlist:u}};var enumerate=function(e){var t=[];var n=Object.keys(e);for(var r=0;r<n.length;r++){t[r]=e[n[r]]}return t}
}());