private int Solve(int itemNumbers, int capacity) { if (itemNumbers == 0 /*|| capacity <= 0*/) // stop if capacity is 0 supposes that there is no item with weight 0 { return(0); } var key = new KnapSackKey(itemNumbers, capacity); if (Memoization.ContainsKey(key)) { return(Memoization[key]); } var item = Items[itemNumbers - 1]; int takeItem = item.Weight <= capacity ? Solve(itemNumbers - 1, capacity - item.Weight) + item.Value : 0; int dropItem = Solve(itemNumbers - 1, capacity); int greaterValue = Math.Max(takeItem, dropItem); Memoization[key] = greaterValue; return(greaterValue); }
public void MemoizeLast() { var calls = 0; var f = Memoization.MemoizeLast(delegate(int i) { calls++; return(i * 2); }); Assert.Equal(4, f(2)); Assert.Equal(1, calls); Assert.Equal(4, f(2)); Assert.Equal(1, calls); Assert.Equal(8, f(4)); Assert.Equal(2, calls); }
public void MemoizeLastWithCustomComparer() { var calls = 0; var comparer = StringComparer.OrdinalIgnoreCase; var f = Memoization.MemoizeLast(delegate(string s) { calls++; return(s.ToUpperInvariant()); }, comparer); Assert.Equal("FOOBAR", f("foobar")); Assert.Equal(1, calls); Assert.Equal("FOOBAR", f("FOOBAR")); Assert.Equal(1, calls); Assert.Equal("FOOBAR", f("FoObAr")); Assert.Equal(1, calls); }
static void Main(string[] args) { //var input = new int[] { 0, 2, 3, 5, 7, 11 }; //var input = new int[] { 1, 4, 6, 8, 9, 13, 18 }; //var input = new int[] { 2, 5, 5, 2 }; //var input = new int[] { 9, 4, 6, 20, 100, 15, 1 }; //var input = new int[] { 100, 20, 15, 9, 4, 6, 1 }; //var input = new int[] { 41, 72, 91, 50, 46, 68, 78, 99, 74, 89, 97, 84, 95, 41, 50 }; //all datastructures can be called like this //var ds = new Graph<int>(); //var arr = new DynamicArray<int>(); //all algorithms can be called like this var result = Memoization.FibonacciMemoized(35); }
public void Test2() { var counter = 0; var fib = YCombinator <int> .Fix(f => x => { counter++; return(x < 2 ? 1 : f(x - 1) + f(x - 2)); }); var m_fib = Memoization.Create(fib); counter = 0; m_fib(7); Assert.Equal(41, counter); counter = 0; m_fib(7); Assert.Equal(0, counter); }
public void MemoizeLastWithNullInputComparer() { var f = Memoization.MemoizeLast <object, object>(_ => null, null); Assert.Null(f(new object())); }
public void MemoizeLastThrowsWithNullFunction() { var e = Assert.Throws <ArgumentNullException>(() => Memoization.MemoizeLast <object, object>(null)); Assert.Equal("function", e.ParamName); }
public void Init() { sut = new Recursion(); sutMe = new Memoization(); }