Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

markov (The Practice of Programming)

by powerman (Friar)
on Apr 23, 2002 at 10:17 UTC ( #161252=snippet: print w/replies, xml ) Need Help??
Description: Another cook book - "The Practice of Programming" by Kernighan and Pike. And again, realization of "Markov chains algorithm" on page 123 can and must be optimized! So clever C/C++/Java examples and so ugly Perl example... :-(
# variant from "The Practice of Programming"

$MAXGEN  = 10000;
$NONWORD = "\n";
$w1 = $w2 = $NONWORD;
while (<>) {
    foreach (split) {
    push(@{$statetab{$w1}{$w2}}, $_);
    ($w1, $w2) = ($w2, $_);
push(@{$statetab{$w1}{$w2}}, $NONWORD);

$w1 = $w2 = $NONWORD;
for ($i=0; $i<$MAXGEN; $i++) {
    $suf = $statetab{$w1}{$w2};
    $r = int(rand @$suf);
    exit if (($t = $suf->[$r]) eq $NONWORD);
    print "$t\n";
    ($w1, $w2) = ($w2, $t);

# my variant

#!/usr/bin/perl -a0n
push @{$m{$F[$_-1]}{$F[$_]}}, $F[$_+1] for 1..$#F;
1 while defined($F[2+$i++] = splice @{$m{$F[0+$i]}{$F[1+$i]}},
    rand(@{$m{$F[0+$i]}{$F[1+$i]}}), 1);
print join(" ",@F[0..1+$i]),"\n";
Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://161252]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (7)
As of 2017-02-28 02:01 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (394 votes). Check out past polls.