protected void makeInitialBlocks() { // sink block (for if the automaton isn't complete makeBlock(Collections.singleton(SINK_NODE)); // accepting block Set endNodes = getUnminimizedFA().getEndNodes(); makeBlock(endNodes); // main block Collection nonFinalNodes = new HashSet(getUnminimizedFA().getNodes()); nonFinalNodes.removeAll(endNodes); makeBlock(nonFinalNodes); }
protected void minimize() { makeInitialBlocks(); while (hasSplit()) { Split split = getSplit(); Collection inverseImages = getInverseImages(split); Map inverseImagesByBlock = sortIntoBlocks(inverseImages); for (Object o : inverseImagesByBlock.keySet()) { Block block = (Block) o; Collection members = (Collection) inverseImagesByBlock.get(block); if (members.size() == 0 || members.size() == block.getMembers().size()) { continue; } if (members.size() > block.getMembers().size() - members.size()) { members = difference(block.getMembers(), members); } removeAll(block.getMembers(), members); makeBlock(members); } } }
protected void makeInitialBlocks() { // sink block (for if the automaton isn't complete makeBlock(Collections.singleton(SINK_NODE)); // accepting block Set endNodes = getUnminimizedFA().getEndNodes(); makeBlock(endNodes); // main block Collection nonFinalNodes = new HashSet(getUnminimizedFA().getNodes()); nonFinalNodes.removeAll(endNodes); makeBlock(nonFinalNodes); }
protected void makeInitialBlocks() { // sink block (for if the automaton isn't complete makeBlock(Collections.singleton(SINK_NODE)); // accepting block Set endNodes = getUnminimizedFA().getEndNodes(); makeBlock(endNodes); // main block Collection nonFinalNodes = new HashSet(getUnminimizedFA().getNodes()); nonFinalNodes.removeAll(endNodes); makeBlock(nonFinalNodes); }
protected void makeInitialBlocks() { // sink block (for if the automaton isn't complete makeBlock(Collections.singleton(SINK_NODE)); // accepting block Set endNodes = getUnminimizedFA().getEndNodes(); makeBlock(endNodes); // main block Collection nonFinalNodes = new HashSet(getUnminimizedFA().getNodes()); nonFinalNodes.removeAll(endNodes); makeBlock(nonFinalNodes); }
protected void makeInitialBlocks() { // sink block (for if the automaton isn't complete makeBlock(Collections.singleton(SINK_NODE)); // accepting block Set endNodes = getUnminimizedFA().getEndNodes(); makeBlock(endNodes); // main block Collection nonFinalNodes = new HashSet(getUnminimizedFA().getNodes()); nonFinalNodes.removeAll(endNodes); makeBlock(nonFinalNodes); }
protected void minimize() { makeInitialBlocks(); while (hasSplit()) { Split split = getSplit(); Collection inverseImages = getInverseImages(split); Map inverseImagesByBlock = sortIntoBlocks(inverseImages); for (Iterator blockI = inverseImagesByBlock.keySet().iterator(); blockI.hasNext();) { Block block = (Block) blockI.next(); Collection members = (Collection) inverseImagesByBlock.get(block); if (members.size() == 0 || members.size() == block.getMembers().size()) { continue; } if (members.size() > block.getMembers().size() - members.size()) { members = difference(block.getMembers(), members); } removeAll(block.getMembers(), members); makeBlock(members); } } }
protected void minimize() { makeInitialBlocks(); while (hasSplit()) { Split split = getSplit(); Collection inverseImages = getInverseImages(split); Map inverseImagesByBlock = sortIntoBlocks(inverseImages); for (Iterator blockI = inverseImagesByBlock.keySet().iterator(); blockI.hasNext();) { Block block = (Block) blockI.next(); Collection members = (Collection) inverseImagesByBlock.get(block); if (members.size() == 0 || members.size() == block.getMembers().size()) { continue; } if (members.size() > block.getMembers().size() - members.size()) { members = difference(block.getMembers(), members); } removeAll(block.getMembers(), members); makeBlock(members); } } }
protected void minimize() { makeInitialBlocks(); while (hasSplit()) { Split split = getSplit(); Collection inverseImages = getInverseImages(split); Map inverseImagesByBlock = sortIntoBlocks(inverseImages); for (Object o : inverseImagesByBlock.keySet()) { Block block = (Block) o; Collection members = (Collection) inverseImagesByBlock.get(block); if (members.size() == 0 || members.size() == block.getMembers().size()) { continue; } if (members.size() > block.getMembers().size() - members.size()) { members = difference(block.getMembers(), members); } removeAll(block.getMembers(), members); makeBlock(members); } } }
protected void minimize() { makeInitialBlocks(); while (hasSplit()) { Split split = getSplit(); Collection inverseImages = getInverseImages(split); Map inverseImagesByBlock = sortIntoBlocks(inverseImages); for (Object o : inverseImagesByBlock.keySet()) { Block block = (Block) o; Collection members = (Collection) inverseImagesByBlock.get(block); if (members.size() == 0 || members.size() == block.getMembers().size()) { continue; } if (members.size() > block.getMembers().size() - members.size()) { members = difference(block.getMembers(), members); } removeAll(block.getMembers(), members); makeBlock(members); } } }