mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-18 01:00:15 +00:00
Add Topological Sort (#1302)
* add topological sort * fix topological sort? * running black * renaming file
This commit is contained in:
parent
ddb094919b
commit
455509acee
|
@ -44,7 +44,7 @@ def chinese_remainder_theorem(n1, r1, n2, r2):
|
||||||
(x, y) = extended_euclid(n1, n2)
|
(x, y) = extended_euclid(n1, n2)
|
||||||
m = n1 * n2
|
m = n1 * n2
|
||||||
n = r2 * x * n1 + r1 * y * n2
|
n = r2 * x * n1 + r1 * y * n2
|
||||||
return ((n % m + m) % m)
|
return (n % m + m) % m
|
||||||
|
|
||||||
|
|
||||||
# ----------SAME SOLUTION USING InvertModulo instead ExtendedEuclid----------------
|
# ----------SAME SOLUTION USING InvertModulo instead ExtendedEuclid----------------
|
||||||
|
@ -84,8 +84,8 @@ def chinese_remainder_theorem2(n1, r1, n2, r2):
|
||||||
# import testmod for testing our function
|
# import testmod for testing our function
|
||||||
from doctest import testmod
|
from doctest import testmod
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
testmod(name='chinese_remainder_theorem', verbose=True)
|
testmod(name="chinese_remainder_theorem", verbose=True)
|
||||||
testmod(name='chinese_remainder_theorem2', verbose=True)
|
testmod(name="chinese_remainder_theorem2", verbose=True)
|
||||||
testmod(name='invert_modulo', verbose=True)
|
testmod(name="invert_modulo", verbose=True)
|
||||||
testmod(name='extended_euclid', verbose=True)
|
testmod(name="extended_euclid", verbose=True)
|
||||||
|
|
|
@ -17,7 +17,9 @@ def diophantine(a, b, c):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
assert c % greatest_common_divisor(a, b) == 0 # greatest_common_divisor(a,b) function implemented below
|
assert (
|
||||||
|
c % greatest_common_divisor(a, b) == 0
|
||||||
|
) # greatest_common_divisor(a,b) function implemented below
|
||||||
(d, x, y) = extended_gcd(a, b) # extended_gcd(a,b) function implemented below
|
(d, x, y) = extended_gcd(a, b) # extended_gcd(a,b) function implemented below
|
||||||
r = c / d
|
r = c / d
|
||||||
return (r * x, r * y)
|
return (r * x, r * y)
|
||||||
|
@ -32,6 +34,7 @@ def diophantine(a, b, c):
|
||||||
|
|
||||||
# n is the number of solution you want, n = 2 by default
|
# n is the number of solution you want, n = 2 by default
|
||||||
|
|
||||||
|
|
||||||
def diophantine_all_soln(a, b, c, n=2):
|
def diophantine_all_soln(a, b, c, n=2):
|
||||||
"""
|
"""
|
||||||
>>> diophantine_all_soln(10, 6, 14)
|
>>> diophantine_all_soln(10, 6, 14)
|
||||||
|
@ -66,6 +69,7 @@ def diophantine_all_soln(a, b, c, n=2):
|
||||||
|
|
||||||
# Euclid's Algorithm
|
# Euclid's Algorithm
|
||||||
|
|
||||||
|
|
||||||
def greatest_common_divisor(a, b):
|
def greatest_common_divisor(a, b):
|
||||||
"""
|
"""
|
||||||
>>> greatest_common_divisor(7,5)
|
>>> greatest_common_divisor(7,5)
|
||||||
|
@ -117,8 +121,8 @@ def extended_gcd(a, b):
|
||||||
# import testmod for testing our function
|
# import testmod for testing our function
|
||||||
from doctest import testmod
|
from doctest import testmod
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
testmod(name='diophantine', verbose=True)
|
testmod(name="diophantine", verbose=True)
|
||||||
testmod(name='diophantine_all_soln', verbose=True)
|
testmod(name="diophantine_all_soln", verbose=True)
|
||||||
testmod(name='extended_gcd', verbose=True)
|
testmod(name="extended_gcd", verbose=True)
|
||||||
testmod(name='greatest_common_divisor', verbose=True)
|
testmod(name="greatest_common_divisor", verbose=True)
|
||||||
|
|
|
@ -70,6 +70,7 @@ def modular_division2(a, b, n):
|
||||||
|
|
||||||
# Extended Euclid's Algorithm : If d divides a and b and d = a*x + b*y for integers x and y, then d = gcd(a,b)
|
# Extended Euclid's Algorithm : If d divides a and b and d = a*x + b*y for integers x and y, then d = gcd(a,b)
|
||||||
|
|
||||||
|
|
||||||
def extended_gcd(a, b):
|
def extended_gcd(a, b):
|
||||||
"""
|
"""
|
||||||
>>> extended_gcd(10, 6)
|
>>> extended_gcd(10, 6)
|
||||||
|
@ -116,6 +117,7 @@ def extended_euclid(a, b):
|
||||||
# Euclid's Lemma : d divides a and b, if and only if d divides a-b and b
|
# Euclid's Lemma : d divides a and b, if and only if d divides a-b and b
|
||||||
# Euclid's Algorithm
|
# Euclid's Algorithm
|
||||||
|
|
||||||
|
|
||||||
def greatest_common_divisor(a, b):
|
def greatest_common_divisor(a, b):
|
||||||
"""
|
"""
|
||||||
>>> greatest_common_divisor(7,5)
|
>>> greatest_common_divisor(7,5)
|
||||||
|
@ -140,10 +142,10 @@ def greatest_common_divisor(a, b):
|
||||||
# Import testmod for testing our function
|
# Import testmod for testing our function
|
||||||
from doctest import testmod
|
from doctest import testmod
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
testmod(name='modular_division', verbose=True)
|
testmod(name="modular_division", verbose=True)
|
||||||
testmod(name='modular_division2', verbose=True)
|
testmod(name="modular_division2", verbose=True)
|
||||||
testmod(name='invert_modulo', verbose=True)
|
testmod(name="invert_modulo", verbose=True)
|
||||||
testmod(name='extended_gcd', verbose=True)
|
testmod(name="extended_gcd", verbose=True)
|
||||||
testmod(name='extended_euclid', verbose=True)
|
testmod(name="extended_euclid", verbose=True)
|
||||||
testmod(name='greatest_common_divisor', verbose=True)
|
testmod(name="greatest_common_divisor", verbose=True)
|
||||||
|
|
47
graphs/g_topological_sort.py
Normal file
47
graphs/g_topological_sort.py
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# Author: Phyllipe Bezerra (https://github.com/pmba)
|
||||||
|
|
||||||
|
clothes = {
|
||||||
|
0: "underwear",
|
||||||
|
1: "pants",
|
||||||
|
2: "belt",
|
||||||
|
3: "suit",
|
||||||
|
4: "shoe",
|
||||||
|
5: "socks",
|
||||||
|
6: "shirt",
|
||||||
|
7: "tie",
|
||||||
|
8: "clock",
|
||||||
|
}
|
||||||
|
|
||||||
|
graph = [[1, 4], [2, 4], [3], [], [], [4], [2, 7], [3], []]
|
||||||
|
|
||||||
|
visited = [0 for x in range(len(graph))]
|
||||||
|
stack = []
|
||||||
|
|
||||||
|
|
||||||
|
def print_stack(stack, clothes):
|
||||||
|
order = 1
|
||||||
|
while stack:
|
||||||
|
cur_clothe = stack.pop()
|
||||||
|
print(order, clothes[cur_clothe])
|
||||||
|
order += 1
|
||||||
|
|
||||||
|
|
||||||
|
def dfs(u, visited, graph):
|
||||||
|
visited[u] = 1
|
||||||
|
for v in graph[u]:
|
||||||
|
if not visited[v]:
|
||||||
|
dfs(v, visited, graph)
|
||||||
|
|
||||||
|
stack.append(u)
|
||||||
|
|
||||||
|
|
||||||
|
def top_sort(graph, visited):
|
||||||
|
for v in range(len(graph)):
|
||||||
|
if not visited[v]:
|
||||||
|
dfs(v, visited, graph)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
top_sort(graph, visited)
|
||||||
|
print(stack)
|
||||||
|
print_stack(stack, clothes)
|
|
@ -5,12 +5,13 @@ from sklearn.model_selection import train_test_split
|
||||||
|
|
||||||
data = datasets.load_iris()
|
data = datasets.load_iris()
|
||||||
|
|
||||||
X = np.array(data['data'])
|
X = np.array(data["data"])
|
||||||
y = np.array(data['target'])
|
y = np.array(data["target"])
|
||||||
classes = data['target_names']
|
classes = data["target_names"]
|
||||||
|
|
||||||
X_train, X_test, y_train, y_test = train_test_split(X, y)
|
X_train, X_test, y_train, y_test = train_test_split(X, y)
|
||||||
|
|
||||||
|
|
||||||
def euclidean_distance(a, b):
|
def euclidean_distance(a, b):
|
||||||
"""
|
"""
|
||||||
Gives the euclidean distance between two points
|
Gives the euclidean distance between two points
|
||||||
|
@ -21,6 +22,7 @@ def euclidean_distance(a, b):
|
||||||
"""
|
"""
|
||||||
return np.linalg.norm(np.array(a) - np.array(b))
|
return np.linalg.norm(np.array(a) - np.array(b))
|
||||||
|
|
||||||
|
|
||||||
def classifier(train_data, train_target, classes, point, k=5):
|
def classifier(train_data, train_target, classes, point, k=5):
|
||||||
"""
|
"""
|
||||||
Classifies the point using the KNN algorithm
|
Classifies the point using the KNN algorithm
|
||||||
|
|
|
@ -6,7 +6,7 @@ def recur_fibo(n):
|
||||||
>>> [recur_fibo(i) for i in range(12)]
|
>>> [recur_fibo(i) for i in range(12)]
|
||||||
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
|
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
|
||||||
"""
|
"""
|
||||||
return n if n <= 1 else recur_fibo(n-1) + recur_fibo(n-2)
|
return n if n <= 1 else recur_fibo(n - 1) + recur_fibo(n - 2)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
@ -8,7 +8,7 @@ def sum_of_series(first_term, common_diff, num_of_terms):
|
||||||
>>> sum_of_series(1, 10, 100)
|
>>> sum_of_series(1, 10, 100)
|
||||||
49600.0
|
49600.0
|
||||||
"""
|
"""
|
||||||
sum = ((num_of_terms/2)*(2*first_term+(num_of_terms-1)*common_diff))
|
sum = (num_of_terms / 2) * (2 * first_term + (num_of_terms - 1) * common_diff)
|
||||||
# formula for sum of series
|
# formula for sum of series
|
||||||
return sum
|
return sum
|
||||||
|
|
||||||
|
@ -19,4 +19,5 @@ def main():
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import doctest
|
import doctest
|
||||||
|
|
||||||
doctest.testmod()
|
doctest.testmod()
|
||||||
|
|
|
@ -33,6 +33,7 @@ def stooge(arr, i, h):
|
||||||
# Recursively sort first 2/3 elements
|
# Recursively sort first 2/3 elements
|
||||||
stooge(arr, i, (h - t))
|
stooge(arr, i, (h - t))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
user_input = input("Enter numbers separated by a comma:\n").strip()
|
user_input = input("Enter numbers separated by a comma:\n").strip()
|
||||||
unsorted = [int(item) for item in user_input.split(",")]
|
unsorted = [int(item) for item in user_input.split(",")]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user