Terry Reedy wrote:
> If I understand correctly, you want to multiiply each of m numbers by each
> of n numbers, giving m*n products. That is O(m*n) work. Inserting (and
> extracting) each of these is a constant size m priority cue takes, I
> believe, O(log(m)) work, for a total of m*n*log(m). That is faster than
> O(m*n*log(m*n)) for sorting m*n random numbers.
Probably, I'm not very good with big O computations. Please forget my
earlier post and please also ignore the unfortunate subject line. I want
the cartesian product of the lists but I want the sums of the items.
Suppose the function to combine the items is
def f(i,j):
return i+j
And the list we want to sort would be made like this:
LR = [f(i,j) for i in L for j in R]
That would be like in my original post. However if the function would
have been:
def g(i,j):
return n*i+j
The resulting cartesian product of the list would be sorted a lot
quicker, especially if the two lists -L and R- we start with are sorted.
(n is the length of both lists here)
So if changing the way the items are combined influences sorting time,
is there also a way to optimize the order of generating the items for
later sorting.
I mean optimized for a specific combining function, in this case
function f.
> I don't know how you would sort by hashing.
Me too. I also learned that hashing is O(1) for non-mathematicians.
Probably I'm suffering from a mild outbreak of spring. I'm currently
trying to stop myself from starting to smoke again or writing critical
posts about PyPy, if it explains anything.
A.
--
http://mail.python.org/mailman/listinfo/python-list