Compare commits

...

5 Commits

Author SHA1 Message Date
miltonbhowmick
1e5066a4b9 Merge branch 'master' of github.com:Miltonbhowmick/Python 2023-08-08 00:02:45 +06:00
github-actions
8da7cb385e updating DIRECTORY.md 2023-08-07 18:01:45 +00:00
Milton Chandro Bhowmick
f9440027f7
Merge branch 'TheAlgorithms:master' into master 2023-08-08 00:01:31 +06:00
miltonbhowmick
0f047f306e Added parameter types and function return type 2023-08-08 00:00:49 +06:00
Dipankar Mitra
db6bd4b17f
IQR function is added (#8851)
* tanh function been added

* tanh function been added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* tanh function is added

* tanh function is added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* tanh function added

* tanh function added

* tanh function is added

* Apply suggestions from code review

* ELU activation function is added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* elu activation is added

* ELU activation is added

* Update maths/elu_activation.py

Co-authored-by: Christian Clauss <cclauss@me.com>

* Exponential_linear_unit activation is added

* Exponential_linear_unit activation is added

* SiLU activation is added

* SiLU activation is added

* mish added

* mish activation is added

* inter_quartile_range function is added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Mish activation function is added

* Mish action is added

* mish activation added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* mish activation added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* inter quartile range (IQR) function is added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* IQR function is added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* code optimized in IQR function

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* interquartile_range function is added

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update maths/interquartile_range.py

Co-authored-by: Christian Clauss <cclauss@me.com>

* Changes on interquartile_range

* numpy removed from interquartile_range

* Fixes from code review

* Update interquartile_range.py

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
2023-08-07 07:47:42 -04:00
3 changed files with 83 additions and 7 deletions

View File

@ -586,6 +586,7 @@
* [Hardy Ramanujanalgo](maths/hardy_ramanujanalgo.py)
* [Hexagonal Number](maths/hexagonal_number.py)
* [Integration By Simpson Approx](maths/integration_by_simpson_approx.py)
* [Interquartile Range](maths/interquartile_range.py)
* [Is Int Palindrome](maths/is_int_palindrome.py)
* [Is Ip V4 Address Valid](maths/is_ip_v4_address_valid.py)
* [Is Square Free](maths/is_square_free.py)

View File

@ -1,10 +1,9 @@
from typing import List
import heapq
from copy import deepcopy
class UniformCostSearch:
def __init__(self, current, final, grid):
def __init__(self, current: list, final: list, grid: list[list]) -> None:
self.m = len(grid[0])
self.n = len(grid)
@ -76,7 +75,9 @@ class UniformCostSearch:
(-1, 1),
]
def get_shortest_path(self, start, end, dist, dxy):
def get_shortest_path(
self, start: list, end: list, dist: list[list], dxy: list[tuple]
) -> list:
shortest_path = []
curr_node = end
while curr_node != start:
@ -97,7 +98,15 @@ class UniformCostSearch:
shortest_path.append(start)
return shortest_path
def ucs(self, current, final, grid, prev, dxy, goal_answer):
def ucs(
self,
current: list,
final: list[list],
grid: list[list],
prev: list[list],
dxy: list[tuple],
goal_answer: list,
) -> list:
dist = [[float("inf") for _ in range(self.m)] for _ in range(self.n)]
visited = [[0 for _ in range(self.m)] for _ in range(self.n)]
@ -145,8 +154,8 @@ class UniformCostSearch:
heapq.heappush(heap, (new_dist, x + dx, y + dy))
def your_algorithm(
self, start_point: List[int], end_point: List[int], grid: List[List[int]]
) -> List[int]:
self, start_point: list, end_point: list, grid: list[list]
) -> list[int]:
prev = [[None for _ in range(self.m)] for _ in range(self.n)]
dxy = []
if start_point[1] - end_point[1] == 0 and start_point[0] - end_point[0] < 0:
@ -168,7 +177,7 @@ class UniformCostSearch:
return path
def run():
def run() -> None:
executed_object = UniformCostSearch(
[0, 7],
[19, 17],

View File

@ -0,0 +1,66 @@
"""
An implementation of interquartile range (IQR) which is a measure of statistical
dispersion, which is the spread of the data.
The function takes the list of numeric values as input and returns the IQR.
Script inspired by this Wikipedia article:
https://en.wikipedia.org/wiki/Interquartile_range
"""
from __future__ import annotations
def find_median(nums: list[int | float]) -> float:
"""
This is the implementation of the median.
:param nums: The list of numeric nums
:return: Median of the list
>>> find_median(nums=([1, 2, 2, 3, 4]))
2
>>> find_median(nums=([1, 2, 2, 3, 4, 4]))
2.5
>>> find_median(nums=([-1, 2, 0, 3, 4, -4]))
1.5
>>> find_median(nums=([1.1, 2.2, 2, 3.3, 4.4, 4]))
2.65
"""
div, mod = divmod(len(nums), 2)
if mod:
return nums[div]
return (nums[div] + nums[(div) - 1]) / 2
def interquartile_range(nums: list[int | float]) -> float:
"""
Return the interquartile range for a list of numeric values.
:param nums: The list of numeric values.
:return: interquartile range
>>> interquartile_range(nums=[4, 1, 2, 3, 2])
2.0
>>> interquartile_range(nums = [-2, -7, -10, 9, 8, 4, -67, 45])
17.0
>>> interquartile_range(nums = [-2.1, -7.1, -10.1, 9.1, 8.1, 4.1, -67.1, 45.1])
17.2
>>> interquartile_range(nums = [0, 0, 0, 0, 0])
0.0
>>> interquartile_range(nums=[])
Traceback (most recent call last):
...
ValueError: The list is empty. Provide a non-empty list.
"""
if not nums:
raise ValueError("The list is empty. Provide a non-empty list.")
nums.sort()
length = len(nums)
div, mod = divmod(length, 2)
q1 = find_median(nums[:div])
half_length = sum((div, mod))
q3 = find_median(nums[half_length:length])
return q3 - q1
if __name__ == "__main__":
import doctest
doctest.testmod()