SORU
3 Ocak 2010, Pazar


Daha iyi dize permütasyon yapmak için yöntemler var mı?

void permute(string elems, int mid, int end)
{
    static int count;
    if (mid == end) {
        cout <<   count << " : " << elems << endl;
        return ;
    }
    else {
    for (int i = mid; i <= end; i  ) {
            swap(elems, mid, i);
            permute(elems, mid   1, end);
            swap(elems, mid, i);
        }
    }
}

Yukarıdaki fonksiyonu str(sabit bir önek str[0..mid-1] str[mid..end] bir permutable gibi sonek) permütasyon gösterir. permute(str, 0, str.size() - 1) bir dize tüm permütasyon göstermek için kullanabiliriz.

Ancak işlev özyinelemeli bir algoritma kullanır; belki performansı geliştirilebilir?

Daha iyi bir dize kapsamalıdır yöntemleri var mı?

CEVAP
3 Ocak 2010, Pazar


Neden std::next_permutation() std::prev_permutation()seveceğimi seni ?

Bağlantılar:

std::next_permutation()
std::prev_permutation()

Basit bir örnek:

#include<string>
#include<iostream>
#include<algorithm>

int main()
{
   std::string s="123";
   do
   {

      std::cout<<s<<std::endl;

   }while(std::next_permutation(s.begin(),s.end()));
}

Çıkış:

123
132
213
231
312
321

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Police

    Android Poli

    21 NİSAN 2010
  • DetroitBORG

    DetroitBORG

    29 Temmuz 2008
  • dope2111

    dope2111

    29 HAZİRAN 2009