26 package boyermooredemo;
28 import java.util.Iterator;
29 import java.util.TreeMap;
58 private TreeMap<Character,Integer>
delta1;
92 public int BMA(String P, String T)
122 pomI = Integer.valueOf(m);
128 pat =
new char[m + 1];
136 for (
int i = 0; i <
m; i++)
138 pat[i+1] = P.charAt(i);
140 pomI = Integer.valueOf(i+1);
144 pomC = Character.valueOf(pat[i+1]);
152 pomI = Integer.valueOf(n);
157 text =
new char[n + 1];
158 for (
int i = 0; i <
n; i++)
160 text[i+1] = T.charAt(i);
218 pomI = Integer.valueOf(n-m+1);
221 for (
int z = 0; z <
m; z++)
223 pomC = Character.valueOf(pat[z+1]);
227 for (
int z = 0; (z < (2*m+presah)) && (vypsano <
n); z++)
229 pomC = Character.valueOf(text[z+1]);
253 for (
int z = 3*m+presah-1; z >= 0; z--)
255 if ((z >= (2*m - 1)) && (z < (2*m)))
279 pomI = Integer.valueOf(j);
282 pomI = Integer.valueOf(i+j-1);
303 while ((j >= 1) && (pat[j] == text[i+j-1]))
324 pomI = Integer.valueOf(j);
327 pomI = Integer.valueOf(i+j-1);
348 for (
int z = 0; z < 3*
m; z++)
371 pomI = Integer.valueOf(i-1);
379 d1P = delta1.get(text[i+j-1]);
386 pomI = Integer.valueOf(d1P);
389 pomC = Character.valueOf(text[i+j-1]);
390 pomITD1 = poziceVDelta1.get(pomC);
402 pomITD1 = pocetVDelta1 - 1;
418 pomI = Integer.valueOf(d1P);
422 i += Math.max(d1P, delta2[j]);
424 pomPosun = Math.max(d1P, delta2[j]);
428 pomI = Integer.valueOf(i);
431 pomI = Integer.valueOf(i+j-1);
437 for (
int z = 3*m+presah-1; z >= 0; z--)
439 if ((z > (2*m + pomPosun - zvyrazneno - 1)) && (z <= (2*m + pomPosun - 1)))
461 for (
int z = 0; z < (3*m+presah); z++)
463 pom = posun - m + 1 + z;
472 pomC = Character.valueOf(text[pom]);
484 for (
int z = 3*m+presah-1; z >= 0; z--)
486 if ((z >= (2*m - zvyrazneno)) && (z < (2*m)))
505 for (
int z = 0; z < 3*
m; z++)
542 int zvyraznenySloupec = 1;
545 delta1 =
new TreeMap<Character,Integer>();
555 for (
int i = 1; i <=
m; i++)
566 delta1.put(pat[i],(m-i));
571 pomI = Integer.valueOf(i);
582 for (Iterator pomIter = delta1.keySet().iterator(); pomIter.hasNext();)
585 Character pismeno = (Character)pomIter.next();
587 ABMD.
kon.
TAB_D1,0,pom,pismeno.toString()));
588 pomI = delta1.get(pismeno);
597 if (pat[i] == pismeno)
605 zvyraznenySloupec = pom;
616 pocetVDelta1 = pocet;
617 poziceVDelta1 =
new TreeMap<Character,Integer>();
619 for (Iterator pomIter = delta1.keySet().iterator(); pomIter.hasNext();)
621 Character pismeno = (Character)pomIter.next();
622 poziceVDelta1.put(pismeno,pomV);
647 pomI = Integer.valueOf(m);
649 ABMD.
kon.
TAB_D1,1,pocet-1,pomI.toString()));
666 delta2 =
new int[m+1];
667 shoda =
new int[m+1];
701 pomI = Integer.valueOf(m);
703 for (
int j = 0; j <= (m-1); j++)
727 for (
int j = 0; j <= (m-1); j++)
748 pomI = Integer.valueOf(m-j+1);
767 pomI = Integer.valueOf(i);
773 pomI = Integer.valueOf(i-j+1);
789 for (
int z = 0; z <
m; z++)
791 pomC = Character.valueOf(pat[z+1]);
795 ABMD.
kon.
TAB_SR,1,z+1+posun,pomC.toString()));
803 for (
int z = 0; z < (2*m+1); z++)
819 while ((i >= j) && (pat[m-j+1] == pat[i-j+1]))
849 pomI = Integer.valueOf(j);
852 pomI = Integer.valueOf(i-j+1);
855 pomI = Integer.valueOf(m-j+1);
889 pomI = Integer.valueOf(j);
891 ABMD.
kon.
TAB_D2,2,i-j+2,pomI.toString()));
898 delta2[m-j+1] = Math.min(m-i, delta2[m-j+1]);
902 pomI = Integer.valueOf(delta2[m-j+1]);
904 ABMD.
kon.
TAB_D2,3,m-j+2,pomI.toString()));
917 for (
int z = 0; z < (2*m+1); z++)
927 pomI = Integer.valueOf(i);
929 i = i-j+shoda[m-j+1];
956 pomI = Integer.valueOf(i);
959 pomI = Integer.valueOf(i-j+1);
996 j = Math.max(shoda[m-j+1],1);
1027 pomI = Integer.valueOf(j);
1030 pomI = Integer.valueOf(i-j+1);
1033 pomI = Integer.valueOf(m-j+1);
1041 for (
int z = 0; z < (2*m+1); z++)
1090 pomI = Integer.valueOf(shoda[0]);
1118 pomI = Integer.valueOf(s);
1128 for (j = L; j <= s; j++)
1130 delta2[j] = Math.min(delta2[j], s);
1136 pomI = Integer.valueOf(j);
1151 pomI = Integer.valueOf(delta2[j]);
1153 ABMD.
kon.
TAB_D2,3,j+1,pomI.toString()));
1161 pomI = Integer.valueOf(shoda[s]);
1170 pomI = Integer.valueOf(L);
static final int ZADNY_RADEK
static final int POPISEK_L
TreeMap< Character, Integer > poziceVDelta1
static final Color BARVA_IJ
Vyhledávání v řetězci a tvorba seznamu změn GUI.
static final Color BARVA_I
static final int BLOK_DELTA1
static final String JINE_ZNAKY
static final int PROM_POZ
static final int POSUN_VPRAVO
static final String TEXTY_POPISKU_IPJ
static final Color BARVA_MJ
static final int [] TAB_SR_VR
ArrayList< ZmenaZobrazeni > prubehViz
Applet pro demonstraci BMA, základ projektu.
int BMA(String P, String T)
static final Color BARVA_CERNA
static final String TEXTY_POPISKU_D1P
static final String TEXTY_POPISKU_NM
static final int BLOK_BMA
TreeMap< Character, Integer > delta1
Algoritmus(AppletBoyerMooreDemo apABMD)
static final int POPISEK_MJ
static final int POPISEK_IJ
static final Color BARVA_S
Uchování informací o změnách zobrazení při vizualizaci.
AppletBoyerMooreDemo ABMD
static final Color BARVA_BILA
static final Color BARVA_J
static final int BLOK_DELTA2
static final Color BARVA_T