Well keep in mind that you are working only with a subset of data, so the functional dependencies you infer from the data will hold as long as new data is not inserted that could violate any such functional dependencies (assuming you dont know any of dependencies a database is enforcing).
For 2 columns, the solution (as you saw in your example) is pretty trivial, but for multiple columns its a little harder. The obvious (but computationally expensive) solution is to assume all functional dependencies possible exist, then go on eliminate ones that do not work. There are ways of combining results (using recursive and dynamic programming), such as if A->ABC then A->A, A->B, A->C, and so on and those substrings do not need to be checked.
I wrote something similar to this (shameless plug) although it works with the real functional dependencies instead of example data as you have.
http://dbtools.cs.cornell.edu/norm_index.html There are a number of algorithms to solve this faster, and I believe they rely on finding the super keys and keys of the relation (table).
[ December 10, 2005: Message edited by: Scott Selikoff ]