1"use strict";(self.webpackChunkmisapplied_math=self.webpackChunkmisapplied_math||[]).push([[932],{9844:function(e,a,t){t.r(a),t.d(a,{ArticleLayout:function(){return N},Head:function(){return x},default:function(){return w}});var n=t(1151),m=t(7294);function l(e){const a=Object.assign({h2:"h2",h3:"h3",p:"p",span:"span",math:"math",semantics:"semantics",mrow:"mrow",mi:"mi",mo:"mo",annotation:"annotation",a:"a",em:"em",mn:"mn",mfrac:"mfrac"},(0,n.ah)(),e.components);return m.createElement(m.Fragment,null,m.createElement(a.h2,null,"Day Four: Domain Specific Search and Sorting Algorithms"),"\n",m.createElement(a.h3,null,"TL/DR"),"\n",m.createElement(a.p,null,"In the most general case itâs impossible to beat an average time complexity of ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mi,null,"log"),m.createElement(a.mo,null,"â¡"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(n\\log(n))")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.1667em"}}),m.createElement(a.span,{className:"mop"},"lo",m.createElement(a.span,{style:{marginRight:"0.01389em"}},"g")),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},"))")))))," when sorting, or\n",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"l"),m.createElement(a.mi,null,"o"),m.createElement(a.mi,null,"g"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(log(n))")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),m.createElement(a.span,{className:"mord mathnormal"},"o"),m.createElement(a.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},"))")))))," when searching. However, for special (but common) use cases, we can do substantially better.\n",m.createElement(a.a,{href:"https://en.wikipedia.org/wiki/Radix_sort"},"Radix sort")," can sort integers in ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"k"),m.createElement(a.mo,null,"â
"),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(k\\cdot n)")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2222em"}}),m.createElement(a.span,{className:"mbin"},"â
"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2222em"}})),m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},")")))))," time, where ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,null,"k")),m.createElement(a.annotation,{encoding:"application/x-tex"},"k")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"0.6944em"}}),m.createElement(a.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k")))))," is the\nlength of the integer in digits. ",m.createElement(a.a,{href:"https://en.wikipedia.org/wiki/Interpolation_search"},"Interpolation search")," will find a\nkey in ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"log"),m.createElement(a.mo,null,"â¡"),m.createElement(a.mi,null,"log"),m.createElement(a.mo,null,"â¡"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(\\log\\log(n))")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mop"},"lo",m.createElement(a.span,{style:{marginRight:"0.01389em"}},"g")),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.1667em"}}),m.createElement(a.span,{className:"mop"},"lo",m.createElement(a.span,{style:{marginRight:"0.01389em"}},"g")),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},"))")))))," on average, assuming that the search data is uniformly distributed."),"\n",m.createElement(a.h2,null,"Radix Sort"),"\n",m.createElement(a.p,null,"CS 101 usually covers the optimality of binary search, and by extension the log linear lower bound on sorting a list.\nHowever, this bound only applies to comparison sorts, and there are many ways to sort without direct comparison. Doing\nso isnât âcheatingâ from an information theoretic standpoint, just as the fact that the ",m.createElement(a.em,null,"average")," ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mn,null,"1"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(1)")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord"},"1"),m.createElement(a.span,{className:"mclose"},")")))))," look-up time\nfor a hash map isnât at odds with the ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"log"),m.createElement(a.mo,null,"â¡"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(\\log(n))")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mop"},"lo",m.createElement(a.span,{style:{marginRight:"0.01389em"}},"g")),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},"))")))))," lower bound on search. Hash maps have worst case ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(n)")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},")"))))),"\nperformance, so trading quick average look-ups for the ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"log"),m.createElement(a.mo,null,"â¡"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(\\log(n))")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mop"},"lo",m.createElement(a.span,{style:{marginRight:"0.01389em"}},"g")),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},"))")))))," bound provided by binary search doesnât change\nanything. The ability to âdo betterâ given restrictions is a reoccurring theme in CS."),"\n",m.createElement(a.p,null,"Radix sort works well for values with a limited number of digitsânote the ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"k"),m.createElement(a.mo,null,"â
"),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(k\\cdot n)")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2222em"}}),m.createElement(a.span,{className:"mbin"},"â
"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2222em"}})),m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},")")))))," part. The worst case\nperformance for radix is the same as the average case making it pretty deterministic. Also note that weâre not\nrestricted to sorting numbers. ASCII maps English characters to integers in ascending order, so radix sort can be\napplied to text as well. You can probably f
1ind a similar mapping for just about any type of input that you would want to\nsort. Itâs a great alternative to traditional sort methods for many applications. However, thereâs always the break even\npoint where ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,null,"d"),m.createElement(a.mo,null,">"),m.createElement(a.mi,null,"log"),m.createElement(a.mo,null,"â¡"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"d > \\log(n)")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"0.7335em",verticalAlign:"-0.0391em"}}),m.createElement(a.span,{className:"mord mathnormal"},"d"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2778em"}}),m.createElement(a.span,{className:"mrel"},">"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2778em"}})),m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mop"},"lo",m.createElement(a.span,{style:{marginRight:"0.01389em"}},"g")),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},")"))))),", after which traditional sort methods have the advantage."),"\n",m.createElement(a.h2,null,"Interpolation Search"),"\n",m.createElement(a.p,null,"You really need to understand your data before applying interpolation search since the worst case scenario is ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,{mathvariant:"double-struck"},"O"),m.createElement(a.mo,{stretchy:"false"},"("),m.createElement(a.mi,null,"n"),m.createElement(a.mo,{stretchy:"false"},")")),m.createElement(a.annotation,{encoding:"application/x-tex"},"\\O(n)")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),m.createElement(a.span,{className:"mord mathbb"},"O"),m.createElement(a.span,{className:"mopen"},"("),m.createElement(a.span,{className:"mord mathnormal"},"n"),m.createElement(a.span,{className:"mclose"},")"))))),"\n(and much worse than that in reality as youâll end up doing lots of unnecessary branching). However, if you know that\nyour data is reasonably uniform, interpolation search is a great way to go. The intuition is simple. If you have an\nindex thatâs uniformly distributed between ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,null,"a")),m.createElement(a.annotation,{encoding:"application/x-tex"},"a")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"0.4306em"}}),m.createElement(a.span,{className:"mord mathnormal"},"a")))))," and ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,null,"b")),m.createElement(a.annotation,{encoding:"application/x-tex"},"b")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"0.6944em"}}),m.createElement(a.span,{className:"mord mathnormal"},"b")))))," and youâre looking for a value ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,null,"x")),m.createElement(a.annotation,{encoding:"application/x-tex"},"x")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"0.4306em"}}),m.createElement(a.span,{className:"mord mathnormal"},"x"))))),", a good place to start is an\ninterpolation: ",m.createElement(a.span,{className:"math math-inline"},m.createElement(a.span,{className:"katex"},m.createElement(a.span,{className:"katex-mathml"},m.createElement(a.math,{xmlns:"http://www.w3.org/1998/Math/MathML"},m.createElement(a.semantics,null,m.createElement(a.mrow,null,m.createElement(a.mi,null,"a"),m.createElement(a.mo,null,"+"),m.createElement(a.mi,null,"x"),m.createElement(a.mfrac,null,m.createElement(a.mrow,null,m.createElement(a.mi,null,"x"),m.createElement(a.mo,null,"â"),m.createElement(a.mi,null,"a")),m.createElement(a.mrow,null,m.createElement(a.mi,null,"b"),m.createElement(a.mo,null,"â"),m.createElement(a.mi,null,"a")))),m.createElement(a.annotation,{encoding:"application/x-tex"},"a + x \\frac{x - a}{b - a}")))),m.createElement(a.span,{className:"katex-html","aria-hidden":"true"},m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),m.createElement(a.span,{className:"mord mathnormal"},"a"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2222em"}}),m.createElement(a.span,{className:"mbin"},"+"),m.createElement(a.span,{className:"mspace",style:{marginRight:"0.2222em"}})),m.createElement(a.span,{className:"base"},m.createElement(a.span,{className:"strut",style:{height:"1.2057em",verticalAlign:"-0.4033em"}}),m.createElement(a.span,{className:"mord mathnormal"},"x"),m.createElement(a.span,{className:"mord"},m.createElement(a.span,{className:"mopen nulldelimiter"}),m.createElement(a.span,{className:"mfrac"},m.createElement(a.span,{className:"vlist-t vlist-t2"},m.createElement(a.span,{className:"vlist-r"},m.createElement(a.span,{className:"vlist",style:{height:"0.8023em"}}
1,m.createElement(a.span,{style:{top:"-2.655em"}},m.createElement(a.span,{className:"pstrut",style:{height:"3em"}}),m.createElement(a.span,{className:"sizing reset-size6 size3 mtight"},m.createElement(a.span,{className:"mord mtight"},m.createElement(a.span,{className:"mord mathnormal mtight"},"b"),m.createElement(a.span,{className:"mbin mtight"},"â"),m.createElement(a.span,{className:"mord mathnormal mtight"},"a")))),m.createElement(a.span,{style:{top:"-3.23em"}},m.createElement(a.span,{className:"pstrut",style:{height:"3em"}}),m.createElement(a.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})),m.createElement(a.span,{style:{top:"-3.394em"}},m.createElement(a.span,{className:"pstrut",style:{height:"3em"}}),m.createElement(a.span,{className:"sizing reset-size6 size3 mtight"},m.createElement(a.span,{className:"mord mtight"},m.createElement(a.span,{className:"mord mathnormal mtight"},"x"),m.createElement(a.span,{className:"mbin mtight"},"â"),m.createElement(a.span,{className:"mord mathnormal mtight"},"a"))))),m.createElement(a.span,{className:"vlist-s"},"â")),m.createElement(a.span,{className:"vlist-r"},m.createElement(a.span,{className:"vlist",style:{height:"0.4033em"}},m.createElement(a.span))))),m.createElement(a.span,{className:"mclose nulldelimiter"})))))),". Interpolation search does this repeatedly, subdividing intervals and\ninterpolating again. We can apply the same principals to an arbitrary distribution; the uniform distribution was chosen\nas it leads to a simple, canonical implementation with provable bounds. Hereâs a derivation of the\n",m.createElement(a.a,{href:"https://www.cs.technion.ac.il/~itai/publications/Algorithms/p550-perl.pdf"},"time complexity for interpolation search"),"."))}var s=function(e){void 0===e&&(e={});const{wrapper:a}=Object.assign({},(0,n.ah)(),e.components);return a?m.createElement(a,e,m.createElement(l,e)):l(e)},r=t(1883),c=t(3298),i=t(106),o=t(6701),h=t(6679),E=t(7641),p=t(2229),u=t(4273),g=t(9380),d=t(3452);const N=e=>{let{children:a,pageContext:t,...l}=e;const s=(0,c.tm)(),[E,N]=m.useState(!1);m.useEffect((()=>{N("undefined"!=typeof history&&history.length>0)}),[s]);const{frontmatter:{title:w,date:x}}=t;return m.createElement(o.Ar,Object.assign({pageContext:t},l),m.createElement(i.W,{className:"mt-16 lg:mt-32"},m.createElement("div",{className:"xl:relative"},m.createElement("div",{className:"mx-auto max-w-2xl"},E&&m.createElement("button",{type:"button",onClick:()=>{(0,r.navigate)(-1)},"aria-label":"Go back to articles",className:"group mb-8 flex h-10 w-10 items-center justify-center rounded-full bg-white shadow-md shadow-zinc-800/5 ring-1 ring-zinc-900/5 transition dark:border dark:border-zinc-700/50 dark:bg-zinc-800 dark:ring-0 dark:ring-white/10 dark:hover:border-zinc-700 dark:hover:ring-white/20 lg:absolute lg:-left-5 lg:mb-0 lg:-mt-2 xl:-top-1.5 xl:left-0 xl:mt-0"},m.createElement(p.Y,{className:"h-4 w-4 stroke-zinc-500 transition group-hover:stroke-zinc-700 dark:stroke-zinc-500 dark:group-hover:stroke-zinc-400"})),m.createElement("article",null,m.createElement("header",{className:"flex flex-col"},m.createElement("h1",{className:"mt-6 text-4xl font-bold tracking-tight text-zinc-800 dark:text-zinc-100 sm:text-5xl"},w),m.createElement("time",{dateTime:x,className:"order-first flex items-center text-base text-zinc-400 dark:text-zinc-500"},m.createElement("span",{className:"h-4 w-0.5 rounded-full bg-zinc-200 dark:bg-zinc-500"}),m.createElement("span",{className:"ml-3"},(0,u.p)(x)))),m.createElement(g.M,{className:"mt-8"},m.createElement(n.Zo,{components:{a:e=>{let{ref:a,href:t,...n}=e;return m.createElement(h.rU,Object.assign({to:t||""},n))},code:e=>{let{children:a,className:t}=e;return t?m.createElement(d.o,{className:t},a):m.createElement("code",null,a)}}},a)))))))};function w(e){return m.createElement(N,e,m.createElement(s,e))}const x=e=>{let{pageContext:{frontmatter:a,author:t,imageURL:n,...l},data:s,...r}=e;const{title:c,description:i}=a,{name:h,githubUsername:p,linkedinUsername:u,twitterUsername:g}=t,d=s.site.siteMetadata.siteUrl,N=new URL(r.location.pathname,d).href;return m.createElement(m.Fragment,null,m.createElement(o.Fb,Object.assign({title:c,description:i,author:h,githubUsername:p,linkedinUsername:u,twitterUsername:g,image:n?new URL(n,d).href:void 0,pageContext:l,data:s},r)),m.createElement(E.G5,{siteUrl:d,canonicalUrl:N,frontmatter:a,author:t}))}}}]); 2//# sourceMappingURL=component---src-components-article-layout-tsx-content-file-path-home-runner-work-klittlepage-com-klittlepage-com-src-articles-2013-12-15-twelve-days-2013-domain-specific-search-and-sort-mdx-125f79525a5e34b3125b.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.