I like the best threads idea. I would suggest the following algorithm to build up the list (pseudocode).
my %threadhash;
sub build_best_nodes_list
my @nodes = get_list of relevant nodes_sorted_by_xp_descending();
my @found;
foreach my $node ( @nodes )
{
last if @found > 10;
unless ( defined $threadhash{$node->{op}->{title}} )
{
push @found, $node->{op};
$threadhash{$node->{op}->{title}} = 0
}
$threadhash{$node->{op}->{title}}++;
return @nodes;
}
That way you would get a list of first (here) 10 "best threads" that contain "best nodes". To weigh them you could sort the threads by the number of "best nodes" it contains or by the sum of rep for those nodes.
|