From 37f5771699501d954277bd337c5ed6e2c6860105 Mon Sep 17 00:00:00 2001 From: ShivaDahal99 <130563462+ShivaDahal99@users.noreply.github.com> Date: Mon, 22 May 2023 19:19:07 +0200 Subject: [PATCH 1/7] Create TestShiva --- TestShiva | 1 + 1 file changed, 1 insertion(+) create mode 100644 TestShiva diff --git a/TestShiva b/TestShiva new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/TestShiva @@ -0,0 +1 @@ + From baf8d49b81cb576cad1821e05ad11240110958e0 Mon Sep 17 00:00:00 2001 From: ShivaDahal99 <130563462+ShivaDahal99@users.noreply.github.com> Date: Mon, 22 May 2023 19:19:40 +0200 Subject: [PATCH 2/7] Delete TestShiva --- TestShiva | 1 - 1 file changed, 1 deletion(-) delete mode 100644 TestShiva diff --git a/TestShiva b/TestShiva deleted file mode 100644 index 8b137891791f..000000000000 --- a/TestShiva +++ /dev/null @@ -1 +0,0 @@ - From 14fbb8ef1cea422fc736054a33e9b5d52934ece6 Mon Sep 17 00:00:00 2001 From: "e.abouelkomsan" Date: Tue, 6 Jun 2023 22:46:49 +0200 Subject: [PATCH 3/7] Add the maximum subarray sum algorithm --- dynamic_programming/max_sub_array_sum.py | 42 ++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 dynamic_programming/max_sub_array_sum.py diff --git a/dynamic_programming/max_sub_array_sum.py b/dynamic_programming/max_sub_array_sum.py new file mode 100644 index 000000000000..7fcbf8277158 --- /dev/null +++ b/dynamic_programming/max_sub_array_sum.py @@ -0,0 +1,42 @@ +def maxSubArraySum(arr, size): + """ + Finds the maximum sum of a subarray within the given array using Kadane's algorithm. + + Args: + arr (list): The input array of numbers. + size (int): The size of the array. + + Returns: + int: The maximum sum of a subarray within the array. + + Example: + >>> arr = [-2, -3, 4, -1, -2, 5, -3] + >>> maxSubArraySum(arr, len(arr)) + 6 + In this example, the input array is [-2, -3, 4, -1, -2, 5, -3]. The maximum sum of a subarray + within this array is 6, which corresponds to the subarray [4, -1, -2, 5]. + + >>> arr = [-3, -4, 5, -1, 2, -4, 6, -1] + >>> maxSubArraySum(arr, len(arr)) + 8 + + References: + https://en.wikipedia.org/wiki/Maximum_subarray_problem + """ + max_till_now = arr[0] + max_ending = 0 + + for i in range(size): + max_ending = max_ending + arr[i] + if max_ending < 0: + max_ending = 0 + elif max_till_now < max_ending: + max_till_now = max_ending + + return max_till_now + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 3b3e00c39d5d5ba76eeb2b2f813e37f6dcd9cb5b Mon Sep 17 00:00:00 2001 From: "e.abouelkomsan" Date: Tue, 6 Jun 2023 22:54:41 +0200 Subject: [PATCH 4/7] Add the sliding window algorithm --- web_programming/sliding_window.py | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 web_programming/sliding_window.py diff --git a/web_programming/sliding_window.py b/web_programming/sliding_window.py new file mode 100644 index 000000000000..d6f0841c32dd --- /dev/null +++ b/web_programming/sliding_window.py @@ -0,0 +1,32 @@ +def sliding_window(elements, window_size): + """ + Generate sliding windows of a specified size over a list of elements. + + Args: + elements (list): The input list of elements. + window_size (int): The size of the sliding window. + + Returns: + list: A list of sliding windows. + + Example: + >>> lst = [1, 2, 3, 4, 5, 6, 7, 8] + >>> result = sliding_window(lst, 3) + >>> print(result) + [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8]] + """ + + if len(elements) <= window_size: + return [elements] + + windows = [] + for i in range(len(elements) - window_size + 1): + window = elements[i:i+window_size] + windows.append(window) + + return windows + +if __name__ == "__main__": + import doctest + + doctest.testmod() \ No newline at end of file From a9aa8177a770ac3d91a54f3a1bbcda1b0f44bc66 Mon Sep 17 00:00:00 2001 From: "e.abouelkomsan" Date: Wed, 7 Jun 2023 12:25:07 +0200 Subject: [PATCH 5/7] Add the sliding window algorithm using generators --- .../sliding_window_using_generators.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 web_programming/sliding_window_using_generators.py diff --git a/web_programming/sliding_window_using_generators.py b/web_programming/sliding_window_using_generators.py new file mode 100644 index 000000000000..79676ec8079d --- /dev/null +++ b/web_programming/sliding_window_using_generators.py @@ -0,0 +1,29 @@ +def sliding_window(elements, window_size): + """ + Generate sliding windows of size window_size from the given elements. + + Args: + elements (list): The input list of elements. + window_size (int): The size of the sliding window. + + Returns: + generator: A generator that yields sublists of size window_size. + + Example: + >>> lst = [1, 2, 3, 4, 5, 6, 7, 8] + >>> sw_gen = sliding_window(lst, 3) + >>> print(next(sw_gen)) + [1, 2, 3] + >>> print(next(sw_gen)) + [2, 3, 4] + """ + if len(elements) <= window_size: + return elements + for i in range(len(elements) - window_size + 1): + yield elements[i:i + window_size] + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 3e1463737447db0e22f07aa11db1e8c025957c19 Mon Sep 17 00:00:00 2001 From: Elsayed <134320661+elsayed2440@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:05:29 +0200 Subject: [PATCH 6/7] Add a reference for the sliding window --- web_programming/sliding_window.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/web_programming/sliding_window.py b/web_programming/sliding_window.py index d6f0841c32dd..3c2e404eea8a 100644 --- a/web_programming/sliding_window.py +++ b/web_programming/sliding_window.py @@ -14,6 +14,9 @@ def sliding_window(elements, window_size): >>> result = sliding_window(lst, 3) >>> print(result) [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8]] + + References: + https://stackoverflow.com/questions/8269916/what-is-sliding-window-algorithm-examples """ if len(elements) <= window_size: @@ -29,4 +32,4 @@ def sliding_window(elements, window_size): if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod() From 9384a6d5df2bb636657e54cf15ff5a0aeb36413e Mon Sep 17 00:00:00 2001 From: Elsayed <134320661+elsayed2440@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:06:26 +0200 Subject: [PATCH 7/7] Add a reference for the sliding window --- web_programming/sliding_window_using_generators.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web_programming/sliding_window_using_generators.py b/web_programming/sliding_window_using_generators.py index 79676ec8079d..5ce1a92c97fa 100644 --- a/web_programming/sliding_window_using_generators.py +++ b/web_programming/sliding_window_using_generators.py @@ -16,6 +16,9 @@ def sliding_window(elements, window_size): [1, 2, 3] >>> print(next(sw_gen)) [2, 3, 4] + + References: + https://stackoverflow.com/questions/8269916/what-is-sliding-window-algorithm-examples """ if len(elements) <= window_size: return elements