ho bisogno di efficiente calcolare la prossima permutazione di lunghezza k
da n
scelte. Liste di Wikipedia a great algorithm per il calcolo della prossima permutazione di lunghezza n
da n
scelte.efficiente calcolare prossima permutazione di lunghezza k da scelte n
La cosa migliore che posso venire con sta usando tale algoritmo (o the Steinhaus–Johnson–Trotter algorithm), e poi basta considerare solo i primi k
elementi della lista, e l'iterazione di nuovo ogni volta che i cambiamenti sono tutti sopra quella posizione.
Vincoli:
- L'algoritmo deve calcolare il prossimo permutazione dato niente di più che la permutazione corrente. Se è necessario generare un elenco di tutte le permutazioni, occuperà troppa memoria.
- Deve essere in grado di calcolare una permutazione di lunghezza solo
k
din
(questo è dove l'altro algoritmo fallisce
Non vincoli:
- Non importa se si tratta di in- o che non
- non mi importa se è in ordine lexographical, o qualsiasi ordine per quella materia
- non mi interessa troppo quanto efficientemente calcola la prossima permutazione, entro ragione, naturalmente, non può darmi la prossima permutazione creando una lista di tutti i possibili ogni possibile.
Sono sicuro che troverai la tua risposta nel codice per il modulo di Python itertools, con uno sguardo – YXD
sì è un * .so su mac os x, quindi ero troppo pigro per andare a cercare la fonte. Immagino che dovrei smettere di essere pigro e andare a farlo. – aaronstacy
http://hg.python.org/releasing/2.7.3/file/7bb96963d067/Modules/itertoolsmodule.c#l2497 – Dougal