존재하는 배열 요소에 액세스하는 것이 해시에 삽입하는 것보다 빠를 것입니다. 더하기 측면에서, 두 스케일의 성능은 유사합니다. (복잡성 분석 방법은 뭔가가 아니다 얼마나 빨리, 확장 얼마나 잘.)
배열 요소의
최악의 경우 액세스 : (한정된 길이 키) 해시 요소의
$x = $a[$i]; # O(1)
$a[$i] = $x; $i<@a # O(1)
$a[$i] = $x; # O(1), amortized
최악의 액세스 :
$x = $h{$k}; # O(1)
$h{$k} = $x; # O(1), amortized
("상각 O (1)"의미는 이러한 작업의 N에 대한 (N) O입니다.)
당신의 키를 순차적 정수임을 감안할 때, 당신은 가장 확실히 배열을 사용해야합니다.
my @cache;
sub func {
my ($n) = @_;
return $cache[$n] //= ...;
}
키가 희박한 경우 메모리를 절약하기 위해 해시를 사용하는 것이 좋습니다.
my %cache;
sub func {
my ($n) = @_;
return $cache{$n} //= ...;
}
성능 차이는 측정 할 수 있습니까? 너 뭐 해봤 니? –
@GregHewgill이 경우는 아니지만 배열 액세스가 O (n)이면 요소가 더 많을 것입니다. – Andreas