### CS373 Summer 2018: Travis Llado, Week 02

Update for the week of 2018-06-15

What did I do this week?
Mostly moving. In class, not a whole lot. I came up with an optimization for the assigned Collatz Conjecture program, but as is often the case it will be much more difficult and less ideal to implement than initially imagined. The idea is that we should pre-cache as many results as possible, but not just any results. We should cache the most valuable possible results. If we define value as speed, then the most valuable results to store in our lookup table would be the nodes in our convergence graph that save us the most computational time. We could calculate that definition of value by measuring the height of each node in the graph, in terms of steps from the end or steps away from 1, multiplied by the number of times that node will be visited when we calculate the convergence length for all numbers 1 through 1,000,000. This seems pretty straight forward, easy to implement. And this part is. But when we think one step farther, we realize that we'll only use the first node in each convergence path. If we have a tall and isolated path in our graph, the top ten nodes might be ranked as the top ten most valuable nodes in the entire graph, but only the top one of them would ever be used. We need to find a way to filter out nodes that will never be visited due to our use of the lookup table. We need to think of a better definition for "value". Of course we could create arbitrarily complex algorithms to predict the best possible answer, but clock-cycles are cheaper than man-hours. It seems like the best solution might be an experiential solution, where we create a table of the n most valuable nodes, then actually run our program again and record how many times each element of the table is used, and re-derive expected value from that.
Also, I found group members. I have a group.

What is in my way?
Not much. The basic assignment is very straight forward, nothing I haven't done before.

What will I do next week?
I'll write the naive, completely unoptimized program and have that all committed and documented and annotated, and then I'll spend a few hours working on the proposed precache optimization. After I create an algorithm for calculating node value in a way such that nodes that will never be visited are given low values, it should run very quickly.

What is my experience of the class?
Good so far. Lectures are useful, plenty of details that I probably wouldn't have learned anywhere else. That's why I came back to school, to pick up those easily overlooked details.
The reading quizzes are sometimes galling, as some of the questions have been trivial. Knowing the name of the person who created a language doesn't teach me anything about the language itself.

What is my recommendation of the week?
I haven't done much in the past week outside of class and moving. I read a book a few weeks ago called The Code Book. It goes through a quick history of cryptography, starting with ancient ciphers and moving up through modern math-based cryptographic methods, all the way from WWII machines up to RSA and quantum cryptography. A very interesting book.