From 9f853b8d91a55bf0bbf35ad364169b62f2259101 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 14:32:32 +0530 Subject: [PATCH 01/16] Create kadane.py --- allalgorithms/subarray/kadane.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 allalgorithms/subarray/kadane.py diff --git a/allalgorithms/subarray/kadane.py b/allalgorithms/subarray/kadane.py new file mode 100644 index 0000000..36f3789 --- /dev/null +++ b/allalgorithms/subarray/kadane.py @@ -0,0 +1,14 @@ +# Algorithm for Kadane's max sum contigious subarray + +def maxsum_subarray(arr): + curr = arr[0] + maxx = arr[0] + n = len(arr) + + for i in range(1,n): + curr = max(arr[i],curr+arr[i]) + maxx = max(curr,maxx) + + return maxx + + From a8cf0a2ca46b5c00e4065888fb7e26a7b23457f2 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 14:41:10 +0530 Subject: [PATCH 02/16] Update kadane.py --- allalgorithms/subarray/kadane.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/allalgorithms/subarray/kadane.py b/allalgorithms/subarray/kadane.py index 36f3789..a878b84 100644 --- a/allalgorithms/subarray/kadane.py +++ b/allalgorithms/subarray/kadane.py @@ -1,4 +1,14 @@ # Algorithm for Kadane's max sum contigious subarray +# -*- coding: UTF-8 -*- +# +# Merge Sort Algorithm +# The All ▲lgorithms library for python +# +# Contributed by: Kunal Keshav Singh Sahni +# Github: @kunal768 +# + +import sys def maxsum_subarray(arr): curr = arr[0] @@ -12,3 +22,24 @@ def maxsum_subarray(arr): return maxx +def returnArray(arr): + size = len(arr) + max_so_far = -sys.maxsize - 1 + max_ending_here = 0 + start = 0 + end = 0 + s = 0 + for i in range(0,size): + + max_ending_here += arr[i] + + if max_so_far < max_ending_here: + max_so_far = max_ending_here + start = s + end = i + + if max_ending_here < 0: + max_ending_here = 0 + s = i+1 + + return [max_so_far,arr[start:end+1]] From 0b7cbcfcf2edb6062275cb3a69c35e7cbf793c1c Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 14:49:31 +0530 Subject: [PATCH 03/16] added test cases --- tests/test_kadane.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/test_kadane.py diff --git a/tests/test_kadane.py b/tests/test_kadane.py new file mode 100644 index 0000000..14ee4b4 --- /dev/null +++ b/tests/test_kadane.py @@ -0,0 +1,20 @@ +import unittest + +from allalgorithms.subarray import kadane + +class TestSearches(unittest.TestCase): + + def test_returnArray(self): + self.assertEqual( [11,[2,3,-1,7]], binary_search([2,3,-1,7])) + self.assertEqual([5,[2,3]], binary_search([2,3,-2,4])) + self.assertEqual([0, [0]], binary_search([-1,-1,-0,0])) + self.assertEqual([-1, [-1]], binary_search([-1])) + + def test_maxsum_subarray(self): + self.assertEqual( 11,, binary_search([2,3,-1,7])) + self.assertEqual(5, binary_search([2,3,-2,4])) + self.assertEqual(0, binary_search([-1,-1,-0,0])) + self.assertEqual(-1, binary_search([-1])) + +if __name__ == '__main__': + unittest.main() From 5f09974e74f1139fe57f96e94b0afdc5a69d471d Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 14:58:42 +0530 Subject: [PATCH 04/16] Create kadane.md --- docs/subarray/kadane.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/subarray/kadane.md diff --git a/docs/subarray/kadane.md b/docs/subarray/kadane.md new file mode 100644 index 0000000..ef387b6 --- /dev/null +++ b/docs/subarray/kadane.md @@ -0,0 +1,36 @@ +# Kadane's Algorithm + +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 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 +## Install + +``` +pip install allalgorithms +``` + +## Usage + +```py +from allalgorithms.subarray import kadane + +arr = [-2, 1, 2, 7, 10, 77] + +print(kadane.maxsum_subarray(arr)) +# -> 97 + +print(kadane.returnArray(arr)) +# -> [97, [1, 2, 7, 10, 77]] +``` + +## API + +### maxsum_subarray(array) + +> Return sum of maximum contigious subarray + +### returnArray(array) + +> Return sum along with the respective subarray + +##### Params: + +- `array`: Array (may contain negative elements) From 2f43454a189bb0c1848737102b340af40290b976 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 15:00:11 +0530 Subject: [PATCH 05/16] Update readme.md --- readme.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 9929e55..89b7c6a 100644 --- a/readme.md +++ b/readme.md @@ -69,10 +69,15 @@ print(binary_search(arr, 3)) - [Merge Sort](https://python.allalgorithms.com/sorting/merge-sort) - [Pigeonhole Sort](https://python.allalgorithms.com/sorting/pigeonhole-sort) - [Selection Sort](https://python.allalgorithms.com/sorting/selection-sort) - - [Stooge Sort](https://python.allalgorithms.com/sorting/stooge-sort) + - [Stooge Sort](https://python.allalgorithms.com/sorting/stooge-sor + - ### String - [Palindrome Check](https://python.allalgorithms.com/string/palindrom-check) +- ### Subarray + - [Kadane's Algorithm](https://python.allalgorithms.com/subarray/kadane) + + # Related - [allalgorithms-javascript](https://github.com/abranhe/allalgorithms-javascript): All ▲lgorithms Javascript library From 27de68e6da0deaf91c0e14b8500379b4de793c15 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 15:01:26 +0530 Subject: [PATCH 06/16] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 89b7c6a..71c5d38 100644 --- a/readme.md +++ b/readme.md @@ -75,7 +75,7 @@ print(binary_search(arr, 3)) - [Palindrome Check](https://python.allalgorithms.com/string/palindrom-check) - ### Subarray - - [Kadane's Algorithm](https://python.allalgorithms.com/subarray/kadane) + - [Kadane's Algorithm](https://github.com/kunal768/allalgorithms-python/blob/master/allalgorithms/subarray/kadane.py) # Related From 58d5b5b0d6a40802399298ad4d4fd4bbac1ad452 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 19:51:50 +0530 Subject: [PATCH 07/16] Update readme.md --- docs/readme.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/readme.md b/docs/readme.md index 9929e55..71c5d38 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -69,10 +69,15 @@ print(binary_search(arr, 3)) - [Merge Sort](https://python.allalgorithms.com/sorting/merge-sort) - [Pigeonhole Sort](https://python.allalgorithms.com/sorting/pigeonhole-sort) - [Selection Sort](https://python.allalgorithms.com/sorting/selection-sort) - - [Stooge Sort](https://python.allalgorithms.com/sorting/stooge-sort) + - [Stooge Sort](https://python.allalgorithms.com/sorting/stooge-sor + - ### String - [Palindrome Check](https://python.allalgorithms.com/string/palindrom-check) +- ### Subarray + - [Kadane's Algorithm](https://github.com/kunal768/allalgorithms-python/blob/master/allalgorithms/subarray/kadane.py) + + # Related - [allalgorithms-javascript](https://github.com/abranhe/allalgorithms-javascript): All ▲lgorithms Javascript library From 5731fd81717611fbe6718b2affcb9381a8283cfd Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 19:55:17 +0530 Subject: [PATCH 08/16] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 71c5d38..777609b 100644 --- a/readme.md +++ b/readme.md @@ -69,7 +69,7 @@ print(binary_search(arr, 3)) - [Merge Sort](https://python.allalgorithms.com/sorting/merge-sort) - [Pigeonhole Sort](https://python.allalgorithms.com/sorting/pigeonhole-sort) - [Selection Sort](https://python.allalgorithms.com/sorting/selection-sort) - - [Stooge Sort](https://python.allalgorithms.com/sorting/stooge-sor + - [Stooge Sort](https://python.allalgorithms.com/sorting/stooge-sort) - ### String - [Palindrome Check](https://python.allalgorithms.com/string/palindrom-check) From cb28675a2293854609d78273ff0c54a12e18f649 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Wed, 2 Oct 2019 20:27:42 +0530 Subject: [PATCH 09/16] Update kadane.py --- allalgorithms/subarray/kadane.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/allalgorithms/subarray/kadane.py b/allalgorithms/subarray/kadane.py index a878b84..c4202f9 100644 --- a/allalgorithms/subarray/kadane.py +++ b/allalgorithms/subarray/kadane.py @@ -1,7 +1,6 @@ -# Algorithm for Kadane's max sum contigious subarray # -*- coding: UTF-8 -*- # -# Merge Sort Algorithm +# Kadane's Algorithm # The All ▲lgorithms library for python # # Contributed by: Kunal Keshav Singh Sahni From 57d56553915ff8a6ffabfbaf50c7e214e3c89b77 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Thu, 3 Oct 2019 21:48:06 +0530 Subject: [PATCH 10/16] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 777609b..c9429b0 100644 --- a/readme.md +++ b/readme.md @@ -75,7 +75,7 @@ print(binary_search(arr, 3)) - [Palindrome Check](https://python.allalgorithms.com/string/palindrom-check) - ### Subarray - - [Kadane's Algorithm](https://github.com/kunal768/allalgorithms-python/blob/master/allalgorithms/subarray/kadane.py) + - [Kadane's Algorithm](https://python.allalgorithms.com/subarray/kadane) # Related From d1550b52673c66bc913e146d7dd30b3e4ae63b67 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Thu, 3 Oct 2019 21:50:53 +0530 Subject: [PATCH 11/16] Create __init__.py --- allalgorithms/subarray/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 allalgorithms/subarray/__init__.py diff --git a/allalgorithms/subarray/__init__.py b/allalgorithms/subarray/__init__.py new file mode 100644 index 0000000..393ff54 --- /dev/null +++ b/allalgorithms/subarray/__init__.py @@ -0,0 +1 @@ +from .kadane import * From 32730bec3c3bff1219c6d2f3089e263c2a058aaf Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Thu, 3 Oct 2019 21:56:22 +0530 Subject: [PATCH 12/16] Update test_kadane.py --- tests/test_kadane.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_kadane.py b/tests/test_kadane.py index 14ee4b4..88f06d1 100644 --- a/tests/test_kadane.py +++ b/tests/test_kadane.py @@ -11,7 +11,7 @@ def test_returnArray(self): self.assertEqual([-1, [-1]], binary_search([-1])) def test_maxsum_subarray(self): - self.assertEqual( 11,, binary_search([2,3,-1,7])) + self.assertEqual(11,binary_search([2,3,-1,7])) self.assertEqual(5, binary_search([2,3,-2,4])) self.assertEqual(0, binary_search([-1,-1,-0,0])) self.assertEqual(-1, binary_search([-1])) From b7f3c53b8d5116af2e5f8f96fd460cf3187a9bcf Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Thu, 3 Oct 2019 22:00:42 +0530 Subject: [PATCH 13/16] Update test_kadane.py --- tests/test_kadane.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/test_kadane.py b/tests/test_kadane.py index 88f06d1..698481a 100644 --- a/tests/test_kadane.py +++ b/tests/test_kadane.py @@ -1,17 +1,16 @@ import unittest - from allalgorithms.subarray import kadane class TestSearches(unittest.TestCase): - + def test_returnArray(self): self.assertEqual( [11,[2,3,-1,7]], binary_search([2,3,-1,7])) self.assertEqual([5,[2,3]], binary_search([2,3,-2,4])) self.assertEqual([0, [0]], binary_search([-1,-1,-0,0])) self.assertEqual([-1, [-1]], binary_search([-1])) - + def test_maxsum_subarray(self): - self.assertEqual(11,binary_search([2,3,-1,7])) + self.assertEqual(11,binary_search([2,3,-1,7])) self.assertEqual(5, binary_search([2,3,-2,4])) self.assertEqual(0, binary_search([-1,-1,-0,0])) self.assertEqual(-1, binary_search([-1])) From 2e0467466347fd0add9eac58e54aa0da041001e0 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Thu, 3 Oct 2019 22:03:50 +0530 Subject: [PATCH 14/16] Update test_kadane.py --- tests/test_kadane.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/test_kadane.py b/tests/test_kadane.py index 698481a..22e1952 100644 --- a/tests/test_kadane.py +++ b/tests/test_kadane.py @@ -1,19 +1,19 @@ import unittest + from allalgorithms.subarray import kadane class TestSearches(unittest.TestCase): - def test_returnArray(self): - self.assertEqual( [11,[2,3,-1,7]], binary_search([2,3,-1,7])) - self.assertEqual([5,[2,3]], binary_search([2,3,-2,4])) - self.assertEqual([0, [0]], binary_search([-1,-1,-0,0])) - self.assertEqual([-1, [-1]], binary_search([-1])) - + self.assertEqual( [11,[2,3,-1,7]], returnArray([2,3,-1,7])) + self.assertEqual([5,[2,3]], returnArray([2,3,-2,4])) + self.assertEqual([0, [0]], returnArray([-1,-1,-0,0])) + self.assertEqual([-1, [-1]], returnArray([-1])) + def test_maxsum_subarray(self): - self.assertEqual(11,binary_search([2,3,-1,7])) - self.assertEqual(5, binary_search([2,3,-2,4])) - self.assertEqual(0, binary_search([-1,-1,-0,0])) - self.assertEqual(-1, binary_search([-1])) + self.assertEqual(11,maxsum_subarray([2,3,-1,7])) + self.assertEqual(5, maxsum_subarray([2,3,-2,4])) + self.assertEqual(0, maxsum_subarray([-1,-1,-0,0])) + self.assertEqual(-1, maxsum_subarray([-1])) if __name__ == '__main__': unittest.main() From faae893c7f86bb427e1b6e0b7b65591c7cd5b6c2 Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Thu, 3 Oct 2019 22:07:44 +0530 Subject: [PATCH 15/16] Update test_kadane.py --- tests/test_kadane.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_kadane.py b/tests/test_kadane.py index 22e1952..1b92ab7 100644 --- a/tests/test_kadane.py +++ b/tests/test_kadane.py @@ -1,6 +1,6 @@ import unittest -from allalgorithms.subarray import kadane +from allalgorithms.kadane import * class TestSearches(unittest.TestCase): def test_returnArray(self): From 73ab13e7ac7964057a79aea5a165d5f331bc7f5e Mon Sep 17 00:00:00 2001 From: kunal768 <33108756+kunal768@users.noreply.github.com> Date: Thu, 3 Oct 2019 22:23:26 +0530 Subject: [PATCH 16/16] Update test_kadane.py --- tests/test_kadane.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test_kadane.py b/tests/test_kadane.py index 1b92ab7..63da946 100644 --- a/tests/test_kadane.py +++ b/tests/test_kadane.py @@ -1,19 +1,19 @@ import unittest -from allalgorithms.kadane import * +from allalgorithms.subarray import kadane class TestSearches(unittest.TestCase): def test_returnArray(self): - self.assertEqual( [11,[2,3,-1,7]], returnArray([2,3,-1,7])) - self.assertEqual([5,[2,3]], returnArray([2,3,-2,4])) - self.assertEqual([0, [0]], returnArray([-1,-1,-0,0])) - self.assertEqual([-1, [-1]], returnArray([-1])) + self.assertEqual( [11,[2,3,-1,7]], kadane.returnArray([2,3,-1,7])) + self.assertEqual([5,[2,3]], kadane.returnArray([2,3,-2,4])) + self.assertEqual([0, [0]], kadane.returnArray([-1,-1,-0,0])) + self.assertEqual([-1, [-1]], kadane.returnArray([-1])) def test_maxsum_subarray(self): - self.assertEqual(11,maxsum_subarray([2,3,-1,7])) - self.assertEqual(5, maxsum_subarray([2,3,-2,4])) - self.assertEqual(0, maxsum_subarray([-1,-1,-0,0])) - self.assertEqual(-1, maxsum_subarray([-1])) + self.assertEqual(11,kadane.maxsum_subarray([2,3,-1,7])) + self.assertEqual(5, kadane.maxsum_subarray([2,3,-2,4])) + self.assertEqual(0, kadane.maxsum_subarray([-1,-1,-0,0])) + self.assertEqual(-1, kadane.maxsum_subarray([-1])) if __name__ == '__main__': unittest.main()