Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ef38be4

Browse files
Clean up combinatorics
1 parent c5ef69b commit ef38be4

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

‎src/Advanced.Algorithms/Combinatorics/Combination.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23

34
namespace Advanced.Algorithms.Combinatorics
45
{
56
/// <summary>
6-
/// Combinations computer.
7+
/// Combination generator (nCr).
78
/// </summary>
89
public class Combination
910
{
10-
public static List<List<T>> Find<T>(List<T> input, int r, bool withRepetition)
11+
public static List<List<T>> Find<T>(List<T> n, int r, bool withRepetition=false)
1112
{
1213
var result = new List<List<T>>();
1314

14-
recurse(input, r, withRepetition, 0, new List<T>(), new HashSet<int>(), result);
15+
recurse(n, r, withRepetition, 0, new List<T>(), new HashSet<int>(), result);
1516

1617
return result;
1718
}

‎src/Advanced.Algorithms/Combinatorics/Permutation.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23

34
namespace Advanced.Algorithms.Combinatorics
45
{
56
/// <summary>
6-
/// Permutation computer.
7+
/// Permutation generator (nPr).
78
/// </summary>
89
public class Permutation
910
{
10-
public static List<List<T>> Find<T>(List<T> input, int r, bool withRepetition = false)
11+
public static List<List<T>> Find<T>(List<T> n, int r, bool withRepetition = false)
1112
{
1213
var result = new List<List<T>>();
1314

14-
recurse(input, r, withRepetition, new List<T>(), new HashSet<int>(), result);
15+
recurse(n, r, withRepetition, new List<T>(), new HashSet<int>(), result);
1516

1617
return result;
1718
}

‎src/Advanced.Algorithms/Combinatorics/Subset.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Advanced.Algorithms.Combinatorics
44
{
55
/// <summary>
6-
/// Subset computer.
6+
/// Subset generator.
77
/// </summary>
88
public class Subset
99
{
@@ -32,7 +32,7 @@ private static void recurse<T>(List<T> input,
3232
prefix.Add(input[j]);
3333
prefixIndices.Add(j);
3434

35-
recurse(input, j, prefix, prefixIndices, result);
35+
recurse(input, j+1, prefix, prefixIndices, result);
3636

3737
prefix.RemoveAt(prefix.Count - 1);
3838
prefixIndices.Remove(j);

‎tests/Advanced.Algorithms.Tests/Combinatorics/Combination_Tests.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class Combination_Tests
1414

1515
//for verification
1616
static readonly Func<int, int, int> combination = (int n, int r)
17-
=> n == 0 ||r==0? 0 : factorial(n) / (factorial(r) * factorial(n - r));
17+
=> n == 0 ? 0 : factorial(n) / (factorial(r) * factorial(n - r));
1818

1919
[TestMethod]
2020
public void Combination_Without_Repetitions_Smoke_Test()
@@ -30,6 +30,14 @@ public void Combination_Without_Repetitions_Smoke_Test()
3030
input = "monster".ToCharArray().ToList();
3131
combinations = Combination.Find<char>(input, 4, false);
3232
Assert.AreEqual(combination(input.Count, 4), combinations.Count);
33+
34+
input = "pen".ToCharArray().ToList();
35+
combinations = Combination.Find<char>(input, 0, false);
36+
Assert.AreEqual(combination(input.Count, 0), combinations.Count);
37+
38+
input = "pen".ToCharArray().ToList();
39+
combinations = Combination.Find<char>(input, input.Count, false);
40+
Assert.AreEqual(combination(input.Count, input.Count), combinations.Count);
3341
}
3442

3543

@@ -47,6 +55,14 @@ public void Combination_With_Repetitions_Smoke_Test()
4755
input = "scan".ToCharArray().ToList();
4856
combinations = Combination.Find<char>(input, 3, true);
4957
Assert.AreEqual(combination(input.Count + 3 - 1, 3), combinations.Count);
58+
59+
input = "scan".ToCharArray().ToList();
60+
combinations = Combination.Find<char>(input, 0, true);
61+
Assert.AreEqual(combination(input.Count + 0 - 1, 0), combinations.Count);
62+
63+
input = "scan".ToCharArray().ToList();
64+
combinations = Combination.Find<char>(input, input.Count, true);
65+
Assert.AreEqual(combination(input.Count + input.Count - 1, input.Count), combinations.Count);
5066
}
5167

5268
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /