みぃちゃんの頭の中はおもちゃ箱

略してみちゃばこ。泣いたり笑ったり

トライ (Perl版)

2014年07月22日 22時10分06秒 | IT・デジタル
辞書を構築する必要があり、トライを組みました。備忘のためにメモ。

ρ(∂_∂) ソースだよ☆
trie.pl:
$accept = "\t";	# Any character that never appears in keys

sub add_trie_entry ($$$)
{
	my ($trie, $arr, $val) = @_;
	foreach my $e (@$arr) {
		$trie = (defined $trie->{$e})	?  $trie->{$e}
						: ($trie->{$e} = { });
	}
	$trie->{$accept} = $val;
}

sub print_trie ($$)
{
	my ($trie, $depth) = @_;
	foreach my $c (sort keys %$trie) {
		if ($c eq $accept) {
			print '.' x $depth, "=>", $trie->{$c}, "\n";
		}
		else {
			print '.' x $depth, $c, "\n";
			print_trie( $trie->{$c}, $depth + 1);
		}
	}
}

# An example to show how to build a trie using string keys:
foreach my $d (keys %dic) {
	my @ch = split( //, $d);
	add_trie_entry( \%trie, \@ch, $dic->{$d});
}
print_trie( \%trie, 0);