Ok, ho avuto una ricerca e ho cercato una soluzione C o python per questo problema. Preferirei python ... anche se è il mio linguaggio più debole (di 2 lingue molto deboli).Permutazioni ma con alcuni numeri mantenuti in un ordine
Un insieme di numeri, ad esempio 0 0 1 7 0 0 3 0 0 4
- Trova tutte le permutazioni dell'insieme.
- I numeri> 0 devono rimanere in quest'ordine (NON POSIZIONE!)
- Deve esserci uno 0 tra i numeri, tuttavia uno 0 non è richiesto all'inizio e alla fine del set. Finché c'è ALMENO UNO 0 tra i numeri> 0.
Quindi in primo luogo, ho pensato di solo trovare tutte le possibili permutazioni e poi rimuovere la pula (controllando che se n> 0,! N + 1> 0) per ogni permutazione e quindi il primo numero> 0 == 1 , 2 ° #> 0 == 7 ecc. Ecc.
Mi sono poi fermato e ho pensato che fosse sciocco, diciamo che c'erano 12 numeri, che avrebbero dato 12! permutazioni. Questo nell'ordine di 500.000.000 di permutazioni di cui dovrei correre di nuovo per sbarazzarmi di pula.
Diciamo che ho avuto 40-50 serie di questi set di numeri da passare, questo è un bel colpo di tempo.
Esiste un modo più logico? Ho pensato di avere in qualche modo le permutazioni del python in qualche modo tenendo conto di quelle regole (se n> 0, n + 1 MUST == 0) e (n = primo numero, n2 = 2 ° ecc.)
Un esempio di un insieme ridotto sarebbe (non tutte le permutazioni, ma dà un'idea):
1,2,3,0,0,0,0,0
- 1,0,2,0, 3,0,0,0
- 0,1,0,2,0,3,0,0
- 0,0,1,0,2,0,3,0
- 0,0,1,0,0,2,0,3
- 0,1,0,0,2,0,3,0
ecc ecc Quindi 1, 2,3 è in ordine ma gli "0" sono appena spostati?
Grazie!
Il secondo risultato dell'esempio più piccolo sembra violare la regola 3. – timgeb
Oooops .... affrettato a pensare. Risolvendolo ora. – Jcov
Alla fine, hai intenzione di confrontare ciascuna di queste stringhe con qualche input, per convalidare quell'input? In tal caso, magari cercare i calcoli "modifica distanza" invece di provare a forzare la forza per ogni permutazione. – jez