暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Perl算法实例---最小值与最大值

EasyPerl 2020-01-07
1601

我们经常需要求一组数据的最小值和最大值, 我们也可以很容易的取到最小值或者最大值:

记录当前的最小值, 然后每个数和最小值比较, 以此得到最小值(最大值)。

这样理论上, 取得最小值需要n-1次比较, 最大值也需要n-1次比较, 如果我们同时需要最小值和最大值, 那么需要2n-2次比较, 也就是大约2n次比较。

那有没有更高效的办法呢?

我们可以这样:

俩俩比较数据, 然后小的和最小值比较, 大的和最大值比较, 这样对于每2个数据, 我们只需要比较3次。对于所有的数据我们只需要 3(n-2)/ 2, 也就是大概1.5n次。

虽然提升并不算特别大, 但是当数据量很大时, 节省的资源也是很可观的。


具体实现:


my @nums = (2,4,9,7,8,1,3,11,33,13,22,5);
my $max;
my $min;




if (@nums % 2){ #奇数个
$max = shift @nums;
$min = $max;
}else{ #偶数个
$max = shift @nums;
if($max < $nums[0]){
$min = $max;
$max = shift @nums;
}else{
$min = shift @nums;
}
}
my $biger;
my $smaller;
while(@nums > 0){
if ($nums[0] > $nums[1]){
$biger = shift @nums;
$smaller = shift @nums;
}else{
$smaller = shift @nums;
$biger = shift @nums;
}
$max = $max > $biger ? $max : $biger;
$min = $min < $smaller ? $min : $smaller;
}




print "max:$max\nmin:$min\n";



 

文章转载自EasyPerl,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论