Mam tablicę liczb szesnastkowych i muszę przejrzeć inne liczby i sprawdzić, czy pojawiają się w tej tablicy. Teraz używam pętli foreach
, która za każdym razem przechodzi przez całą tablicę. Czy istnieje sposób, aby przyspieszyć działanie, najpierw sortując tablicę, a następnie wdrażając wyszukiwanie binarne.Wyszukiwanie binarne w tablicy w Perlu
Kod w tej chwili:
sub is_bad_str{
my ($str, @keys) = @_;
my $flag = 0;
my ($key, $hex_num);
if ($str =~ m/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/;){ #'# fixes bad highlighting
$hex_num = $1;
}
if (defined $hex_num){
foreach $key (@keys){
if ($hex_num =~ /\Q$key\E/i){
$flag = 1;
last;
}
}
}
if (($flag == 0) && (defined $hex_num)){
return 1;#Bad str
}else{
return 0;#Good str
}
}
Masz bardzo subtelny błąd w tam. Zmienna match '$ 1' jest * nie * resetowana, więc po jej zdefiniowaniu pozostanie zdefiniowana, niezależnie od tego, czy istnieje dopasowanie w wyrażeniu regularnym. Powinieneś sprawdzić, czy zdefiniowano 'x = ~ y', aby ustalić, czy było dopasowanie – Dancrumb
Czy to praca domowa? Jeśli tak, to jedna rzecz ... jeśli nie, powinieneś używać modułu CPAN, aby to zrobić. – Dancrumb
To nie jest praca domowa. Jaki dokładnie model? Sprawdziłem listę modeli i nie wydaje mi się, że istnieje tam binarny model wyszukiwania. – SIMEL