Saturday 29 November 2014

Week in Review #9: The last few updates

Week 12 has just been completed. We are now down to our last assignment of the year. Due to the CDF outage that occurred recently, Professor Heap changed the A3 deadline from Nov. 28 (yesterday) to Monday, Dec. 1. (Like any other year, 2014 is going by so quickly. Oh, and let's say thank you to Prof. Heap for being so kind to us.)

I am not very pleased with my mark for Assignment 2. The class average was 75% this time. That's still awesome. I could have done way, way better despite Prof. Heap changing the deadline for it once again. I lost many (precious!) marks for proving a false claim and misunderstanding the definition of floor. I fell into the "0" trap numerous times. (Grr.) The comments on MarkUs and sample solutions can help me do better next time (and in our case, next assignment). I did really well with proving the last two claims, though!

Overall, I passed A2. Phew! *breathes a sigh of relief*

Hitting an all time low in CSC165 enabled me to identify some weak spots. For example, I really, really, really, REALLY need to practice floor proofs and understand the definition of floor because they aren't coming to me easily. I have to keep reminding myself that CSC165 is not an easy course and I should devote a bit more time on assignments and grasping new material. I'm taking five courses this semester so it's not easy but it's doable. From the looks of things, though, I believe I can get a good mark (60% or more) in CSC165 and go on to do a major in computer science. (I'm still not sure if I want to double major in CS and math or do a double minor in two fields.)

My goals for the week are to complete my final assignment with my group and begin studying for the exam. I will keep in touch with my group members regarding the assignment. Once again, my CSC165 and psychology exams are back-to-back, but the good part is that I began studying for my psychology exam Thursday night. It's best to start studying early. I'll begin studying for the CSC165 exam by reading over my past SLOG posts, doing the assignment and going over the course notes, and I'll use my aid sheets for tests 1 and 2 as study notes. I'll make more notes for Big-O and other things.

We looked at different types of functions this week as well as induction. I'd say that this week's lectures combined material from both MAT137 and CSC108. (Yay for complementary courses!) In addition, we examined induction, another MAT137 concept.

When looking at functions in Python, we can write our code like this:

def f(n):
   if n == 0: return 2
   if n == 1: return 3
   if n == 2: return 4

and so forth. Alternatively, we can write:

def f(n):
    return n + 2

However, induction in this course is different. To prove by induction, we do the induction step (including the induction hypothesis) first and then do the base case. In MAT137, we would do the reverse. Once again, we would follow the same proof structure that we are familiar with in CSC165.

I've been looking at other people's SLOGs to see what others are posting about and to also get some ideas for mine. Before I forget, here's one that I found interesting: http://andrewgoupilcsc165.blogspot.ca/. Andrew's SLOG shows tremendous progress in CSC165. He discusses concepts he finds difficult and self-regulates. He also uses Python to tackle problem solving, and I enjoy the use of humour in his posts.

Sunday 23 November 2014

Week in Review #8: Nearing the end of CSC165 :(

This week (Week 11) was extremely short due to having Monday and Tuesday off for Fall Break. There were no tutorials, so no quiz (and no having to wake up at 7:30 on Tuesday!).

CSC165 is drawing to a close pretty soon. We're reaching the last full week of this course. What I've noticed recently is that CSC165 is starting to look more like CSC108 than MAT137 at this point.

That also means we're focusing on the computer science aspect of the course.

Professor Heap stated in his slide that a lot of people develop an interest in computers due to the notion of solving problems systematically. To fulfill this notion of ours, we create programs that are built around algorithms. Algorithms. That's so CSC108! I think to myself. I've heard that word one too many times. In CSC108, we've worked on a lot of algorithms to help us design programs using Python.

We've looked at examples of algorithms in Python. Here's an example that looks to see if a function will halt or not:

def may_halt(s):
    if len(s) % 2 == 0:
       while True: pass # could also use return len(s)
    else:
       print s + " has odd length." In Python 3, we would use                                             # print(s + "has odd length.") 

I believe this was done using Python 2, as there are no brackets surrounding the call on print. The programming styles for both version differ in certain ways.

This function can be evaluated without actually running it in a program such as WingIDE. We only have an if statement that looks at two cases: if the length of variable s is odd, the function will halt, otherwise we will receive a statement saying that the function has odd length. In other words, the function will not halt if s has an odd length. 

A function is non-computable when a function,  f(x), cannot be computed, but it is well-defined. The halt function is non-computable because it satisfies this definition.

I'm going to keep practicing the new concepts because practice makes perfect. 

Sunday 16 November 2014

Week in Review #7: Test #2 results and other things

We have just finished Week 10 off with getting our tests back and doing more Big-O examples, which led up to Big-Ω. (I can't believe we finished our tenth week in CSC165 in the blink of an eye.)

I was very happy with my second test. It was better than the first one. The result from the previous test definitely gave me that boost! Although I messed up on the floor proof, the other two proofs were well done. I had trouble remembering how that proof worked; I've looked at the solutions to the second assignment the previous night, but my answer didn't seem to match up. That's okay. I'll practice proofs involving the definition of floor in time for the exam. This test's duration matched with the previous test's duration, which was 50 minutes. It would be nice if I had a bit more time, perhaps to look over my answers and fix any mistakes before submission, but I was capable of answering all questions in 50 minutes in some way.

I'm feeling very comfortable with proof structures. I'm confident with the outer parts of the proof, but the inner part needs a bit of work because the statements are different. For now, though, I'll keep reading the course notes, making annotations, and going to office hours.

November is a pretty hectic month for us with midterms, assignments and all. At the same time, the material presented in CSC165 is piling up. I must admit, Big-O is a complex concept. I'll let it take time to sink in. CSC165 is a difficult course, so to ensure success, I visit Professor Heap during his office hours on Wednesdays. I also make use of the Computer Science Help Centre to study for tests and work on assignments.

As I mentioned before, I understand the proof structure and the definition of Big-O very well. Proving it requires more practice because it all depends on which statements we get. For instance, Big-O can be done with two functions and polynomials. The proof structures are similar. But to enhance our proof, it's crucial that we begin with scratch work before going on to write the proof.

I think I'll be okay with Big-O and Big-Ω pretty soon. It's new material. Once I get the hang of it, I'll be fine before I write the final exam in a couple weeks' time.

I'll also begin practicing sorting algorithms using the approaches seen in both CSC165 and CSC108.

Saturday 8 November 2014

Week in Review #6 (!): More with Big-O and completion of assignment and test #2

Has it really been two months since we started CSC165? Time whizzes by in the blink of an eye!

The next instalment in my "Week in Review" series is based on Big-O, which we looked at in weeks 8 and 9, as well as the recent assignment and test.

I had my second test on Wednesday. It was quick and straightforward, consisting of three proofs, just like the practice test. The last proof was on the definition of a floor function, or "the floor of x":


I thought, Wasn't this on the assignment? I could do this! The test was a lot easier than I thought and definitely easier than the first one. The testing effect does help a whole lot.

I've been more prepared for this test than the first test, and I think that this test was a success! Getting a low mark on the first test really motivated me to do better this time around! 

Part of my test preparation involved Assignment #2, due two days before the test. It took a while to finish, but I'm hoping I did well on that too. I managed to get some help from friends and a TA at the CS Help Centre. 

This week, we began proving the Big-O of polynomials. We've been practicing a lot of proofs, and so proving them wasn't too difficult. We started by writing a proof structure followed by writing up the actual proof.

Last week was introduction to Big-O. We started off by proving the Big-O of n², which is extremely long and mentally exhausting. I was quite relieved when we were introduced to proving the Big-O of polynomials because they aren't as long and complicated.

The definition of Big-O is as follows:

(for any function, f, that inputs natural numbers and releases non-negative real numbers)

The statement that needs to be proven is:


We start off by picking a positive real number, c, and a natural number, b, that will work. Then we assume that n is a generic natural number in order to introduce ∀. We assume the antecedent, n ≥ B. I'll put it all together using a proof structure:

Let c' = ____ and B' = _______.
Then c' ∈ R⁺and B' ∈ N.
Assume n ∈ N. # in order to introduce ∀
       Assume n ≥ B'. # antecedent; B is an arbitrary natural number
            .
            .
            .
Then ∀ n ∈ N, n ≥ B ⇒ g(n) ≤ cf(n) # introduce ∀ and ⇒
Then ∃ c ∈ R⁺, ∃ B ∈ N∀ n ∈ N, n ≥ B ⇒ g(n) ≤ cf(n) # introduce ∃ for b and c

Big-O of n², worst case, and the upper and lower bounds are still a bit unclear to me, so I'll go to office hours when I can, read the course notes, and practice a lot. I get the proof structure, but the actual proof is complicated and doesn't come to me just as easily. 

Saturday 1 November 2014

Week in Review #5: Assignment + test = added stress

We have just finished Week 8. (Time flies.) I have my second assignment due on Monday night, and my second midterm on Wednesday morning.

Since doing poorly on the first test (my first ever test for university), I have decided to change my approach to studying. However, I will continue to make a study sheet, go over tutorial exercises and quizzes, and do the practice test within the 50 minute time frame. I learned from one of my readings in psychology that one of the best ways to do well on a test is to do a practice test according to research; this is known as the testing effect. What I've changed is that I'm starting to use Prof. Heap's slides more wisely. He has encouraged us to make our own annotations in whichever ways we want. I find that writing notes in my notebook isn't as effective as having the slides in front of me, either electronically or on paper. If everything can be seen in front of me, then there's no point spending time writing copious notes. Having the slides printed out or opened on a program such as Adobe Reader saves time; I could highlight things and write down what I think is important to master a certain concept.

I also have the course notes to look at. I can use them to look at concepts in more detail. I'm hoping I can study with friends, too. I have high hopes that the upcoming test will be a success. (I try to be optimistic; I always aim to move forward.) I just need to be careful not to make any silly mistakes.

In addition, Assignment #2 is a bit shorter than Assignment #1, which took us hours to finish. I hope this assignment will be better than the last one, and I can also use this as a study tool for Wednesday. As the weeks progressed, so did my understanding of proofs. I seem to understand the proof structure and scope of indentation. Now, it's simply a matter of practice; I feel I did not practice well enough for the first test. I need to fix up my time management skills.

This week, we began Big-O and Big-Ω. The proofs for both were time-consuming. The big-O of n² means that there is a set of functions with the input being natural numbers and output being positive, real numbers. We also began sorting algorithms. We took a look at a couple examples using Python. They looked very familiar to me because I'm currently taking CSC108.

I would like to wish everyone the best of luck on the assignment and test!