Например:
print_r( permutations_with_repetition(3, array('a', 'b')) );
Результат:
Array
(
[0] => aaa
[1] => aab
[2] => aba
[3] => abb
[4] => baa
[5] => bab
[6] => bba
[7] => bbb
)
Последовательность, в которой выводится результат, не играет роли.
Роль играет быстродействие.
PS: видел такую функцию на php для перестановок, а вот для размещений не нашёл.
Спустя 34 минуты, 59 секунд (21.07.2010 - 00:03) KaFe написал(а):
function pwr($a,$b)
{
$amount = pow(count($b),$a);
$array = array();
while ($amount<>count($array))
{
for ($x=0;$x<$a;$x++) $text.=$b[array_rand($b)];
if (!in_array($text,$array))
{
$array[] = $text;
$i++;
}
unset($text);
}
return $array;
}
для таких значений print_r(pwr(10, array('a', 'b'))); выполняется 0.526 сек.
Спустя 1 час, 40 минут, 59 секунд (21.07.2010 - 01:44) Reflex написал(а):
KaFe, количество размещение с повторениями из 10 элементов по 6 равно одному миллиону. Представьте что делает предложенный вами вариант кода, когда остаётся заполнить один последний, миллионный элемент. Возможно моя вина, дал слишком простой пример, но ведь написал про быстродействие.
Спустя 1 час, 10 минут, 45 секунд (21.07.2010 - 02:55) dr_Lev написал(а):
Может так?:
Прошу прощения за возможные ошибки писал на колене
fucntion tratata($count, $chars){
if ($count > 1){
$arr = tratata($count-1, $chars);
$result = array();
foreach ($chars as $char){
foreach ($arr as $item){
$result[] = $char.$item;
}
}
return $result;
}
return $chars;
}
print_r tratata(3, array('a','b'));
Прошу прощения за возможные ошибки писал на колене
Спустя 7 часов, 42 минуты, 53 секунды (21.07.2010 - 10:38) KaFe написал(а):
Ну тогда вот так
Это выражение print_r(pwr(10, array('a', 'b'))); выполняет за 0.034 сек

function pwr($a,$b)
{
$count = count($b);
$amount = pow($count,$a);
$array = array();
for ($x=0;$x<$a;$x++)
{
$i = -1;
while (count($array[$x])<>$amount)
{
for ($y=0;$y<$count;$y++)
{
for($r=0;$r<(pow($count,$x));$r++)
{
$i++;
$array[$x][$i]=$b[$y];
}
}
}
}
for ($k=0;$k<$amount;$k++)
{
$u++;
for ($x=0;$x<$a;$x++)
{
$arr[$u].=$array[$x][$k];
}
}
return $arr;
}
Это выражение print_r(pwr(10, array('a', 'b'))); выполняет за 0.034 сек
Цитата |
KaFe, количество размещение с повторениями из 10 элементов по 6 равно одному миллиону |
Проверил на том коде, пишет мало времени, проверил на этом коде пишет мало оперативы



Спустя 26 минут, 35 секунд (21.07.2010 - 11:05) sergeiss написал(а):
Цитата (Reflex @ 21.07.2010 - 00:28) |
Нужна функция, принимающая на входе массив символов и число, а возвращающая массив всех возможных размещений с повторениями...... |
Возьми функции из Википедии, по твоей же ссылке, и перепиши их под ПХП. В чем проблемы?
Особенно джавовская функция хорошА. Прямо под ПХП заточена
