simultaneous multiple key sorting algorithm
Vladimir Panteleev
vladimir at thecybershadow.net
Fri Jan 27 15:33:03 PST 2012
On Friday, 27 January 2012 at 19:36:49 UTC, Andrei Alexandrescu
wrote:
> Here's a multikey sorting problem that's bothering me; I think
> it's well researched but I can't find the right keywords.
>
> Say we have a collection of people with height and hair length
> information. We want to get people who are "tall and
> long-haired". More precisely, we want to order people by
> rank(p.height) + rank(p.hairlength), where rank(p.k) is the
> function that returns the rank of person p if ordered by key k.
>
> The brute force approach would essentially compute the two
> ranks and then sort by their sum. That's three sorts and at
> least one temporary array. But I think things can be done
> considerably better. Any ideas?
I don't think you can get much better than this.
Knowing the rank (for one key) for one element requires looking
at all the other elements. Thus, knowing the rank of all elements
isn't possible in linear time or faster.
Knowing the ranks of only one key doesn't get you much
information regarding the final result. Even the item ranked last
on one key can tie for first place in combination with the other.
These observations seem to impose a strict dependency on the
order the data is calculated. I don't see any shortcuts, but I'd
love to be proven wrong.
You may want to ask on http://cstheory.stackexchange.com/ .
More information about the Digitalmars-d
mailing list