Saturday, March 29, 2014
Sunday, March 23, 2014
Week 10
This week we finished assignment 2 part II. In the first 'is_regex' function, we have revised so many times since there are a lot of cases needed to be considered. It is also tightly related to the 'build_regex_tree' function. Their codes are quite similar to each other. As each regex type has very different form, it is difficult to put them together. The hardest part I found was to check long regex with parentheses, since it takes a long time to figure out how to separate BarRegex and DotRegex into two parts to check if each part is a regex.
I didn't expect myself to finish writing 'all_regex_permutations' so quickly. When I first read the instruction, I thought it was really hard to do it. But it turns out that it is quite a short function to write. I think it is probably because I've got better with recursion.
This week's lab is really tough. I understood the instruction and our TA helped us a lot and gave us some hint. However, we still didn't manage to find a way to write the function. I found it is especially challenging to do recursion on linked list node and binary tree node classes. I need much more practice on that.
Saturday, March 15, 2014
Week 9
The topic we are working on is binary search tree for this week. Basically, binary search tree presents the nodes in a very orderly way. Nodes greater than the root value is in the right tree and nodes smaller than the root value is in the left tree. Based on this special property of binary search tree, it is much more efficient to implement methods, such as finding a node. If the item is bigger than the root value, it is certain that it is in the right subtree; if the item is smaller, it is certain that it is in the left subtree, and so on.
In the insertion and deletion function, we need to assign a new variable to the original BTNode. After some tracing, I realized that the new variable makes an alias with the original one, so that when we change the original node's left or right subtree, the new variable is being changed as well. That's why we can return the new variable in the end.
Based on this property, functions can be written recursively by calling recursion on either the left tree or the right tree. In the lab, we practiced different ways of writing the same function.
We also did Exercise 3 this week. It is the hardest exercise I've ever done. The sum_to_deepest function took me quite a long time. I didn't think of using recursion involving decreasing the index over each recursion at first. The make_tree function was not so hard to figure out at first, but the auto-marking reported minor mistakes for several times. There are some cases that I didn't consider. Also, even though I checked the docstring using pep8, there was still one more error reporting. Luckily, the due date has been extended so I could fix those small problems.
Saturday, March 8, 2014
Week 8
We are dealing with the 'LinkedList' now. It is quite different from other classes we've learnt before. It links a LinkedList object with another LinkedList object, one after another. The class itself is harder to understand, so are the functions. Adding or deleting an item from the LinkedList isn't so hard to figure out because it simply involves assignment of the attributes to the new values. I found the 'reverse' function very confusing. I couldn't even manage to trace that function. It starts to get more and more confusing with recursion and things like 'self.nxt' or 'self.nxt.nxt'. Also, there are two different ways of building a LinkedList. One is that an item points to another LinkedList with all the remaining items. The other one is an item points to another one (and another and another....) so that we need a 'node' class. Overall, this class seems a lot more complicated than the ones we did before.
Moreover, I found this week's lab quite challenging for me. I have not fully understood how to manage linked list yet. The functions all require some recursion in them. It is not easy for me to figure out the recursion inside LinkedList. I had to spend time working on this lab again.
Subscribe to:
Posts (Atom)