15 using namespace shogun;
18 m_delta(0), m_theta(0)
24 int32_t theta) :
CStringKernel<char>(), m_delta(delta), m_theta(theta)
43 void CDistantSegmentsKernel::init()
52 int32_t aLength=0, bLength=0;
59 if ((aLength<1)||(bLength<1))
70 int32_t CDistantSegmentsKernel::bin(int32_t j, int32_t i)
76 return j*(j-1)*(j-2)/6;
78 else if (i==2 && j>=2)
86 int32_t tLength, int32_t delta_m, int32_t theta_m)
89 int32_t* i_=
SG_MALLOC(int32_t, delta_m+1);
90 int32_t* l_=
SG_MALLOC(int32_t, delta_m+1);
91 for (int32_t j_s=0; j_s<=(int32_t) sLength-1; j_s++)
93 for (int32_t j_t=0; j_t<=(int32_t) tLength-1; j_t++)
95 if (s[j_s-1+1]==t[j_t-1+1])
105 while (i<=n&&s[j_s-1+i]==t[j_t-1+i])
108 l_[k]=i_[2*k+1]-i_[2*k]+1;
110 while (i<=n&&s[j_s-1+i]!=t[j_t-1+i])
113 c+=bin(l_[0], 3)-2*bin(l_[0]-theta_m, 3)
114 +bin(l_[0]-2*theta_m, 3);
116 for (int32_t r=1; r<=k; r++)
118 c1+=bin(l_[r], 2)-bin(l_[r]-theta_m, 2);