【发布时间】:2010-09-22 01:12:13
【问题描述】:
我必须对一些整数进行排序,它们的值可以在 30.000.000 到 350.000.000 之间。将有 0 到 65.535 个整数,平均数为 20.000。 RAM 的使用无关紧要,速度很重要。
稍后我还必须将它们分成组,只要其中两个值之间的差距大于 65.535,就会始终设置除法,这就是我需要算法的目的。
如果有任何不同,算法将在 Perl 脚本中使用。
编辑:仔细考虑并阅读答案后,我意识到:我实际上并不关心数据本身。由于我真的只想找到有小差距的组的开始和结束值,所以排序只需要创建桶并且可以丢弃数据。
Edit2:经过一些测试并尝试了所提供的答案,我发现最快的方法是:
my @sort = sort {$a <=> $b} @item_offsets;
my @buckets;
my $start = shift @sort;
push @buckets, [$start,$start];
for my $item ( @sort ) {
if ( $item < $buckets[$#buckets][1]+$gap ) {
$buckets[$#buckets][1] = $item;
}
else {
push @buckets, [$item,$item];
}
}
say $#buckets;
【问题讨论】:
标签: perl algorithm sorting performance