Reducing a product
In relational database theory, a join between tables can be thought of as a filtered product. A SQL SELECT
statement that joins tables without a WHERE
clause will produce a Cartesian product of rows in the tables. This can be thought of as the worst-case algorithm: a product without any filtering to pick the proper results.
We can use the join()
function to join two tables, as shown in the following commands:
def join(t1, t2, where):): return filter(where, product(t1, t2)))))
All combinations of the two iterables, t1
and t2
, are computed. The filter()
function will apply the given where
function to pass or reject items that didn't fit the given condition to match appropriate rows from each iterable. This will work when the where
function returns a simple Boolean.
In some cases, we don't have a simple Boolean matching function. Instead, we're forced to search for a minimum or maximum of some distance between items.
Assume that we have a table of Color
objects as follows...