Showing posts with label computational thinking. Show all posts
Showing posts with label computational thinking. Show all posts

Tuesday, January 19, 2010

The Tourist Problem



Prologue: The Tourist Problem was "my invention" way-back in June 1987 when I first came to NUS, Singapore. They are the first set of transparencies I wrote for the course "CS203: Data Structures". Since then, I have used it for a large variety of settings. Recently, I moved it to powerpoint, updated it, added "Hands-On-Activities" and more pedagogical enhancements.

In Week 2 of UIT2201, I covered a fast-track version of "The Tourist Problem".

The Big Picture:  The big goal is to illustrate computational problem solving in computer science, problem statement, problem analysis, problem modelling, problem solving and so on.

Along the way, I wanted to illustrate several things -- (a) asking questions, (b) giving simple, obvious solutions where they exists, and (c) analyzing the solutions; (c) asking more questions to address the problems, and so on. The point is that, if we keep doing this, then at some point, we arrive at interesting version of the problem and can work on interesting solutions.

And, I wanted to debunk the myth that to do interesting computer science, you must do programming.

The Specifics: After sufficient modeling, the problem of scheduling bus trips for the tourists is modelled as a graph colouring problem.  (...post to be continued...)

Saturday, January 16, 2010

UIT2201: Tutorial 1, Week 1

T1 (Week 1), 15-Jan, 2010

Tutorial 1 for UIT2201 is always an interesting experiment for me as it is always difficult to predict the reaction of the students to the unexpected questions that they see being asked and discussed. However, I must say that it went very well indeed! And I must thank all the students for doing that part and going with me on the journey to put on an "IT-thinking" or "computational thinking" hat during the tutorial with me. I threw a question at them, "How many ways are there to find out how many people there are in this room? in this lecture theatre? or in general, in any big groups of people? We went on to talk about divide and conquer (good ways to do it and also bad way to do it) and other creative solutions. (This reminded me of an old writeup about a similar problem. I will find it and post a link later.)

We had interesting discussions on "how to give instructions" (and the many different ways in which to give them as witnessed from the students' contributions) and upon further exploration, it became more obvious that it was not an easy task at all to give "precise and concise instructions". [After classes, I just though of the term "universally executable instructions".] We also explored the question of what level of abstraction should be adopted, discussed divide-and-conquer in this context -- breaking the instructions into big chunks, and giving further details as necessary. We then found similar issues when tackling T1-D3 (automating a process), for many different processes.

Also, one student (was it YingDan?) wanted to try out the 9-ring puzzle, so I will "reset" it and pass it to her next week. Also, I was in a hurry to go to the next appointment. Overall, I was happy with tutorial 1, I hope everyone enjoyed it and learned something too.