2009-07-30 14 views
5

Esiste una classe template C++ che implementa operazioni con permutazioni e gruppi di permutazioni? tale classe deve implementare la ricerca del prodotto e inversa, la moltiplicazione, eccEsiste una classe C++ che implementa le operazioni con le permutazioni?

+0

Nel moderno C++, non si userebbe una classe per questo. Probabilmente utilizzerai più modelli di funzioni. Un modello di funzione per operazione che si desidera supportare, con gli intervalli di input effettivi templati. – MSalters

+0

La programmazione funzionale non è un'opzione. La programmazione orientata agli oggetti è buona. Ho davvero bisogno di template class. –

+2

@MSalters: qual è il "range di input" per una funzione che accetta due permutazioni e restituisce il prodotto di tali permutazioni? Stai suggerendo che le permutazioni stesse siano meglio rappresentate al cliente come coppie iteratore piuttosto che come oggetti opachi? Penso che Alexey stia cercando qualcosa con più conoscenza della teoria dei gruppi rispetto a std :: next_permutation. –

risposta

3

This è il migliore che ho trovato ... ma è in C quindi dovrete scrivere un wrapper. CodeCogs ti fornisce anche una libreria su combinatoria.

-3

STL include una funzione per la permutazione nell'algoritmo.h. Ecco un esempio per questo.

 
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; 
} 
+2

Per favore, "algoritmo" non "algoritm.h"! – KTC

+1

Come mi aiuta a trovare la permissione inversa per esempio? –

+0

Non funziona. Questa funzione si limita a enumerare i membri del gruppo di permutazione. Non sa nulla della struttura del gruppo - si basa solo sugli elementi dell'array di input che hanno un ordine definito. –

0

Non ne conosco uno, ma dovrebbe essere abbastanza semplice da implementare. Internamente potresti rappresentare la permutazione come un vettore, ad es. (1 3 4 2 7 5 6) essendo una permanente di 1-7 che invia 1-> 1, 2-> 3, 3-> 4, 4-> 2 ecc. O come un insieme di cicli, ad es. (1) (2 3 4) (5 7 6), e attuare le operazioni in termini di questi. Presumibilmente l'argomento modello sarebbe la dimensione del gruppo di permutazione.