通过降低数值对Btree进行排序

时间:2013-09-17 02:18:18

标签: perl sorting

我在面试时遇到了一个疯狂的问题。他们希望我提供可以解决系统中相当大问题的工作代码。但是,我应该在我的系统上开发这个代码,而不是他们的。他们没有告诉我他们使用的是什么版本的Perl,我无法创建包含他们将运行我的代码的数千万条记录的数据库。所以基本上,我是盲目的,我无法测试我的代码。

我似乎无法解决的问题是如何按数值降序排列DB_FILE DB_BTREE。在处理了数百万个域名记录之后,我应该选出前五十个。这是我正在使用的代码:

$DB_BTREE->{'compare'} = \&compare_values;

unlink "domain_count_btree";
tie my %domain_count, "DB_File", "domain_count_btree", O_RDWR|O_CREAT, 0666,
$DB_BTREE or die "Cannot open file 'domain_count_btree': $!\n";

一旦我使用域名及其计数填充%domain_count,我会尝试将这50个值排除在外:

my $num_top_domains = min(50, $total_count);
my @top_domains_names = ();
my @top_domains_counts = ();
my $current_count = 0;
while (($current_count <= $num_top_domains) && ((my $domain, my $count) = each
%domain_count))
{
    push(@top_domains_names, $domain);
    push(@top_domains_counts, $count);
    $current_count++;
}

我的排序功能是:

sub compare_values
{
    my ($key1, $key2) = @_;
    $domain_count{$key2} <=> $domain_count{$key1};
}

我的理解是每次调用&#34;每个%domain_count&#34;调用排序功能。但是,我不确定我实际上是按照数值下降的顺序对键值对进行排序,而且我不确定我是否会返回前50位。

当然,剧本比我所展示的要大得多。我希望这足以进行分析。所有问题和建议都表示赞赏。

问候。

0 个答案:

没有答案