All,
In
this node, I pointed out that it is often a waste to sort a list if you were after the top value and that a watermark algorithm should be used instead. I am not sure this rule of thumb holds true when N != 1. The size of list X and N seem to be contributing factors.
Here is the code I used in that node:
sub top_x {
my ($list, $x) = @_;
$x--;
my @top;
$#top = $x;
for my $item ( @$list ) {
next if defined $top[ -1 ] && $item <= $top[ -1 ];
for my $id ( 0 .. $#top ) {
$top[ $id ] = $item and last if ! defined $top[ $id ];
if ( $item > $top[ $id ] ) {
@top[ $id .. $#top ] = ($item, @top[ $id .. $#top - 1]
+);
#splice(@top, $id, 0, $item), pop @top;
last;
}
}
}
return @top;
}
After writing it, I wondered:
- At what value of N does one of the 2 methods (splice vs array slice) beat the other?
- Does the length of the list X and the value of N have to be considered together when deciding?
- Under what circumstances is sorting better than watermarks?
- Is there a better way to keep track of the watermarks other than the one I have shown?
- Is there a better method, other than sorting and watermarks, for determining the top N of a list?
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
|
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.