Giriş
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor.
Permütasyon Nedir
Permütasyon kümenin tüm elemanlarını farklı sıralarda üretir.
Kombinasyon Nedir
Kombinasyon ise kümenin tüm alt kümelerini verir. Alt kümelerde sıra önemli değildir. Elimizde 0 , 1 olsun .Kombinasyon yaparsak
0
1,
0 ,1
alırız.
is_permutation metodu
Elimizde iki tane string olsun. Bu iki string'in birbirlerini permütasyonu olduğunu anlamak için şöyle yaparız.
Eleman sayısı faktoriyel kadar sonuç döndürür.
Elimizde 1,2 olsun. Permütasyon olarak
1,2
2,1
alırız.
Elimizde 1,2,3 olsun. Permütasyon olarak
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
alırız.
Elimizde 1,2,3,4 olsaydı 24 tane permütasyon olurdu. Sonuç dizisi uzun olduğu için yazmıyorum .
Bu işleme başlamadan önce
1. vector küçükten büyüğe sıralı olmalıdır.
2. Sıralanacak yapının < operatörü olmalıdır. Eğer kendi yapımız ise şöyle yaparız.
Örnek ver
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor.
Permütasyon Nedir
Permütasyon kümenin tüm elemanlarını farklı sıralarda üretir.
Kombinasyon Nedir
Kombinasyon ise kümenin tüm alt kümelerini verir. Alt kümelerde sıra önemli değildir. Elimizde 0 , 1 olsun .Kombinasyon yaparsak
0
1,
0 ,1
alırız.
is_permutation metodu
Elimizde iki tane string olsun. Bu iki string'in birbirlerini permütasyonu olduğunu anlamak için şöyle yaparız.
return std::is_permutation( str1.begin(),str1.end(), str2.begin(), str2.end() );
next_permutation metoduEleman sayısı faktoriyel kadar sonuç döndürür.
Elimizde 1,2 olsun. Permütasyon olarak
1,2
2,1
alırız.
Elimizde 1,2,3 olsun. Permütasyon olarak
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
alırız.
Elimizde 1,2,3,4 olsaydı 24 tane permütasyon olurdu. Sonuç dizisi uzun olduğu için yazmıyorum .
Bu işleme başlamadan önce
1. vector küçükten büyüğe sıralı olmalıdır.
2. Sıralanacak yapının < operatörü olmalıdır. Eğer kendi yapımız ise şöyle yaparız.
class Foo
{
public:
int x = 0;
int y = 0;
bool operator <( const Foo& rhs )
{
...
}
};
Şöyle yaparız.vector<int> v = ...;
do {
...
} while(next_permutation(v.begin(), v.end()));
Aradaki permutasyonları almak istersek şöyle yaparız.vector<int> v = ...;
vector < vector<int>> outVal ;
sort( v.begin() , v.end() );
do
{
outVal.push_back (v);
} while (next_permutation (v.begin() , v.end() ) );
prev_permutation metoduÖrnek ver
Hiç yorum yok:
Yorum Gönder