Czy istnieje klasa szablonu C++, która implementuje operacje z permutacjami i grupą permutacji? Taka klasa musi zaimplementować znajdowanie produktu i odwrotność, mnożenie itd.Czy istnieje klasa C++, która implementuje operacje z permutacjami?
Odpowiedz
STL zawiera funkcję permutacji w algorytmie.h. Oto przykład tego.
int main() { int myints[] = {1,2,3}; cout << "The 3! possible permutations with 3 elements:\n"; sort (myints,myints+3); do { cout << myints[0] << " " << myints[1] <<" " << myints[2] << endl; } while (next_permutation (myints,myints+3)); return 0; }
Proszę "algorytm", a nie "algorytm.h"! – KTC
Jak to na przykład pomaga mi znaleźć odwrotną permutację? –
Nie ma. Ta funkcja jedynie wylicza członków grupy permutacji. Nie wie nic o strukturze grupy - opiera się tylko na elementach tablicy wejściowej o określonej kolejności. –
Nie znam jednego, ale powinno być łatwe do wdrożenia. Wewnętrznie możesz reprezentować permutację jako wektor, np. (1 3 4 2 7 5 6) jest perm od 1-7 wysyłania 1-> 1, 2-> 3, 3-> 4, 4-> 2 itp. Lub jako zestaw cykli np. (1) (2 3 4) (5 7 6) i realizować operacje w kategoriach tych. Przypuszczalnie argument szablonu byłby wielkością grupy permutacyjnej.
W nowoczesnym C++ nie używałbyś do tego klasy. Prawdopodobnie używałbyś wielu szablonów funkcji. Jeden szablon funkcji dla każdej operacji, którą chcesz obsłużyć, z faktycznymi zakresami wejściowymi templatycznymi. – MSalters
Programowanie funkcji nie jest opcją. Programowanie obiektowe jest dobre. Naprawdę potrzebuję klasy szablonu. –
@MSalters: Jaki jest "zakres wejściowy" dla funkcji, która wymaga dwóch permutacji, i zwraca iloczyn tych permutacji? Czy sugerujesz, że same permutacje najlepiej reprezentują klienta jako pary iteracyjne, a nie nieprzezroczyste? Myślę, że Alexey szuka czegoś o większej wiedzy na temat teorii grup niż std :: next_permutation. –