Diciamo v'è un insieme di numeroalgoritmo efficiente per trovare una combinazione, che somma è uguale a un numero noto, in un insieme del numero
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Voglio trovare diverse combinazioni nell'insieme di numeri tale che la somma di esso è uguale a un numero noto, ad esempio 18. Possiamo scoprire che 5, 6 , 7 è abbinato (5 + 6 + 7 = 18).
I numeri in una combinazione non possono essere ripetuti e il numero in un set potrebbe non essere consecutivo.
Ho scritto un programma C# per farlo. Il programma è casuale per raccogliere il numero per formare una combinazione e verificare se la somma della combinazione è uguale a un numero noto. Tuttavia, la combinazione del programma trovato può essere ripetuta e rende il progresso non efficace.
Mi chiedo se ci sia un algoritmo efficiente per scoprire tale combinazione.
Ecco parte del mio codice.
int Sum = 0;
int c;
List<int> Pick = new List<int>();
List<int> Target = new List<int>() {some numbers}
Target.Sort();
while (!Target.Contains(Sum))
{
if (Sum > Target[Target.Count - 1])
{
Pick.Clear();
Sum = 0;
}
while (true)
{
if (Pick.IndexOf(c = Math0.rand(0, Set.Count - 1)) == -1)
{
Pick.Add(c);
}
//Summation Pick
Sum = 0;
for (int i = 0; i < Pick.Count; i++)
Sum += Set[Pick[i]];
if (Sum >= Target[Target.Count - 1])
break;
}
}
Result.Add(Pick);
Questo è il problema di Somma sottoinsieme: http://en.wikipedia.org/wiki/Subset_sum_problem – mbeckish
Questo è stato chiesto all'inizio di questa settimana. –
possibile duplicato di [Algoritmo per trovare quali numeri da un elenco di dimensioni n sum a un altro numero] (http://stackoverflow.com/questions/83547/algorithm-to-find-which-numbers-from-a-list- di-size-n-sum-to-another-number) – mbeckish