20090914

After the PowerPoint presentation, we spent some time defining a few (hopefully interesting) problems, such as:

SoCBook:  You are trying to develop an app to help people connect online.  There are currently several hundred SoCBook users - your first task is to find the largest group that are all friends.  Your second task is to find the largest group such that none of them are friends.

Shuttle Loading:  You have been hired by NASA to help plan the final flight of the space shuttle to the space station.  There are many items that can be included in the final payload, each with a known potential benefit - your task is to choose a combination that stays within the mass restrictions for the flight, and maximizes the total value.

Travelling Salesperson:  Your task is to find the shortest route among a group of cities, such that you visit each city once and return to your starting point.

Event Scheduling:  Your task is to schedule 200 Orientation Week activities so that nobody is required to be in two places at once.  How many different time slots do you need?

Partition:  You are in charge of a work team, and you have two projects for them to complete.  You know the IQ of each employee.  You want to split the team into two groups so that the total IQ in each group is equal.  

Resource Allocation:  What is the smallest number of defibrillators you can install around campus (and where should you put them) so that there is at least one within 5 minutes of every classroom?


These problems seem quite unrelated - though you may have noticed that there is a common theme of choosing some elements of a large set.  It turns out that these problems have something very profound in common with each other.  We will spend the first part of 365 identifying and exploring the common nature of these and other problems.

To begin this exploration, we took a trip back in time to the 1960's.  We talked about how computers were just starting to become widespread, to the point where it was feasible for small labs or even individual researchers to have a computer at their disposal.  Simple programming languages such as BASIC were becoming available, opening the doors to the development of software by people with a broad range of interests, and a broad range of problems to solve.

People very quickly recognized that the problems they were trying to solve fell into two broad categories:  "easy" and "really hard".  Here we find the first evidence of similarity among the problems listed above - they are all in the "really hard" category.  But "really hard" is a very vague term ... we need to formalize it.