Değişen Boyutu permütasyon

0 Cevap php

Ben mümkün olan tüm boyutları her permütasyonlarını alır PHP bir fonksiyon yazmaya çalışıyorum. Ben bir örnek başlamak için en iyi yol olacağını düşünüyorum:

$my_array = array(1,1,2,3);

Değişen boyutlarda olası permütasyon:

1
1 // * See Note
2
3
1,1
1,2
1,3
// And so forth, for all the sets of size 2
1,1,2
1,1,3
1,2,1
// And so forth, for all the sets of size 3
1,1,2,3
1,1,3,2
// And so forth, for all the sets of size 4

Not: Bir yinelenen veya varsa umurumda değil. Bu örnek amaçları için, gelecekteki çiftleri atlanmıştır.

PHP bugüne kadar ne:

function getPermutations($my_array){

$permutation_length = 1;
$keep_going = true;    

while($keep_going){
    while($there_are_still_permutations_with_this_length){
        // Generate the next permutation and return it into an array
        // Of course, the actual important part of the code is what I'm having trouble with.
    }
    $permutation_length++;
    if($permutation_length>count($my_array)){
        $keep_going = false;
    }
    else{
        $keep_going = true;
        }
}

return $return_array;

}

Aklıma yakın şey bu sonuç dizide zaten eğer görmeye, ilk n elemanını toplama, dizi karıştırma, ve eğer o değil, onu eklemek, ve bu uzunluk için matematiksel olarak artık mümkündür permütasyon olduğunda sonra dur edilir . Ama bu çirkin ve kaynak verimsiz.

Any pseudocode algorithms would be greatly appreciated.


Also, for super-duper (worthless) bonus points, is there a way to get just 1 permutation with the function but make it so that it doesn't have to recalculate all previous permutations to get the next?

Örneğin, ben zaten 3 permütasyonlarını bitti demektir, bunu bir parametre 3 geçmek ve sadece önceki 3 yineleme olmadan sayısını 4 üretir? (O parametre aktarımı küresel bir veya statik olarak takip verebilir, gerekli değildir).

Dizi büyüdükçe, böylece olası kombinasyonların sayısını yapar, çünkü ben bu sormak nedenidir. Sadece bir düzine elemanları ile bir set küçük veri olası kombinasyonların trilyonlarca içine hızlı bir şekilde büyür ve ben bir kez onun hafızasında permütasyonları trilyonlarca tutan PHP görev istemiyorum söylemek yeterlidir.

0 Cevap