Advertisement
Guest User

Untitled

a guest
Nov 3rd, 2020
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.73 KB | None | 0 0
  1. public Set<Set<Integer>> hopcroftMinimization() {
  2.   Set<Set<Integer>> P = new HashSet<>();
  3.   Set<Set<Integer>> W = new HashSet<>();
  4.   P.add(new HashSet<Integer>(accepting));
  5.   P.add(setSubtraction(states, accepting));
  6.   W.addAll(P);
  7.  
  8.   while (!W.isEmpty()) {
  9.     System.out.println(W.toString());
  10.     Object[] wArr = W.toArray();
  11.     Object[] pArr = P.toArray();
  12.  
  13.     for (Object A : wArr) {
  14.       W.remove(A);
  15.       System.out.println(W.toString());
  16.       for (char input : validInputs) {
  17.         Set<Integer> X = findX((Set)A, input);
  18.  
  19.         for (Object Y : pArr) {
  20.           Set<Integer> xAndY = intersection(X, (Set)Y);
  21.           Set<Integer> yNotX = setSubtraction((Set)Y, X);
  22.           if (!xAndY.isEmpty() && !yNotX.isEmpty()) {
  23.             P.remove(Y);
  24.             P.add(xAndY);
  25.             P.add(yNotX);
  26.             if (W.contains(Y)) {
  27.               W.remove(Y);
  28.               W.add(xAndY);
  29.               W.add(yNotX);
  30.             }
  31.           } else {
  32.             if (xAndY.size() <= yNotX.size()) {
  33.               W.add(xAndY);
  34.             } else {
  35.               W.add(yNotX);
  36.             }
  37.           }
  38.         }
  39.       }
  40.      
  41.     }
  42.   }
  43.  
  44.   return P;
  45. }
  46.  
  47. public Set<Integer> intersection(Set<Integer> A, Set<Integer> B) {
  48.   Set<Integer> ret = new HashSet<>();
  49.   ret.addAll(A);
  50.   ret.retainAll(B);
  51.   return ret;
  52. }
  53.  
  54. public Set<Integer> setSubtraction(Set<Integer> A, Set<Integer> B) {
  55.   Set<Integer> ret = new HashSet<>();
  56.   ret.addAll(A);
  57.   ret.removeAll(B);
  58.   return ret;
  59. }
  60.  
  61. public Set<Integer> findX(Set<Integer> currA, char currC) {
  62.   Set<Integer> X = new HashSet<>();
  63.   for (int state : currA) {
  64.     if (map.doesInputLeadToState(currC, state)) {
  65.       X.add(state);
  66.     }
  67.   }
  68.   return X;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement