Jump to content

need algorithm for all possible combinations.. please help


vanderson

Recommended Posts

i need algorithm that will generate all possible combinations of 6 elements from a given array of 12 elements... the algorithm i have been using was good only for up to 10 element array.. since the number of combinations is rapidly increasing i need more efficient algorithm because there is not enough memory to run mine.. here is mine algorithm:

<?
ini_set('memory_limit', '1000M');
$y=0;
$group=array(49,21,32,31,45,22,34,23,43,20,24,25); //12 element array
foreach($group as $k =>$v1){
    foreach($group as $k => $v2){
        foreach($group as $k => $v3){
            foreach($group as $k => $v4){
                foreach($group as $k => $v5){
                    foreach($group as $k => $v6) {
                        
                    $combo[$y][0]=$v1;
                    $combo[$y][1]=$v2;
                    $combo[$y][2]=$v3;
                    $combo[$y][3]=$v4;
                    $combo[$y][4]=$v5;
                    $combo[$y][5]=$v6;
            $y++;
                    }
            }
            }
             }
             }
} ?>

there should be more efficient way to do this.. any help is appreciated :)

I'm confused about your goal, and don't feel like wrapping my head around 10 foreach statements....  So...

 

 

Let's say you had the dataset 1,2,3,4,5,6,7,8,9,10,11,12.  You would want something like:

 

1 7

1 8

1 9

1 10

1 11

1 12

2 7

2 8

2 9

2 10

 

So on?

<?php
function factorial($num) {
    if ($num == 1) { 
        return 1; 
    }
    return $num * factorial($num - 1);
}

function permutations($array, $num) {
    return factorial(count($array)) / (factorial(count($array) - $num));
}

$group=array(49,21,32,31,45,22,34,23,43,20,24,25);
echo permutations($group, 6);
?>

 

If my math skills aren't failing me, that should work.

Thanks, but i want the actual list of permutations for example.

I have the following array: 1,2,3,4,5,6,7,8,9,10,11,12  I want all possible combinations of 6 elements.. Like this:

1,2,3,4,5,6

1,2,7,10,11,12

7,8,9,10,11,12

 

and so on

 

 

 

try

<?php
function comb($a, $len){
if ($len > count($a))return 'error';
$out = array();
if ($len==1) {
	foreach ($a as $v) $out[] = array($v);
	return $out;
}
$len--;
while (count($a) > $len) {
	$b = array_shift($a);
	$c = comb($a, $len);
	foreach ($c as $v){
		array_unshift($v, $b);
		$out[] = $v;
	}
}
return $out;
}
$test = array(1,2,3,4,5,6,7,8,9,10,11,12);
$a = comb($test,6);
print_r($a);
?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.