I need help, an idea for a permutation algorithm.It is not a simple permutation algorithm because I have series(sequences).The series don't have the same length. I don't want permutations of elements from the same sequence. Example : KP,KT,KU,KL - sequence K TM,TT,TU,TG,TF,TK -sequence T PI,PIP,PIN,PAM,PAC -sequence P Needed results KP TM PI KP TM PIP KU TU PAC ............ I don't want permutations of elements from the same sequence(serie): Example: KP KT TU - WRONG KP TT TU PIS - WRONG Thanks
You want every available permutations (4*6*6 in your example), or a single one? You could insert the values to an array of array: $values = array( array( 'KP', 'KT', 'KU', 'KL' ), array( 'TM', 'TT', 'TU', 'TG', 'TF', 'TK' ), array( 'PI', 'PIP', 'PIN', 'PAM', 'PAC') ) PHP: and now use random numbers to select a single permutation, or loops to iterate on all the permutations: foreach ($values[0] as $v1) { foreach ($values[1] as $v2) { foreach ($values[2] as $v3) { echo $v1 . ', ' . $v2 . ', ' . $v3 . "\n<br />"; } } } PHP:
I want all the permutations , but in a permutation it will not be more than one element from the same sequence EXAMPLE - all are correct KP TM PI PI KP TM TM KP PI In your idea I will have only KP TM PI. This series are only an example. Thank you for the idea, but I can't use your example because the number of series and the length of series is variable n and for that I can't use n foreach (in the example are 3, but in fact is n) so I need something like a recurrent function. wrong: KP KT PI - 2 from the same sequence
So, basically I have : array[1](vector)*array[1](vector) = array[2] 2 dimensions array[2]* array[1] = array[3] 3 dimensions The result will be an array of n dimensions with m lines and k columns , where n,m,k are variables
this will give you a random permutation: <?php function get_item_from_series($values, $series) { if (empty($values[$series])) { return ''; } $rand_index = rand(0, count($values[$series]) - 1); return $values[$series][$rand_index]; } // assume your data is in the format of: $values = array ( array('a','b','c'), array('d','e'), array('f','g'), array('z','y'), // so on.. ); $result_permutation = array(); for ($i = 0; $i < count($values); ++$i) { $result_permutation[] = get_item_from_series($values, $i); } var_dump($result_permutation); ?> PHP: it can be easily tweaked so to produce all permutations. i think