package Ġorg . vit riv r . cott ont ail . math . knn . kernels . binary . plain Ċ Ċ import Ġorg . vit riv r . cott ont ail . database . queries . planning . cost . Cost Ċ import Ġorg . vit riv r . cott ont ail . math . knn . basics . Distance Kernel Ċ import Ġorg . vit riv r . cott ont ail . math . knn . kernels . Kernel NotFoundException Ċ import Ġorg . vit riv r . cott ont ail . model . values .* Ċ import Ġorg . vit riv r . cott ont ail . model . values . types . Vector Value Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Distance Kernel ] Ġimplementation Ġto Ġcalculate Ġthe Ġinner Ġproduct Ġdistance Ġbetween Ġ[ query ] Ġand Ġa Ġseries Ġof Ġ[ Vector Value ] s . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ sealed Ġclass ĠInner Product Kernel < T Ġ: ĠVector Value < *> >( final Ġoverride Ġval Ġquery : ĠT ) Ġ: ĠDistance Kernel < T > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ E uclidean Kernel ] Ġimplementation Ġfor Ġthe Ġgiven Ġ[ Vector Value ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġquery Ġ[ Vector Value ] ĠThe Ġ[ Vector Value ] Ġto Ġreturn Ġthe Ġ[ E uclidean Kernel ] Ġfor . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ[ E uclidean Kernel ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠKernel NotFoundException ĠIf Ġno Ġsupported Ġ[ E uclidean Kernel ] Ġcould Ġnot Ġbe Ġfound . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġkernel ( query : ĠVector Value <* >) Ġ= Ġwhen Ġ( query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComplex 6 4 Vector Value Ġ-> ĠComplex 6 4 Vector ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComplex 3 2 Vector Value Ġ-> ĠComplex 3 2 Vector ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDouble Vector Value Ġ-> ĠDouble Vector ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Vector Value Ġ-> ĠFloat Vector ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Vector Value Ġ-> ĠInt Vector ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Vector Value Ġ-> ĠLong Vector ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠKernel NotFoundException ( E uclidean Kernel :: class . java . simple Name , Ġquery ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalculates Ġthe Ġcost Ġof Ġapplying Ġa Ġ[ E uclidean Kernel ] Ġof Ġdimension Ġ[ d ] Ġto Ġa Ġvector . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġd ĠThe Ġdimension Ġused Ġfor Ġcost Ġcalculation . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠEst imated Ġcost . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcost ( d : ĠInt ) Ġ= Ġd Ġ* Ġ( 3 . 0 f Ġ* ĠCost . CO ST _ FLO P Ġ+ Ġ 2 . 0 f Ġ* ĠCost . CO ST _ MEMORY _ ACCESS ) Ġ+ ĠCost . CO ST _ FLO P ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġcost Ġof Ġapplying Ġthis Ġ[ E uclidean Kernel ] Ġto Ġa Ġsingle Ġ[ Vector Value ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġcost : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcost ( this . d ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Inner Product Kernel ] Ġfor Ġa Ġ[ Complex 6 4 Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠComplex 6 4 Vector ( query : ĠComplex 6 4 Vector Value ) Ġ: ĠInner Product Kernel < Complex 6 4 Vector Value >( query ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠComplex 6 4 Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreal Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimag inary Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġthis . query . logical Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi prime Ġ= Ġi Ġshl Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Ġ+= Ġthis . query . data [ ip ri me ] Ġ* Ġvector . data [ ip ri me ] Ġ+ Ġthis . query . data [ ip ri me Ġ+ Ġ 1 ] Ġ* Ġvector . data [ ip ri me Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimag inary Ġ+= Ġthis . query . data [ ip ri me Ġ+ Ġ 1 ] Ġ* Ġvector . data [ ip ri me ] Ġ- Ġthis . query . data [ ip ri me ] Ġ* Ġvector . data [ ip ri me Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( 1 . 0 ) Ġ- ĠComplex 6 4 Value ( real , Ġimag inary ). abs () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Inner Product Kernel ] Ġfor Ġa Ġ[ Complex 3 2 Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠComplex 3 2 Vector ( query : ĠComplex 3 2 Vector Value ) Ġ: ĠInner Product Kernel < Complex 3 2 Vector Value >( query ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠComplex 3 2 Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreal Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimag inary Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġthis . query . logical Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi prime Ġ= Ġi Ġshl Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Ġ+= Ġthis . query . data [ ip ri me ] Ġ* Ġvector . data [ ip ri me ] Ġ+ Ġthis . query . data [ ip ri me Ġ+ Ġ 1 ] Ġ* Ġvector . data [ ip ri me Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimag inary Ġ+= Ġthis . query . data [ ip ri me Ġ+ Ġ 1 ] Ġ* Ġvector . data [ ip ri me ] Ġ- Ġthis . query . data [ ip ri me ] Ġ* Ġvector . data [ ip ri me Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex 6 4 Value ( real , Ġimag inary ). abs () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Inner Product Kernel ] Ġfor Ġa Ġ[ Double Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠDouble Vector ( query : ĠDouble Vector Value ) Ġ: ĠInner Product Kernel < Double Vector Value >( query ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠDouble Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdot p Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot p Ġ+= Ġthis . query . data [ i ] Ġ* Ġvector . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( dot p ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Inner Product Kernel ] Ġfor Ġa Ġ[ Float Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠFloat Vector ( query : ĠFloat Vector Value ) Ġ: ĠInner Product Kernel < Float Vector Value >( query ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠFloat Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdot p Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot p Ġ+= Ġthis . query . data [ i ] Ġ* Ġvector . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( dot p ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Inner Product Kernel ] Ġfor Ġa Ġ[ Long Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠLong Vector ( query : ĠLong Vector Value ) Ġ: ĠInner Product Kernel < Long Vector Value >( query ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠLong Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdot p Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot p Ġ+= Ġthis . query . data [ i ] Ġ* Ġvector . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( dot p ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Inner Product Kernel ] Ġfor Ġa Ġ[ Int Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠInt Vector ( query : ĠInt Vector Value ) Ġ: ĠInner Product Kernel < Int Vector Value >( query ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠInt Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdot p Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot p Ġ+= Ġthis . query . data [ i ] Ġ* Ġvector . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( dot p ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }