Жека К Опубликовано 4 Ноября 2005 Жалоба Поделиться Опубликовано 4 Ноября 2005 Доброго времени суток.Не поможите рещить вот такую проблему.Имеется массив,например:a = array("1","2","3","4" и т.д); Необходимо сосчитать результат выполнения его по факториалу,то есть количество уникальных вхождений скажем по 2 значения в данный массив.Разбиваем вручную, получается: 12,13,14,23,24,34, всего 6 штук.А как его разбить при помощи PHP?, ведь возможно будет необходимо узнать количество уникальных вхождений из 20 по 5, причем мне известно, что таких вхождений будет 15504,Пробовал через цикл, array_slice и т.д. никак не получается.Но какой код необходимо сделать ни как не доходит, чтобы ЭТИ САМИ вхождения вырисовывалиь на экране (автоматом). С уважением, Евгений Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SAT Опубликовано 9 Ноября 2005 Жалоба Поделиться Опубликовано 9 Ноября 2005 Жека Кк сожалению плохлохо помню теорию вероятности, на сколько я понял этот перебор из той оперы... можно математическую формулу привести, а то я ее не помню? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
kovpas Опубликовано 9 Ноября 2005 Жалоба Поделиться Опубликовано 9 Ноября 2005 (изменено) n!/(k!*(n-k)!) function factorial( $n ) { if ( $n < 0 ) { return; } if ( $n == 0 ) { return ( 1 ); } $result = $n * factorial( $n - 1 ); return ( $result ); } function combination( $n, $k ) { $fact1 = factorial( $n ); $fact2 = factorial( $k ); $fact3 = factorial( $n - $k ); $result = $fact1 / ( $fact2 * $fact3 ); return ( $result ); } $m = 4; $n = 2; $result = combination( $m, $n ); echo( $result ); Попробуй. Код не тестировал - писал прямо здесь. Серьезных логических ошибок я не вижу. Если есть что-то, то в синтаксисе - парсер выдаст ошибку. Изменено 9 Ноября 2005 пользователем kovpas Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
kovpas Опубликовано 9 Ноября 2005 Жалоба Поделиться Опубликовано 9 Ноября 2005 Ёлы-палы... Тебе надо, чтобы САМИ комбинации рисовались... Сейчас подумаю... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
kovpas Опубликовано 9 Ноября 2005 Жалоба Поделиться Опубликовано 9 Ноября 2005 (изменено) Решение есть. Вечером выложу. Добавлено: Как и обещал - выкладываю. function combinationEcho( /*Array*/ &$array, /*Integer*/$k, /*Integer*/ $from, /*String*/$prevStr ) { if ( $k == 0 ) { echo( "<br>" ); return; } $l = sizeof( $array ); if ( $from + $k > $l ) { echo( "<br>" ); return; } for ( $i = $from; $i < $l; $i++ ) { if ( $i + $k > $l ) { return; } if ( $i != $from ) { echo( $prevStr ); } echo( $array[$i] ); combinationEcho( $array, $k - 1, $i + 1, $prevStr . $array[$i] ); } } $n = 2; $array = array( 1, 2, 3, 4 ); combinationEcho( $array, $n, 0, "" ); Изменено 9 Ноября 2005 пользователем kovpas Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
kovpas Опубликовано 10 Ноября 2005 Жалоба Поделиться Опубликовано 10 Ноября 2005 я тут подумал, $array можно и не передавать в функцию. Память только тратить. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.