ただいまはてブ指数として評判のH指数を求めるプログラムを書く話に便乗してみる。 H指数を求めることは、配列とその添字(1はじまり)を比較して、はじめて要素の値が添字より小さくなるところの境界を求めることに等しい。これは各要素とその添字の大小関係だけで計算でき、前後の要素を参照する必要がない。従って、いちいち端から順に値を比較しなくても、二分探索を用いれば、O(log n)で境界値を求めることができる。 #!/usr/bin/perl use warnings; use strict; use integer; sub h_index(@) { my @sorted = sort {$b<=>$a} @_; my $size = 1+$#sorted; my $head = 0; my $tail = $size-1; # 配列が空の場合は0を返り値とする。 return 0 if $siz