Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Генерация уникальных массивов из элементов одного родителя.

#массивы #алгоритм #php


Здравствуйте.
Частично продвинулся в решении собственной задачи.
Теперь есть смысл перефразировать вопрос:
есть массив из трех элементов: $arr = array("a","b","c")
как возможно генерировать из него уникальные дочерние массивы с двумя элементами
в каждом?
для заданного примера это: 
$arr_1 = array("a", "b");
$arr_2 = array("a", "c");
$arr_3 = array("b", "c");

а также 
как возможно сортировать массив с тремя элементами достигая всех шести возможных
последовательностей элементов?
для заданного примера это:
$arr_1 = array("a","b","c"); *
$arr_2 = array("a","c","b");
$arr_3 = array("b","a","c");
$arr_4 = array("b","c","a");
$arr_5 = array("c","a","b");
$arr_6 = array("c","b","a"); *

*получить исходный и обратный ему массивы трудностей не составляет. вопрос в остальных
четырех вариантах.
Может кто-то сможет предложить в какую сторону копать? 
Нет необходимости писать листинг, мне лишь нужна помощь в составлении алгоритма.    


Ответы

Ответ 1



Могу предложить решение для массива с тремя элементами: $arr = array( 'a', 'b', 'c' ); for ($i = 0; $i < 3; $i++) echo ($arr[$i] . ", "); for ($i = 0; $i < 3; $i++) { $c_arr = $arr; array_splice($c_arr, $i, 1); for ($j = 0; $j < 2; $j++) echo ($arr[$i] . $c_arr[$j] . ", "); } for ($i = 0; $i < 3; $i++) { $c_arr = $arr; array_splice($c_arr, $i, 1); echo ($arr[$i] . $c_arr[0] . $c_arr[1] . ","); echo ($arr[$i] . $c_arr[1] . $c_arr[0] . ","); } На самом деле все оказалось не так сложно. Например, мой метод заключается в простой перестановке элементов без модификации исходного массива.

Ответ 2



Твой вариант. $arr_1 = array("a", "b"); $arr_2 = array("a", "c"); $arr_3 = array("b", "c"); Вариант мой. $arr[0] = array("a", "a"); $arr[0] = array("a", "b"); $arr[0] = array("a", "c"); $arr[0] = array("b", "a"); $arr[0] = array("b", "b"); $arr[0] = array("b", "c"); $arr[0] = array("c", "a"); $arr[0] = array("c", "b"); $arr[0] = array("c", "c"); Можно еще и так Смысл просто в этом какой? Обычно делают как. Берут массив значений. Делают из него другой массив всех элементов, допустим длиной 4 символа. Т.е. $arr = array("a", "b","c","d","e","r" и т.д.); 4 цикла for вложенных чтобы сделать массив. пример. a b c d . . . . . aaaa aaab aaac aaad . . . . zzzy zzzz и т.д. У тебя будет массив со всеми возможными значениями. Вопрос у тебя такой Генерация уникальных строк из элементов одного массива. Так зачем делать кучу массивов? сделай один и с ним потом что душе угодно.

Комментариев нет:

Отправить комментарий