From 8bb8ede1bd4017817c35ccf23c068d93fbfeb466 Mon Sep 17 00:00:00 2001 From: Chris M Date: Wed, 4 Mar 2020 19:39:10 -0800 Subject: [PATCH 1/5] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2fd88dc..e60898a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Dynamic programming is a strategy for developing an algorithm where each subproblem is solved and the results recorded for use in solving larger problems. In this exercise you will write a pair of dynamic programming methods. +**Due March 16th** + ## Wave 1 Newman-Conway Sequence [Newman-Conway sequence] is the one which generates the following integer sequence. 1 1 2 2 3 4 4 4 5 6 7 7….. and follows below recursive formula. From 66e7944a9cd854806c1539bbe8685ed8b0d1dbf2 Mon Sep 17 00:00:00 2001 From: Chris M Date: Wed, 11 Mar 2020 19:33:23 -0700 Subject: [PATCH 2/5] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e60898a..291d2cb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Dynamic programming is a strategy for developing an algorithm where each subproblem is solved and the results recorded for use in solving larger problems. In this exercise you will write a pair of dynamic programming methods. -**Due March 16th** +**Due March 16th 7pm** ## Wave 1 Newman-Conway Sequence From e075d7085e9e9a531cff1fba2709d3fef08584fe Mon Sep 17 00:00:00 2001 From: Chris M Date: Thu, 19 Mar 2020 11:34:16 -0700 Subject: [PATCH 3/5] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 291d2cb..4307d8c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Dynamic programming is a strategy for developing an algorithm where each subproblem is solved and the results recorded for use in solving larger problems. In this exercise you will write a pair of dynamic programming methods. -**Due March 16th 7pm** +**Due March 30th 7pm** ## Wave 1 Newman-Conway Sequence From 4b9c93abb56e9aac2e62e7884830b30a030e96ec Mon Sep 17 00:00:00 2001 From: Erika Maust Date: Mon, 5 Oct 2020 13:15:09 -0700 Subject: [PATCH 4/5] newman_conway implemented --- lib/newman_conway.rb | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/newman_conway.rb b/lib/newman_conway.rb index 4c985cd..f271dd7 100644 --- a/lib/newman_conway.rb +++ b/lib/newman_conway.rb @@ -1,7 +1,34 @@ +require 'pry' +# P(n) = P(P(n - 1)) + P(n - P(n - 1)) +# Eg 1 +# Input : 13 +# Output : 1 1 2 2 3 4 4 4 5 6 7 7 8 + +# Input : 20 +# Output : 1 1 2 2 3 4 4 4 5 6 7 7 8 8 8 8 9 10 11 12 # Time complexity: ? # Space Complexity: ? def newman_conway(num) - raise NotImplementedError, "newman_conway isn't implemented" -end \ No newline at end of file + + if num <= 0 + raise ArgumentError.new + end + + sequence = [] + + num.times do |i| + + if i < 2 + sequence << 1 + else + prev = sequence[i - 1] + sequence << sequence[prev - 1] + sequence[i - prev] + end + end + + return sequence.join(" ") +end + + \ No newline at end of file From 037c2df9e1a79d0ffa3ebbd8f665f725fe77d9b9 Mon Sep 17 00:00:00 2001 From: Erika Maust Date: Tue, 6 Oct 2020 16:38:34 -0700 Subject: [PATCH 5/5] Implemented max_subarray --- lib/max_subarray.rb | 46 ++++++++++++++++++++++++++++++++++++-- test/max_sub_array_test.rb | 2 +- test/newman_conway_test.rb | 2 +- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/lib/max_subarray.rb b/lib/max_subarray.rb index 5204edb..32da01a 100644 --- a/lib/max_subarray.rb +++ b/lib/max_subarray.rb @@ -2,7 +2,49 @@ # Time Complexity: ? # Space Complexity: ? def max_sub_array(nums) - return 0 if nums == nil + return nil if nums.nil? || nums.empty? + return nums[0] if nums.length == 1 + + current_max = global_max = nums[0] + index = 1 - raise NotImplementedError, "Method not implemented yet!" + until index == nums.length + # binding.pry + if nums[index] > current_max + nums[index] + current_max = nums[index] + else + current_max += nums[index] + end + + global_max = current_max if current_max > global_max + index += 1 + end + + return global_max + end + +# Write a method to find the contiguous subarray in a 1-dimensional array with the largest sum. +# This can be solved using Kadane's Algorithm + +# + +# ``` +# Initialize: +# max_so_far = 0 +# max_ending_here = 0 + +# Loop for each element of the array +# (a) max_ending_here = max_ending_here + a[i] +# (b) if(max_ending_here < 0) +# max_ending_here = 0 +# (c) if(max_so_far < max_ending_here) +# max_so_far = max_ending_here +# return max_so_far +# ``` + +# ### Explanation + +# The idea of the Kadane’s algorithm is to look for all positive contiguous segments of the array (max_ending_here is used for this). And keep track of the maximum sum contiguous segment among all positive segments (max_so_far is used for this). Each time we get a positive sum compare it with max_so_far and update max_so_far if it is greater than max_so_far + +# There is also a subtle divide & conquer algorithm for this. \ No newline at end of file diff --git a/test/max_sub_array_test.rb b/test/max_sub_array_test.rb index 3253cdf..e27e1ca 100644 --- a/test/max_sub_array_test.rb +++ b/test/max_sub_array_test.rb @@ -1,6 +1,6 @@ require_relative "test_helper" -xdescribe "max subarray" do +describe "max subarray" do it "will work for [-2,1,-3,4,-1,2,1,-5,4]" do # Arrange input = [-2,1,-3,4,-1,2,1,-5,4] diff --git a/test/newman_conway_test.rb b/test/newman_conway_test.rb index 537d376..6a42001 100644 --- a/test/newman_conway_test.rb +++ b/test/newman_conway_test.rb @@ -1,6 +1,6 @@ require_relative "test_helper" -describe "Newman Conway Tests" do +xdescribe "Newman Conway Tests" do it "works with 13" do # Arrange input = 13