Марковские цепи

sealse

Новичок
Марковские цепи

Собстно нет ни у кого готового кода по реализации на PHP марковских цепей? :)
 

Gorynych

Посетитель PHP-Клуба
в смысле цепей Маркова? готового кода нет, алгоритмы и примеры реализации (на Perl и C видел) можно поискать через Яндекс
 

sealse

Новичок
На перле и я нашел, вот пример

SMAXGEN = 1000;
$NONWORD = "\п";
$w1 = $w2 = $NONWORD;
# начальное состояние
while (о) { n читать каждую строку ввода
foreach (split)
{
push((s>{$statetab{$w1}
{$w2}
}, $_);
($w1, $w2)
= ($w2, $_);
it множественное присваивание
}
I-push(@{$statetab{$w1}
{$w2}


}, $NONWORD);
# добавить метку конца ввода
$w1 = $w2 = $NONWORD;
for ($i =0; $i < $MAXGEN;
$i++)
{
$suf = $statetab{$w1}
{$w2};
# ссылка на массив $r = int(rand @$suf);
n @$suf - количество элементов
exit if (($t = $suf"->[$r])
eq $NONWORD);
print "$t\n";
($w1, $w2) =
($w2, $t);
# обновить префикс
}

но ох у этот перл... что такое например push((s>{$statetab{$w1}{$w2}}, $_);
или
I-push(@{$statetab{$w1}{$w2}}, $NONWORD);
 

Superman

Новичок
это вполне можно посмотреть в описании синтаксиса языка
 

sealse

Новичок
:) понял, спасибо, кроме всего прочего там повидимому ошибки в примере...
например не push((s>{$statetab{$w1}{$w2}}, $_); а push(@{$statetab{$w1}{$w2}}, $_); от сюда и вопросы...

В любом случа более мение разобрался... надеюсь это именно марковская цепь :):)
но если вдруг у кого есть готовый ПХП пример, буду благодарен...
 

Superman

Новичок
было бы красиво закончить данную тему собственным листингом реализации цепей маркова ;)

книги ведь есть, голова тоже :)
 

LeaetherStrip

Новичок
Интересно, а кроме дорвейщиков кто-нибудь пользуется цепями Маркова? :)
 

sealse

Новичок
Автор оригинала: moxnatiy
Спамиры!!!
Долго думал почему? докопался до доргенов (в том же гугле)... :) Оказывается спамерами бывают профессора университеттов, иначе на кой ляд им такие задачки студентам подсовывать :):):):):)

Но замечу, задача таки была принята у студента БЕЗ подмешивания ключей и зачемто заставили переписать ее не с шагом 2 а с шагом n... (при составлении фраз)

Ну да собстно если кому интересно вот мое произведение - пользуйтесь (не думаю что оно спамерам пригодиться :):):):))

<?
class SeAlSe_textgen_Markov
{
var $input_text;
var $output_text;
var $step;
var $word_struct;
var $new_text_lenght;

function SeAlSe_textgen_Markov( $inp =
array(
"input_text"=>"",
"new_text_lenght"=>5000,
"step"=> 2,
)
)
{
$this->input_text = $inp["input_text"];
$this->new_text_lenght = $inp["new_text_lenght"];
$this->step = $inp["step"];
$this->build_structs();
}

function build_structs()
{
preg_match_all( "|([^ \n\r\t]+)[ \n\r\t]*|ims", $this->input_text, $arr );
$ret = $val = array();
for( $i=1; $i<=$this->step; $i++ ){
if( !( list( $k, $v ) = each( $arr[0] ) ) ) die( "small text" );
if( !$ret ){
$ret[$v] = array();
$param = &$ret[$v];
}else
$param = &$param[$v];
$val[$i] = $v;
}
while ( list( $k, $v ) = each( $arr[0] ) ){
$param[] = $val[$i] = $v;
for( $i=1; $i<=$this->step; $i++ ){
if( $val[$i+1] ) $val[$i] = $val[$i+1];
if( $i == 1 ) $param = &$ret[$val[$i]];
else $param = &$param[$val[$i]];
}
}
$this->word_struct = $ret;
return $ret;
}

function output()
{
$arr = $this->word_struct;
$sep = "";
for( $i=1; $i<=$this->step; $i++ ){
if( !( list( $k, $v ) = each( $arr ) ) ) die( "small text" );
$arr = $v;
$key[$i] = $k;
$text.= $sep.$k;
$sep = " ";
}
$firstkey = $key;
$firsrv = $v;
while( 1 ){
$k = array_rand( $v );
$val = $v = $v[$k];
$text.= $sep.$v;
if( strlen($text) > $this->new_text_lenght ) return $text;
if( !( $v = $this->word_struct[$key[2]] ) ){
$v = $this->word_struct[array_rand( $this->word_struct )];
}else{
$key[1] = $key[2];
}
for( $i=2; $i<$this->step; $i++ ){
$key[$i] = $key[$i+1];
$v = $v[$key[$i]];
}
if( strlen($val) == 0 || strlen($v[$val]) == 0 ){
$key = $firstkey;
$v = $firsrv;
}else{
$key[$i] = $val;
$v = $v[$val];
}
}
}

}
?>
 
Сверху