Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erika - Branches #17

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 30th 7pm**

## 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.
Expand Down
46 changes: 44 additions & 2 deletions lib/max_subarray.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,49 @@
# Time Complexity: ?
# Space Complexity: ?
def max_sub_array(nums)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 , time and space complexity?

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.
31 changes: 29 additions & 2 deletions lib/newman_conway.rb
Original file line number Diff line number Diff line change
@@ -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)
Comment on lines 11 to 13

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 , time and space complexity?

raise NotImplementedError, "newman_conway isn't implemented"
end

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


2 changes: 1 addition & 1 deletion test/max_sub_array_test.rb
Original file line number Diff line number Diff line change
@@ -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]
Expand Down
2 changes: 1 addition & 1 deletion test/newman_conway_test.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down