diff --git a/pydatastructs/miscellaneous_data_structures/algorithms.py b/pydatastructs/miscellaneous_data_structures/algorithms.py index 5f2204a8a..1a4ffc56a 100644 --- a/pydatastructs/miscellaneous_data_structures/algorithms.py +++ b/pydatastructs/miscellaneous_data_structures/algorithms.py @@ -53,11 +53,11 @@ class RangeQueryStatic: >>> from pydatastructs import minimum >>> arr = OneDimensionalArray(int, [4, 6, 1, 5, 7, 3]) >>> RMQ = RangeQueryStatic(arr, minimum) - >>> RMQ.query(3, 5) + >>> RMQ.query(3, 4) 5 - >>> RMQ.query(0, 5) + >>> RMQ.query(0, 4) 1 - >>> RMQ.query(0, 3) + >>> RMQ.query(0, 2) 1 Note @@ -97,9 +97,7 @@ def query(start, end): start: int The starting index of the range. end: int - The index just before which the range ends. - This means that this index will be excluded - from the range for generating results. + The ending index of the range. """ raise NotImplementedError( "This is an abstract method.") @@ -121,7 +119,7 @@ def methods(cls): return ['query'] def query(self, start, end): - _check_range_query_inputs((start, end), self.bounds) + _check_range_query_inputs((start, end + 1), self.bounds) return self.sparse_table.query(start, end) @@ -140,14 +138,14 @@ def methods(cls): return ['query'] def query(self, start, end): - _check_range_query_inputs((start, end), (0, len(self.array))) + _check_range_query_inputs((start, end + 1), (0, len(self.array))) - rsize = end - start + rsize = end - start + 1 if rsize == 1: return self.func((self.array[start],)) query_ans = self.func((self.array[start], self.array[start + 1])) - for i in range(start + 2, end): + for i in range(start + 2, end + 1): query_ans = self.func((query_ans, self.array[i])) return query_ans diff --git a/pydatastructs/miscellaneous_data_structures/sparse_table.py b/pydatastructs/miscellaneous_data_structures/sparse_table.py index 02000724d..972612eb1 100644 --- a/pydatastructs/miscellaneous_data_structures/sparse_table.py +++ b/pydatastructs/miscellaneous_data_structures/sparse_table.py @@ -86,11 +86,8 @@ def query(self, start, end): start: int The starting index of the range. end: int - The index just before which the range ends. - This means that this index will be excluded - from the range for generating results. + The ending index of the range. """ - end -= 1 j = int(math.log2(end - start + 1)) + 1 answer = None while j >= 0: diff --git a/pydatastructs/miscellaneous_data_structures/tests/test_range_query_static.py b/pydatastructs/miscellaneous_data_structures/tests/test_range_query_static.py index 86212ab11..e898653c9 100644 --- a/pydatastructs/miscellaneous_data_structures/tests/test_range_query_static.py +++ b/pydatastructs/miscellaneous_data_structures/tests/test_range_query_static.py @@ -12,9 +12,9 @@ def _test_RangeQueryStatic_common(func, gen_expected): array = OneDimensionalArray(int, [1]) rq = RangeQueryStatic(array, func) - assert rq.query(0, 1) == 1 - raises(ValueError, lambda: rq.query(0, 0)) - raises(IndexError, lambda: rq.query(0, 2)) + assert rq.query(0, 0) == 1 + raises(ValueError, lambda: rq.query(0, -1)) + raises(IndexError, lambda: rq.query(0, 1)) array_sizes = [3, 6, 12, 24, 48, 96] random.seed(0) @@ -38,18 +38,18 @@ def _test_RangeQueryStatic_common(func, gen_expected): def test_RangeQueryStatic_minimum(): def _gen_minimum_expected(data, i, j): - return min(data[i:j]) + return min(data[i:j + 1]) _test_RangeQueryStatic_common(minimum, _gen_minimum_expected) def test_RangeQueryStatic_greatest_common_divisor(): def _gen_gcd_expected(data, i, j): - if j - i == 1: + if j == i: return data[i] else: expected_gcd = math.gcd(data[i], data[i + 1]) - for idx in range(i + 2, j): + for idx in range(i + 2, j + 1): expected_gcd = math.gcd(expected_gcd, data[idx]) return expected_gcd @@ -58,6 +58,6 @@ def _gen_gcd_expected(data, i, j): def test_RangeQueryStatic_summation(): def _gen_summation_expected(data, i, j): - return sum(data[i:j]) + return sum(data[i:j + 1]) return _test_RangeQueryStatic_common(summation, _gen_summation_expected)