Я, честно говоря, не пойму задание. Нужно вывести все возможные варианты элементов массива? или только посчитать их количество? с повторениями, без повторений?
блудный сын, ага... пошли пить пиво! пускай сами себе моск ломают. я ссылку дал. Пусть спасибо скажут!
сразу видно, вчера была пятница. От объяснений становится еще непонятнее. Меня в заблужнения вводит факториал. Это, насколько я помню, перестановки без повторений. Сейчас попробую сформулировать, а Вы только скажите, верно я понял или нет. Есть массив (а, б, в) нужно получить: ааа ааб аав аба абб абв ава авб авв баа баб бав бба ббб ббв бва бвб бвв ваа ваб вав вба вбб вбв вва ввб ввв так или нет? Второй вопрос: элементов в таких наборах должно быть сколько??????? 3?? меньше или равно три??любое количество!
все.. в общем, хватайте ссылку которую дал... изменяйте немного последний вариант скрипта (нужно добавить внешний цикл по количеству элементов) и радуйтесь жизни! Все... жена зовет кушать
Верно, но + к этому должны быть помимо тройных комбинаций еще двойные и одинарные. В твоем случае должно быть 3^1 + 3^2 + 3^3 = 39 Так я уже выложил рабочий вариант.
Да, с 26 символами, конечно, не потягаться =) Хочу купить один из последних интеловских серверов за сколько-то там миллионов долларов)))))))))))
На сколько я помню формула такая: кол-во символов возведенная в степень возможных значений символа. Т.е. просто 3^3 т.е. = 27! Это подтверждает листинг из первого поста! ну и вдогонку: двоичная система это два [2]значения бита: 0 или 1. 1 байт - это восемь бит [8] максимальное десятизначное число для байта = 2^8 = 256! так вот тоже самое и для других систем исчисления.
а факториал насколько я помню это вообще другое! Я еще в школе не смог добиться от математички нафиг он нужен! А именно: !5 (факториал 5-ти)... или так: 5! кароче уже не помню где ставится знак "!" !5 = 1*2*3*4*5 = 120
Смифно Правильно его ставить после числа. Без факториала в комбинаторике никуда. А в школьных программах он может не использоваться, поэтому училка и динамила.
S.t.A.M. Все верно, но это для случая, когда числа будут трехзначными. Код (Text): 111 121 131 211 221 231 311 321 331 112 122 132 212 222 232 311 322 332 113 123 133 213 223 233 313 323 333 А тут у нас числа бывают и двухзначными, и однозначными: Код (Text): Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 11 [4] => 12 [5] => 13 [6] => 21 [7] => 22 [8] => 23 [9] => 31 [10] => 32 [11] => 33 [12] => 111 [13] => 112 [14] => 113 [15] => 121 [16] => 122 [17] => 123 [18] => 131 [19] => 132 [20] => 133 [21] => 211 [22] => 212 [23] => 213 [24] => 221 [25] => 222 [26] => 223 [27] => 231 [28] => 232 [29] => 233 [30] => 311 [31] => 312 [32] => 313 [33] => 321 [34] => 322 [35] => 323 [36] => 331 [37] => 332 [38] => 333 ) Факториал часто применяется в смачных формулах из разных областей наук.
Для тех, кто забыл: http://www.nsu.ru/mmf/tvims/chernova/tv/lec/node3.html Автора интересовало: Выбор с возвращением и с учётом порядка Так что да, это кол-во элементов в степени кол-ва выбранных, другими словами из описания: Теорема 4. Общее количество различных наборов при выборе k элементов из n с возвращением и с учётом порядка равняется n^k.
Тема старая, а проблемы актуальные. Взял код из темы, и модернизировал. Жор памяти огромный, но хотя бы удалось минимизировать По скорости тоже есть улучшения time: 0.002428 sec Memory: 4 mb PHP: ini_set('memory_limit', '-1'); // Уберём ограничения по памяти set_time_limit(0); // Уберём лимит времени $usage = memory_get_usage(true); $currentArrOrig = ['a', 'b', 'c', 'd', 'e', 'g']; $listAllOut = $currentArrOrig; // Массив вывода $currentArr = $currentArrOrig; // Текущий массив $m = microtime(1); // Возьмём метку времени запуска $size = count($currentArrOrig); for ($count = 2; $count <= $size; $count++) { $newArr = []; // На каждую итерацию по новой foreach($currentArr as $gg) { // возьмём текущий, и дополним следующими for ($x = 0; $x < $size; $x++) { $newArr[] = $gg . $currentArrOrig[$x]; // дополняем оригинальными } } $listAllOut = array_merge($listAllOut, $newArr); // Если убрать, то жор уйдёт $currentArr = $newArr; // Обновим текущий массив } $time= sprintf('time: %f sec', microtime(1) - $m); print_r($listAllOut ); echo $time, PHP_EOL, 'Memory: ', convert(memory_get_usage(true) - $usage); function convert($size) { $unit=array('b','kb','mb','gb','tb','pb'); return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; }
У автора или размещения с повторением или сочетания с повторением. Судя по объяснению Kreker- это размещения. Есть два варианта (как минимум) их порождения. Ссылка на мою же статью, где есть код и того, и другого алгоритма: https://habr.com/ru/post/311934/
Не стоит гадать. Избавимся от конспирологии, теории заговоров и мыслях о расшифровке секретных кодов. Вся переборная комбинаторика связана в первую очередь с шахматами, во вторую очередь с поиском символьных комбинаций, что может быть применимо в поисковых задачах и расшифровке, допустим, какой-либо древней алфавитной, слоговой, иероглифической письменности.