Я аспирант и имею небольшие знания по PHP и SQL. У меня есть квадратная матрица размером примерно 12x12, и я беру данные для ее заполнения из базы данных. Моя проблема в том, что мне нужно получить все возможные комбинации, добавляя по одному значению из каждой строки, а PHP для этого требуется более 15 минут.
После получения данных из базы данных я делаю следующее: поместите их в 12 массивов, по одному на каждую строку с 12 значениями в каждом, по одному на каждый столбец матрицы. После этого я в основном go разбиваю на 12 циклов, по одному на каждый массив, чтобы добавить каждое значение с каждым значением каждой строки. Мои массивы от $ d0 до $ d11
for ($id0=0; $id0<=11; ++$id0){
$v0=$d0[$id0];
for ($id1=0; $id1<=11; ++$id1){
if ($id1 <> $id0){
$v1=$v0+$d1[$id1];
for ($id2=0; $id2<=11; ++$id2){
if (($id2 <> $id1)&&($id2 <> $id0)) {
$v2=$v1+$d2[$id2];
for ($id3=0; $id3<=11; ++$id3){
if (($id3 <> $id0) && ($id3 <> $id1) && ($id3 <> $id2)) {
$v3=$v2+$d3[$id3];
for ($id4=0; $id4<=11; ++$id4){
if (($id4 <> $id0) && ($id4 <> $id1) && ($id4 <> $id2) && ($id4 <> $id3)) {
$v4=$v3+$d4[$id4];
for ($id5=0; $id5<=11; ++$id5){
if (($id5 <> $id0) && ($id5 <> $id1) && ($id5 <> $id2) && ($id5 <> $id3) && ($id5 <> $id4)) {
$v5=$v4+$d5[$id5];
for ($id6=0; $id6<=11; ++$id6){
if (($id6 <> $id0) && ($id6 <> $id1) && ($id6 <> $id2) && ($id6 <> $id3) && ($id6 <> $id4) && ($id6 <> $id5)) {
$v6=$v5+$d6[$id6];
for ($id7=0; $id7<=11; ++$id7){
if (($id7 <> $id0) && ($id7 <> $id1) && ($id7 <> $id2) && ($id7 <> $id3) && ($id7 <> $id4) && ($id7 <> $id5) && ($id7 <> $id6)) {
$v7=$v6+$d7[$id7];
for ($id8=0; $id8<=11; ++$id8){
if (($id8 <> $id0) && ($id8 <> $id1) && ($id8 <> $id2) && ($id8 <> $id3) && ($id8 <> $id4) && ($id8 <> $id5) && ($id8 <> $id6) && ($id8 <> $id7)) {
$v8=$v7+$d8[$id8];
for ($id9=0; $id9<=11; ++$id9){
if (($id9 <> $id1) && ($id9 <> $id2) && ($id9 <> $id3) && ($id9 <> $id4) && ($id9 <> $id5) && ($id9 <> $id6) && ($id9 <> $id7) && ($id9 <> $id8) && ($id9 <> $id0) ) {
$v9=$v8+$d9[$id9];
for ($id10=0; $id10<=11; ++$id10){
if (($id10 <> $id1) && ($id10 <> $id2) && ($id10 <> $id3) && ($id10 <> $id4) && ($id10 <> $id5) && ($id10 <> $id6) && ($id10 <> $id7) && ($id10 <> $id8) && ($id10 <> $id0) && ($id10 <> $id9) ) {
$v10=$v9+$d10[$id10];
for ($id11=0; $id11<=11; ++$id11){
if (($id11 <> $id0) && ($id11 <> $id1) && ($id11 <> $id2) && ($id11 <> $id3) && ($id11 <> $id4) && ($id11 <> $id5) && ($id11 <> $id6) && ($id11 <> $id7) && ($id11 <> $id8) && ($id11 <> $id9) && ($id11 <> $id10) ) {
$v11=$v10+$d11[$id11];
if ($v11<$best){
$consumers = $id0.$id1.$id2.$id3.$id4.$id5.$id6.$id7.$id8.$id9.$id10.$id11;
$best = $v11;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
echo $consumers;
echo "</br>";
echo $best;
Не могли бы вы узнать другой способ сделать это и получить результаты быстрее? Производительность очень медленная, и мне нужно около 15 минут, чтобы получить результат. Как я могу улучшить производительность?
Извините за такую огромную помощь, но у меня нет слишком много денег, чтобы попросить математика исправить это, и я хотел бы решить эту проблему, поскольку это было бы большим улучшением по окончании PhD.