Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Рекурсивное? заполнение массива (матрицы)


Автор: Master_ 18.9.2008, 07:07
Писал на php, В комментариях отметил формулы вычисления
Код

    for ( $m=0; $m<=100; $m++ )//матрица 100 на 100
    {
        for ( $n=0; $n<=100; $n++ )
        {
            if ( !$m ) //если первый элемент массива равен нулю
            {
                $a[$m.','.$n] = $n+1;
            }
            else if ( !$n )//если второй элемент массива равен нулю
            {
                $a[$m.','.$n] = $a[($m-1).','.'1'];
            }
            else//основная формула $a[ $m-1, $a[$m,$n-1] ]
            {                       //1                a(2,2)=5
                #if ( $m==2 && $n==3) echo '<b>$mn: '.$m.' '.$n.'</b>';
                $_m=($m-1);$_n=($a[$m.','.($n-1)]);
                #$a[] =
                #$a[$_m.','.$_n] = $a[$_m.','.$_n] ? $a[$_m.','.$_n] : add($_m,$_n);

                $a[$m.','.$n] = $a[$_m.','.$_n];//2,3
            }
            echo $a[$m.','.$n].' ';
        }
        echo '<br><br>';
    }

Дело в том, что он находит только начальные элементы... По основной формуле он почти сразу же не может найти значения, потому что не вычислялся массив  $a[($m-1), $a[$m.','.($n-1)] ]; здесь береутся значение и вставляется (см. код) и ключи бывают довольно разными и очень большими...

Может есть какой алгоритм?

Вот как должны выводится элементы (жирным обозначены те, что не нашлись):
1 2 3 4 5 6 7 8

2 3 4 5 6 7 8 9

3 5 7 9 11 13 15 17

5 13 29 61 125 153 509

Первые тр строчки от нуля до трех...

Может кому понравилась задачка? smile

Автор: Akina 18.9.2008, 07:54
Поверь на слово - черта с два кто чего поймет. Вместо того, чтобы рисовать свое решение, да к тому же тебя явно не устраивающее, лучше бы потратил силы на вменяемое описание задачи.

Автор: ksili 18.9.2008, 13:05
Цитата(Master_ @  18.9.2008,  11:07 Найти цитируемый пост)

1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 5 7 9 11 13 15 17
5 13 29 61 125 153 509

это арифметические прогрессии. Алгоритм вычисления i-го члена - в школьном учебнике



Автор: Akina 18.9.2008, 13:29
ksili, последняя строка на арифметическую не сильно похожа

Автор: ksili 18.9.2008, 13:52
извиняюсь ошибся. Это рекурсия a(i) = 2*a(i-1) + 3
да и остальные тоже можно рекурсивно описать. 

 Собственно автор спрашивал алгоритм - так вот он smile

Автор: Akina 18.9.2008, 16:09
Не понял - при чем тут рекурсия??? обычное параметрическое задание последовательности.

Автор: Master_ 18.9.2008, 19:11
Нужно сделать 10на10 матрицу.
Что для каждой искать последовательность?!?! Это не вариант!
нужно именно заполнение как-то сделать...

Автор: Akina 19.9.2008, 07:49
Опиши СЛОВАМИ закономерность заполнения.

Автор: Mayk 19.9.2008, 08:26
выглядит как ф-ция Аккермана. 

Автор: ksili 19.9.2008, 09:17
Цитата(Akina @  18.9.2008,  20:09 Найти цитируемый пост)
Не понял - при чем тут рекурсия???

Даа.. чё-то я видать совсем запаренный в тот день был... 
закономерность нашёл, а название ей придумать не смог

Автор: Master_ 19.9.2008, 20:30
Цитата(Mayk @  19.9.2008,  08:26 Найти цитируемый пост)
Аккермана

Точно!
Вот как выглядит: http://ipicture.ru/

Автор: Akina 19.9.2008, 21:13
Ну так и в чем проблема? пишешь тупо рекурсивную функцию вычисления, и там же добавляешь строку занесения элемента в массив, если оба параметра находятся в заданных пределах. После чего просто стартуешь вычисление fnAck(10,10).

PS. Есть только одна мелочь - вычислить fnAck(10,10) тебе не удастся. Просто оперативки не хватит. Вернее стека. Вложенность там получится дичайшая.

Автор: superwolf 20.9.2008, 16:18
из википедии: "число fnAk(4,4)  настолько велико, что количество цифр в порядке этого числа многократно превосходит количество атомов в наблюдаемой части вселенной."
Так что боюсь и здесь не хватит стека) не то что для 10,10

Автор: Master_ 20.9.2008, 16:23
Блин, для четверки уже не находит, вообще может где-то известны числа, больше чем 3:x ? 

Автор: Master_ 20.9.2008, 20:22
Вообще возможно ли решение с числом больше трех? Может етсь где какие хорошие документы по полному описанию?

Автор: Akina 20.9.2008, 20:38
Я когда-то давно ради любопытства считал (4,1). Вложенность максимальная, если я верно помню, была порядка 20000, и около сотни миллионов вызовов. Пришлось писАть специальный код программной организации стека в массиве.

Автор: Mayk 20.9.2008, 20:45
Цитата(Master_ @  21.9.2008,  00:22 Найти цитируемый пост)
Вообще возможно ли решение с числом больше трех? Может етсь где какие хорошие документы по полному описанию? 

Полному описанию чего? user posted image чем не устраивает?

Цитата(Master_ @  20.9.2008,  20:23 Найти цитируемый пост)
Блин, для четверки уже не находит, вообще может где-то известны числа, больше чем 3:x ?  

Ты куда отходил-то?  
Цитата(superwolf @  20.9.2008,  20:18 Найти цитируемый пост)
из википедии: "число fnAk(4,4)  настолько велико, что количество цифр в порядке этого числа многократно превосходит количество атомов в наблюдаемой части вселенной."
Так что боюсь и здесь не хватит стека) не то что для 10,10 

В википедии даже точные значения даны. 

А вообще для чего это безобразие надо? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)