Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Get n and m
- n=ASCIIt.size();
- m=ASCIIp.size();
- //Reverse t to get t'
- ArrayList<Integer> ASCIIrevt = new ArrayList<Integer>();
- for(int i=0; i<ASCIIt.size(); i++) ASCIIrevt.add(ASCIIt.get(ASCIIt.size()-1-i));
- //Pad t' to higher power of two
- while(power2(ASCIIrevt.size())==false) ASCIIrevt.add(0);
- //Pad p to length of t'
- for(int i=ASCIIp.size(); i<ASCIIrevt.size(); i++) ASCIIp.add(0);
- //Get size of padded t' and p
- revn=ASCIIrevt.size();
- //Get the first two sums
- int sqt=0;
- int sqp=0;
- int sqpt=0;
- sqp=square(ASCIIp, m);
- //Create arrays for multiplication
- Complex[] tprime = new Complex[revn];
- Complex[] p = new Complex[revn];
- for(int i=0; i<ASCIIrevt.size(); i++)
- {
- tprime[i]=new Complex(ASCIIrevt.get(i), 0);
- p[i]=new Complex(ASCIIp.get(i), 0);
- }
- //Create array to hold result of multiplication
- Complex[] pt = new Complex[2*tprime.length];
- //Compute multiplication
- pt=multiPoly(tprime, p, tprime.length);
- sqt=square(ASCIIt.subList(0, m), m);
- for(int i=0; i<n-m+1; i++)
- {
- if(i!=0) sqt=sqt+(ASCIIt.get(i+m-1)*ASCIIt.get(i+m-1))-(ASCIIt.get(i-1)*ASCIIt.get(i-1));
- position=sqt+sqp-(2*(int)round(pt[n-i-1].getRe()))==0?i:-1;
- if(position==i) break;
- }
- System.out.println(position);
Add Comment
Please, Sign In to add comment