This week features 3 topics as the title of this post suggests.
Hiding attributes:
Sometimes we run into problems by allowing modifications to attributes outside of classes. In order to prevent such problems we were introduced a method which "modifies" the property of attributes of classes. By doing so we have better control on the attributes and prevent any undesired modifications to them.
As far as I am concerned, this kind of situation have yet to concerned us since we have only been dealing with small piece of codes. However, when dealing with large piece of codes or in the situations where multiple people collaborate to generate one large piece of code, have such tools would be highly preferred.
Equality:
By definition equality means two identical objects. But in the world of programming, equality could vary by programmers self definitions. To define equality by ourselves we can rewrite the __eq__ method which allows us to self define equality.
Mapreduce:
To be discussed in detail in Post #12
Sunday, 24 November 2013
#10
This is a late post for last week. So we had no class and wrote our second term test on Wednesday. It was supposed to be an easy test but somehow I mis-interpreted the third question. Such a tragedy.
The material of the course is not hard but I guess I was off my mind on the day. Hope it will get better in the final exam...
The material of the course is not hard but I guess I was off my mind on the day. Hope it will get better in the final exam...
Saturday, 9 November 2013
#9 Sorting algorithms
Couple of sorting algorithms were introduced this week during lectures.
These are:
selection sort,
merge sort,
quick sort
count sort
built-in sort (timsort)
We implemented the first 4 during lectures and evaluated the performance of each to see how efficient they are. It turns out that built-in sort outperforms most of the other sorting algorithms except count sort when the pool of data to be sorted it rather significant.
So I became curious on the algorithms that timsort implemented. And I was directed to the code Tim Peters implemented using C. Wow I always thought nobody uses C since its low level programming language which is considered painful to compose. So I had a brief discussion with my lab TA on the pros and cons of different programming languages. I was genuinely surprised when he told me the reason why IOS is in a way more smooth than Android. The ground difference between them is the programming language they used. IOS is based on C while Android is based on Java. While C is harder to implement, it allows programmer to take more control such that the program can run more smoothly.
I always thought knowing C is less advantageous as opposed to C++/Java...
These are:
selection sort,
merge sort,
quick sort
count sort
built-in sort (timsort)
We implemented the first 4 during lectures and evaluated the performance of each to see how efficient they are. It turns out that built-in sort outperforms most of the other sorting algorithms except count sort when the pool of data to be sorted it rather significant.
So I became curious on the algorithms that timsort implemented. And I was directed to the code Tim Peters implemented using C. Wow I always thought nobody uses C since its low level programming language which is considered painful to compose. So I had a brief discussion with my lab TA on the pros and cons of different programming languages. I was genuinely surprised when he told me the reason why IOS is in a way more smooth than Android. The ground difference between them is the programming language they used. IOS is based on C while Android is based on Java. While C is harder to implement, it allows programmer to take more control such that the program can run more smoothly.
I always thought knowing C is less advantageous as opposed to C++/Java...
#8 Algorithms
I have been wondering since I started learning C 4 years ago:
There are so many ways of doing things. How do we decide the best out of all the alternatives.
Here we move on to the new topic, which relates to algorithms of computing.
Big Oh.
Some of the models were discussed in class and they all have distinct Big Ohs depending on the algorithm.
Only a brief introduction this week so I will talk more about it next week.
There are so many ways of doing things. How do we decide the best out of all the alternatives.
Here we move on to the new topic, which relates to algorithms of computing.
Big Oh.
Some of the models were discussed in class and they all have distinct Big Ohs depending on the algorithm.
Only a brief introduction this week so I will talk more about it next week.
#6 Assignment 2
First comment that I have on assignment 2 is it is significantly shorter than assignment 1.
However, the difficulty of it is considered more or less the same as opposed to assignment 1. Only difference is the later assignment puts more emphasis on recursion.
The first challenge that came was parsing. At first I was trying to parse the string recursively. Every time we peel off the braces and parse whatever that's in the braces. However since the existence of the *s, it becomes less effective to implement using recursion. So I figured I would be better off using what I already mastered from my experience in C --- Loop/Boolean.
Surprisingly simple to implement using the old fashion. Sometimes it's good to stick to the old ways I guess. lol.
The second part was rather straight forward. The base cases was easy to generalize. Only thing that I got stuck on was that due to nature of computer, it could get too greedy which matching things. Or sometimes it could get too reluctant. These conditions can never co-exist without artificial controls.
The only solution that came to my mind was to take into account all the possibilities, which, in nature, is very inefficient. So I had a brief convo with Danny after class and it turned out that he suggested the same way of solving the problem. The more efficient way will be covered in a second year course..
So I decided to go for the inefficient solution "any[list comprehensions]". And problem solved.
However, the difficulty of it is considered more or less the same as opposed to assignment 1. Only difference is the later assignment puts more emphasis on recursion.
The first challenge that came was parsing. At first I was trying to parse the string recursively. Every time we peel off the braces and parse whatever that's in the braces. However since the existence of the *s, it becomes less effective to implement using recursion. So I figured I would be better off using what I already mastered from my experience in C --- Loop/Boolean.
Surprisingly simple to implement using the old fashion. Sometimes it's good to stick to the old ways I guess. lol.
The second part was rather straight forward. The base cases was easy to generalize. Only thing that I got stuck on was that due to nature of computer, it could get too greedy which matching things. Or sometimes it could get too reluctant. These conditions can never co-exist without artificial controls.
The only solution that came to my mind was to take into account all the possibilities, which, in nature, is very inefficient. So I had a brief convo with Danny after class and it turned out that he suggested the same way of solving the problem. The more efficient way will be covered in a second year course..
So I decided to go for the inefficient solution "any[list comprehensions]". And problem solved.
#5 BST & LinkedList
So finally things started to get more complicated.
Linked List is basically a series of linked nodes that contains a value and a reference to the next node.
Binary Tree is basically a series of linked tree nodes, each contains two children which are of the same type as their parent.
These two new data types are also an application of recursion, using the analogy of trees in nature. This is the time when I appreciate how mysterious and powerful the nature is. As in my other engineering courses, a lot of time, we use such kind of analogies derived from nature and they work just perfect.
Things are getting harder and it takes longer now for me to understand the course material. Guess its time to put my best effort in it now...
Linked List is basically a series of linked nodes that contains a value and a reference to the next node.
Binary Tree is basically a series of linked tree nodes, each contains two children which are of the same type as their parent.
These two new data types are also an application of recursion, using the analogy of trees in nature. This is the time when I appreciate how mysterious and powerful the nature is. As in my other engineering courses, a lot of time, we use such kind of analogies derived from nature and they work just perfect.
Things are getting harder and it takes longer now for me to understand the course material. Guess its time to put my best effort in it now...
Friday, 18 October 2013
#4 Data Structure
No lecture this week.
Exercise 4 relates to data structure. The three data orders are created using the analogy of tree structure. It consists a root and two nodes and the two nodes extends further with the same structure. Again this is heavily related to recursion. Seems like recursion is the natural way to do a lot things.
So far I cannot tell how this tree data structure is more efficient than others. Hope I can find the answer next week.
Subscribe to:
Posts (Atom)