Compsci 201 Recitation 6
Professor Peck
Jimmy Wei
10/4/2013
In this Recitation
Markov
• If you haven’t yet, snarf Markov
• Look at the main method in MarkovMain.java
• We will implement a new subclass of
AbstractModel called MapMarkovModel, then we will change the main method as follows:
} public static void main(String[] args) {
IModel model = new MarkovModel();
SimpleViewer view = new SimpleViewer(); view.setModel(model);
• Answer #1
} public static void main(String[] args) {
IModel model = new MapMarkovModel();
SimpleViewer view = new SimpleViewer(); view.setModel(model);
Markov
• Here some of the code for the brute() method in MarkovModel; use it to answer #2-5: public void brute(int k, int numLetters) { int start = myRandom.nextInt(myString.length() – k + 1);
String str = myString.substring(start, start + k);
String wrapAroundString = myString + myString.substring(0, k);
ArrayList<Character> list = new ArrayList<Character>(); for (int i=0; i<numLetters, i++) { list.clear(); int pos = 0; while ( (pos = wrapAroundString.indexOf(str, pos)) != -1 && pos < myString.length()) { char ch = wrapAroundString.charAt(pos + k); list.add(ch); pos++;
}
// more code below
Markov
• In MapMarkovModel, you will create a map with String keys and ArrayList<String> values, with the keys representing n-grams in the file and values representing n-grams following those keys.
• Use the following sample map generation code to answer #6-9:
} for (int j=0; j<myString.length(); j++) {
String ngram = myWrapAroundString.substring(j, j+k); if (!myMap.containsKey(ngram)) { myMap.put(ngram, new ArrayList<String>());
}
ArrayList<String> list = myMap.get(ngram); list.add(VALUE_NEEDED_HERE);
Markov
• The assignment will also have you implement the WordNgram class representing a sequence of k words (i.e. a word k-gram)
• Below is a possible implementation of equals() in WordNgram; use it to answer #10-13:
} public class WordNgram { private String[] myWords; public boolean equals(Object o) {
WordNgram other = (WordNgram) o; for (int k=0; k<myWords.length; k++) { if (!myWords[k].equals(other.myWords[k])) { return false; }
} return true;
}
Markov
• As we know, since we are implementing equals() we must also implement hashCode()
• Below is our default implementation for the hashCode() method; use it to answer #14
} public int hashCode() { return 15;
Markov
• Here is another implementation of hashCode(); use it to answer #15:
} public int hashCode() { int sum = 0; for (int k=0; k<myWords.length; k++) { sum += myWords[k].hashCode();
} return sum;
• What if we replaced the body of the for loop with this line? Answer #16: sum = 100 * sum + myWords[k].hashCode();
Markov
• If you’ve made it this far, you’re almost done!
One last question—answer #17!
• Once you finish, submit the Google form to get credit for today’s recitation!
Have a good weekend!