Sto costruendo sul codice da here. Mi piacerebbe per generare tutte le permutazioni di una serie, per esempio (tratto dal filo):Generazione di permutazioni di un set - con efficienza e con distinzione
Collection: 1, 2, 3
Permutations: {1, 2, 3}
{1, 3, 2}
{2, 1, 3}
{2, 3, 1}
{3, 1, 2}
{3, 2, 1}
ci sono permutazioni possibili per ogni set, ma questo non è quello che mi piacerebbe realizzare. Prendere, oneroso, seguente gruppo:
ciò comporterebbe permutazioni delle amout estrema . Ciò richiederebbe un tempo molto lungo da calcolare, poiché ogni zero è considerato unico.
Piuttosto, mi piacerebbe generare solo permute distinte. Se lo facciamo, ci sono solo
permutazioni remaining, come 18 elementi sono identici (k).
Ora, potrei eseguire il codice dal thread menzionato e memorizzare i risultati in un HashSet, eliminando le permutazioni duplicate. Tuttavia, sarebbe estremamente inefficiente. Sto cercando un algoritmo per generare permutazioni con distinzione direttamente.
Sono confuso. Il codice nel thread collegato sta facendo un incremento lessicografico, che effettivamente funziona bene su multinsiemi con elementi duplicati, senza HashSet richiesto. –
Beh direi che tutto quello che dovete fare è usare sottoinsieme distinto di ingresso prima di applicare l'algoritmo. –
@DavidEisenstat Funziona bene, ma ci vuole molto tempo per calcolare. Se non utilizzo HashSet, avrei 2.4 * 10^18 risultati. – jacobz