Aus keinem bestimmten Grund habe ich beschlossen, nach einem Algorithmus zu suchen, der alle möglichen Entscheidungen von k ganzen Zahlen zwischen 1 ... n erzeugt Ordnung unter den k Integer ist egal (das n wähle k dingy).Listen Sie alle möglichen Kombinationen von k ganzen Zahlen zwischen 1 ... n (n wählen k)
Aus dem gleichen Grund, der kein Grund ist, habe ich es auch in C# implementiert. Meine Frage ist:
Haben Sie einen Fehler in meinem Algorithmus oder Code? Und, noch wichtiger, können Sie einen besseren Algorithmus vorschlagen?
Bitte achten Sie mehr auf den Algorithmus als den Code selbst. Es ist nicht der hübscheste Code, den ich jemals geschrieben habe, obwohl ich sage, wenn Sie einen Fehler sehen.
EDIT: Alogirthm erklärt -
- Wir k Indizes halten.
- Dies erstellt k verschachtelt für Schleifen, wo Schleife i Index ist [i].
- Es simuliert k für Schleifen, wo Indizes [i + 1] zu einer Schleife innerhalb der Schleife von Indizes [i] gehört.
- Indizes [i] von Indizes läuft [i - 1] + 1 bis n - k + i + 1.
Code:
public class AllPossibleCombination
{
int n, k;
int[] indices;
List<int[]> combinations = null;
public AllPossibleCombination(int n_, int k_)
{
if (n_ <= 0)
{
throw new ArgumentException("n_ must be in N+");
}
if (k_ <= 0)
{
throw new ArgumentException("k_ must be in N+");
}
if (k_ > n_)
{
throw new ArgumentException("k_ can be at most n_");
}
n = n_;
k = k_;
indices = new int[k];
indices[0] = 1;
}
/// <summary>
/// Returns all possible k combination of 0..n-1
/// </summary>
/// <returns></returns>
public List<int[]> GetCombinations()
{
if (combinations == null)
{
combinations = new List<int[]>();
Iterate(0);
}
return combinations;
}
private void Iterate(int ii)
{
//
// Initialize
//
if (ii > 0)
{
indices[ii] = indices[ii - 1] + 1;
}
for (; indices[ii] <= (n - k + ii + 1); indices[ii]++)
{
if (ii < k - 1)
{
Iterate(ii + 1);
}
else
{
int[] combination = new int[k];
indices.CopyTo(combination, 0);
combinations.Add(combination);
}
}
}
}
ich für die lange Frage entschuldigen, könnte es für einen Blogbeitrag geeignet sein, aber ich möchte die Meinung der Community hier.
Danke,
Asaf
Duplizieren von http: // s tackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n – ShreevatsaR