diff --git a/data_structures/heap/fibonacci_heap.py b/data_structures/heap/fibonacci_heap.py new file mode 100644 index 000000000000..4fa792264bf2 --- /dev/null +++ b/data_structures/heap/fibonacci_heap.py @@ -0,0 +1,273 @@ +class Node: + def __init__(self, key: int) -> None: + """ + Initialize a Fibonacci heap node. + + :param key: The key value of the node. + """ + self.key = key + self.degree = 0 + self.is_marked = False + self.parent = None + self.next = self # Pointer to the next node in the circular list + self.prev = self # Pointer to the previous node in the circular list + self.child = None # Pointer to the first child node + + +class FibonacciHeap: + def __init__(self) -> None: + """ + Initialize a Fibonacci heap. + """ + self.min_node = None # Pointer to the minimum node + self.num_nodes = 0 # Number of nodes in the heap + + def insert(self, key: int) -> None: + """ + Insert a new key into the Fibonacci heap. + + :param key: The key value to be inserted. + + >>> heap = FibonacciHeap() + >>> heap.insert(10) + >>> heap.min_node.key + 10 + >>> heap.insert(5) + >>> heap.min_node.key + 5 + """ + new_node = Node(key) + if self.min_node is None: + self.min_node = new_node + else: + self._insert_to_root_list(new_node) + if new_node.key < self.min_node.key: + self.min_node = new_node + self.num_nodes += 1 + + def _insert_to_root_list(self, node: Node) -> None: + """ + Insert a node into the root list of the Fibonacci heap. + + :param node: The node to be inserted. + + >>> heap = FibonacciHeap() + >>> node1 = Node(10) + >>> heap._insert_to_root_list(node1) + >>> heap.min_node = node1 + >>> node2 = Node(5) + >>> heap._insert_to_root_list(node2) + >>> heap.min_node.next.key + 10 + """ + # Linking the new node into the root list + node.prev = self.min_node.prev + node.next = self.min_node + self.min_node.prev.next = node + self.min_node.prev = node + + def extract_min(self) -> int: + """ + Extract the minimum key from the Fibonacci heap. + + :return: The minimum key in the heap. + + >>> heap = FibonacciHeap() + >>> heap.insert(10) + >>> heap.insert(5) + >>> heap.extract_min() + 5 + >>> heap.extract_min() + 10 + >>> heap.extract_min() + >>> heap.is_empty() + True + """ + if (min_node := self.min_node) is not None: + # Remove min_node from the root list + if min_node.child is not None: + # Add children of min_node to the root list + child = min_node.child + while True: + next_child = child.next + self._insert_to_root_list(child) + child.parent = None + if next_child == min_node.child: + break + child = next_child + + # Remove min_node from root list + if min_node == min_node.next: + self.min_node = None # Heap is now empty + else: + # Remove min_node from root list + min_node.prev.next = min_node.next + min_node.next.prev = min_node.prev + self.min_node = min_node.next # Update min_node to next node + self._consolidate() + self.num_nodes -= 1 + return min_node.key + return None + + def _consolidate(self) -> None: + """ + Consolidate the trees in the Fibonacci heap. + """ + if self.min_node is None: + return + + # Create an array to hold the trees by degree + max_degree = self.num_nodes + degree_array = [None] * (max_degree + 1) + + current = self.min_node + nodes = [] + + # Store all nodes in a list + while True: + nodes.append(current) + current = current.next + if current == self.min_node: + break + + for node in nodes: + degree = node.degree + while degree_array[degree] is not None: + other = degree_array[degree] + # Link the trees + if node.key > other.key: + node, other = other, node + self._link(node, other) + degree_array[degree] = None + degree += 1 + degree_array[degree] = node + + # Find the new minimum + self.min_node = None + for node in degree_array: + if node is not None: + if self.min_node is None or node.key < self.min_node.key: + self.min_node = node + + def _link(self, node1: Node, node2: Node) -> None: + """ + Link two trees of equal degree. + + :param node1: The first node to link. + :param node2: The second node to link. + """ + # Linking logic + if node1.key > node2.key: + node1, node2 = node2, node1 + node2.prev.next = node2.next + node2.next.prev = node2.prev + node2.parent = node1 + if node1.child is None: + node1.child = node2 + node2.next = node2 + node2.prev = node2 + else: + self._insert_to_root_list(node2) + node1.degree += 1 + node2.is_marked = False + + def decrease_key(self, node: Node, new_key: int) -> None: + """ + Decrease the key of a given node. + + :param node: The node to decrease the key for. + :param new_key: The new key value to set. + + >>> heap = FibonacciHeap() + >>> heap.insert(10) + >>> node = Node(20) + >>> heap.insert(20) + >>> heap.decrease_key(node, 5) + >>> heap.min_node.key + 5 + """ + if new_key > node.key: + raise ValueError("New key is greater than current key") + node.key = new_key + parent = node.parent + + if parent is not None and node.key < parent.key: + self._cut(node, parent) + self._insert_to_root_list(node) + if node.key < self.min_node.key: + self.min_node = node + + def _cut(self, node: Node, parent: Node) -> None: + """ + Cut a node from its parent. + + :param node: The node to cut. + :param parent: The parent node. + """ + # Remove node from the parent's child list + if parent.child == node: + parent.child = node.next if node.next != node else None + if parent.child is None: + parent.degree -= 1 + else: + parent.degree -= 1 + node.prev.next = node.next + node.next.prev = node.prev + + node.prev = self.min_node.prev + node.next = self.min_node + self.min_node.prev.next = node + self.min_node.prev = node + node.parent = None + node.is_marked = False + + def delete(self, node): + """Delete a node from the heap.""" + self.decrease_key(node, float("-inf")) # Decrease the key to -infinity + self.extract_min() # Extract the minimum node + + def is_empty(self): + """Check if the heap is empty.""" + return self.min_node is None + + def size(self) -> int: + """ + Return the number of nodes in the Fibonacci heap. + + :return: The number of nodes in the heap. + + >>> heap = FibonacciHeap() + >>> heap.size() + 0 + >>> heap.insert(10) + >>> heap.size() + 1 + """ + return self.num_nodes + + def min(self) -> int: + """ + Return the minimum key in the Fibonacci heap. + + :return: The minimum key. + + >>> heap = FibonacciHeap() + >>> heap.insert(10) + >>> heap.insert(5) + >>> heap.min() + 5 + """ + return self.min_node.key if self.min_node else None + + +# Example Usage +if __name__ == "__main__": + fib_heap = FibonacciHeap() + fib_heap.insert(10) + fib_heap.insert(2) + fib_heap.insert(5) + fib_heap.insert(7) + + print("Minimum:", fib_heap.min()) # Output: Minimum: 2 + print("Extracted Min:", fib_heap.extract_min()) # Output: Extracted Min: 2 + print("New Minimum:", fib_heap.min()) # Output: New Minimum: 5 diff --git a/filestructure.txt b/filestructure.txt new file mode 100644 index 000000000000..dd792dd90167 --- /dev/null +++ b/filestructure.txt @@ -0,0 +1,1671 @@ +|-- .devcontainer + |-- devcontainer.json + |-- Dockerfile + |-- README.md +|-- .gitattributes +|-- .github + |-- CODEOWNERS + |-- dependabot.yml + |-- ISSUE_TEMPLATE + |-- bug_report.yml + |-- config.yml + |-- feature_request.yml + |-- other.yml + |-- pull_request_template.md + |-- stale.yml + |-- workflows + |-- build.yml + |-- directory_writer.yml + |-- project_euler.yml + |-- ruff.yml +|-- .gitignore +|-- .gitpod.yml +|-- .pre-commit-config.yaml +|-- audio_filters + |-- butterworth_filter.py + |-- equal_loudness_filter.py.broken.txt + |-- iir_filter.py + |-- loudness_curve.json + |-- README.md + |-- show_response.py + |-- __init__.py +|-- backtracking + |-- all_combinations.py + |-- all_permutations.py + |-- all_subsequences.py + |-- coloring.py + |-- combination_sum.py + |-- crossword_puzzle_solver.py + |-- generate_parentheses.py + |-- hamiltonian_cycle.py + |-- knight_tour.py + |-- match_word_pattern.py + |-- minimax.py + |-- n_queens.py + |-- n_queens_math.py + |-- power_sum.py + |-- rat_in_maze.py + |-- README.md + |-- sudoku.py + |-- sum_of_subsets.py + |-- word_break.py + |-- word_ladder.py + |-- word_search.py + |-- __init__.py +|-- bit_manipulation + |-- binary_and_operator.py + |-- binary_coded_decimal.py + |-- binary_count_setbits.py + |-- binary_count_trailing_zeros.py + |-- binary_or_operator.py + |-- binary_shifts.py + |-- binary_twos_complement.py + |-- binary_xor_operator.py + |-- bitwise_addition_recursive.py + |-- count_1s_brian_kernighan_method.py + |-- count_number_of_one_bits.py + |-- excess_3_code.py + |-- find_previous_power_of_two.py + |-- gray_code_sequence.py + |-- highest_set_bit.py + |-- index_of_rightmost_set_bit.py + |-- is_even.py + |-- is_power_of_two.py + |-- largest_pow_of_two_le_num.py + |-- missing_number.py + |-- numbers_different_signs.py + |-- power_of_4.py + |-- README.md + |-- reverse_bits.py + |-- single_bit_manipulation_operations.py + |-- swap_all_odd_and_even_bits.py + |-- __init__.py +|-- blockchain + |-- diophantine_equation.py + |-- README.md + |-- __init__.py +|-- boolean_algebra + |-- and_gate.py + |-- imply_gate.py + |-- karnaugh_map_simplification.py + |-- multiplexer.py + |-- nand_gate.py + |-- nimply_gate.py + |-- nor_gate.py + |-- not_gate.py + |-- or_gate.py + |-- quine_mc_cluskey.py + |-- README.md + |-- xnor_gate.py + |-- xor_gate.py + |-- __init__.py +|-- cellular_automata + |-- conways_game_of_life.py + |-- game_of_life.py + |-- langtons_ant.py + |-- nagel_schrekenberg.py + |-- one_dimensional.py + |-- README.md + |-- wa_tor.py + |-- __init__.py +|-- ciphers + |-- a1z26.py + |-- affine_cipher.py + |-- atbash.py + |-- autokey.py + |-- baconian_cipher.py + |-- base16.py + |-- base32.py + |-- base64.py + |-- base85.py + |-- beaufort_cipher.py + |-- bifid.py + |-- brute_force_caesar_cipher.py + |-- caesar_cipher.py + |-- cryptomath_module.py + |-- decrypt_caesar_with_chi_squared.py + |-- deterministic_miller_rabin.py + |-- diffie.py + |-- diffie_hellman.py + |-- elgamal_key_generator.py + |-- enigma_machine2.py + |-- fractionated_morse_cipher.py + |-- gronsfeld_cipher.py + |-- hill_cipher.py + |-- mixed_keyword_cypher.py + |-- mono_alphabetic_ciphers.py + |-- morse_code.py + |-- onepad_cipher.py + |-- permutation_cipher.py + |-- playfair_cipher.py + |-- polybius.py + |-- porta_cipher.py + |-- prehistoric_men.txt + |-- rabin_miller.py + |-- rail_fence_cipher.py + |-- README.md + |-- rot13.py + |-- rsa_cipher.py + |-- rsa_factorization.py + |-- rsa_key_generator.py + |-- running_key_cipher.py + |-- shuffled_shift_cipher.py + |-- simple_keyword_cypher.py + |-- simple_substitution_cipher.py + |-- transposition_cipher.py + |-- transposition_cipher_encrypt_decrypt_file.py + |-- trifid_cipher.py + |-- vernam_cipher.py + |-- vigenere_cipher.py + |-- xor_cipher.py + |-- __init__.py +|-- compression + |-- burrows_wheeler.py + |-- huffman.py + |-- image_data + |-- compressed_image.png + |-- example_image.jpg + |-- example_wikipedia_image.jpg + |-- original_image.png + |-- PSNR-example-base.png + |-- PSNR-example-comp-10.jpg + |-- __init__.py + |-- lempel_ziv.py + |-- lempel_ziv_decompress.py + |-- lz77.py + |-- peak_signal_to_noise_ratio.py + |-- README.md + |-- run_length_encoding.py + |-- __init__.py +|-- computer_vision + |-- cnn_classification.py + |-- flip_augmentation.py + |-- haralick_descriptors.py + |-- harris_corner.py + |-- horn_schunck.py + |-- mean_threshold.py + |-- mosaic_augmentation.py + |-- pooling_functions.py + |-- README.md + |-- __init__.py +|-- CONTRIBUTING.md +|-- conversions + |-- astronomical_length_scale_conversion.py + |-- binary_to_decimal.py + |-- binary_to_hexadecimal.py + |-- binary_to_octal.py + |-- convert_number_to_words.py + |-- decimal_to_any.py + |-- decimal_to_binary.py + |-- decimal_to_hexadecimal.py + |-- decimal_to_octal.py + |-- energy_conversions.py + |-- excel_title_to_column.py + |-- hexadecimal_to_decimal.py + |-- hex_to_bin.py + |-- ipv4_conversion.py + |-- length_conversion.py + |-- molecular_chemistry.py + |-- octal_to_binary.py + |-- octal_to_decimal.py + |-- octal_to_hexadecimal.py + |-- prefix_conversions.py + |-- prefix_conversions_string.py + |-- pressure_conversions.py + |-- README.md + |-- rgb_cmyk_conversion.py + |-- rgb_hsv_conversion.py + |-- roman_numerals.py + |-- speed_conversions.py + |-- temperature_conversions.py + |-- time_conversions.py + |-- volume_conversions.py + |-- weight_conversion.py + |-- __init__.py +|-- data_structures + |-- arrays + |-- equilibrium_index_in_array.py + |-- find_triplets_with_0_sum.py + |-- index_2d_array_in_1d.py + |-- kth_largest_element.py + |-- median_two_array.py + |-- monotonic_array.py + |-- pairs_with_given_sum.py + |-- permutations.py + |-- prefix_sum.py + |-- product_sum.py + |-- sparse_table.py + |-- sudoku_solver.py + |-- __init__.py + |-- binary_tree + |-- avl_tree.py + |-- basic_binary_tree.py + |-- binary_search_tree.py + |-- binary_search_tree_recursive.py + |-- binary_tree_mirror.py + |-- binary_tree_node_sum.py + |-- binary_tree_path_sum.py + |-- binary_tree_traversals.py + |-- diameter_of_binary_tree.py + |-- diff_views_of_binary_tree.py + |-- distribute_coins.py + |-- fenwick_tree.py + |-- flatten_binarytree_to_linkedlist.py + |-- floor_and_ceiling.py + |-- inorder_tree_traversal_2022.py + |-- is_sorted.py + |-- is_sum_tree.py + |-- lazy_segment_tree.py + |-- lowest_common_ancestor.py + |-- maximum_fenwick_tree.py + |-- maximum_sum_bst.py + |-- merge_two_binary_trees.py + |-- mirror_binary_tree.py + |-- non_recursive_segment_tree.py + |-- number_of_possible_binary_trees.py + |-- README.md + |-- red_black_tree.py + |-- segment_tree.py + |-- segment_tree_other.py + |-- serialize_deserialize_binary_tree.py + |-- symmetric_tree.py + |-- treap.py + |-- wavelet_tree.py + |-- __init__.py + |-- disjoint_set + |-- alternate_disjoint_set.py + |-- disjoint_set.py + |-- __init__.py + |-- hashing + |-- bloom_filter.py + |-- double_hash.py + |-- hash_map.py + |-- hash_table.py + |-- hash_table_with_linked_list.py + |-- number_theory + |-- prime_numbers.py + |-- __init__.py + |-- quadratic_probing.py + |-- tests + |-- test_hash_map.py + |-- __init__.py + |-- __init__.py + |-- heap + |-- binomial_heap.py + |-- fibonacci_heap.py + |-- heap.py + |-- heap_generic.py + |-- max_heap.py + |-- min_heap.py + |-- randomized_heap.py + |-- skew_heap.py + |-- __init__.py + |-- kd_tree + |-- build_kdtree.py + |-- example + |-- example_usage.py + |-- hypercube_points.py + |-- __init__.py + |-- kd_node.py + |-- nearest_neighbour_search.py + |-- tests + |-- test_kdtree.py + |-- __init__.py + |-- __init__.py + |-- linked_list + |-- circular_linked_list.py + |-- deque_doubly.py + |-- doubly_linked_list.py + |-- doubly_linked_list_two.py + |-- floyds_cycle_detection.py + |-- from_sequence.py + |-- has_loop.py + |-- is_palindrome.py + |-- merge_two_lists.py + |-- middle_element_of_linked_list.py + |-- print_reverse.py + |-- reverse_k_group.py + |-- rotate_to_the_right.py + |-- singly_linked_list.py + |-- skip_list.py + |-- swap_nodes.py + |-- __init__.py + |-- queue + |-- circular_queue.py + |-- circular_queue_linked_list.py + |-- double_ended_queue.py + |-- linked_queue.py + |-- priority_queue_using_list.py + |-- queue_by_list.py + |-- queue_by_two_stacks.py + |-- queue_on_pseudo_stack.py + |-- __init__.py + |-- stacks + |-- balanced_parentheses.py + |-- dijkstras_two_stack_algorithm.py + |-- infix_to_postfix_conversion.py + |-- infix_to_prefix_conversion.py + |-- lexicographical_numbers.py + |-- next_greater_element.py + |-- postfix_evaluation.py + |-- prefix_evaluation.py + |-- stack.py + |-- stack_using_two_queues.py + |-- stack_with_doubly_linked_list.py + |-- stack_with_singly_linked_list.py + |-- stock_span_problem.py + |-- __init__.py + |-- suffix_tree + |-- example + |-- example_usage.py + |-- __init__.py + |-- suffix_tree.py + |-- suffix_tree_node.py + |-- tests + |-- test_suffix_tree.py + |-- __init__.py + |-- __init__.py + |-- trie + |-- radix_tree.py + |-- trie.py + |-- __init__.py + |-- __init__.py +|-- digital_image_processing + |-- change_brightness.py + |-- change_contrast.py + |-- convert_to_negative.py + |-- dithering + |-- burkes.py + |-- __init__.py + |-- edge_detection + |-- canny.py + |-- __init__.py + |-- filters + |-- bilateral_filter.py + |-- convolve.py + |-- gabor_filter.py + |-- gaussian_filter.py + |-- laplacian_filter.py + |-- local_binary_pattern.py + |-- median_filter.py + |-- sobel_filter.py + |-- __init__.py + |-- histogram_equalization + |-- histogram_stretch.py + |-- image_data + |-- input.jpg + |-- __init__.py + |-- output_data + |-- output.jpg + |-- __init__.py + |-- __init__.py + |-- image_data + |-- lena.jpg + |-- lena_small.jpg + |-- __init__.py + |-- index_calculation.py + |-- morphological_operations + |-- dilation_operation.py + |-- erosion_operation.py + |-- __init__.py + |-- resize + |-- resize.py + |-- __init__.py + |-- rotation + |-- rotation.py + |-- __init__.py + |-- sepia.py + |-- test_digital_image_processing.py + |-- __init__.py +|-- DIRECTORY.md +|-- divide_and_conquer + |-- closest_pair_of_points.py + |-- convex_hull.py + |-- heaps_algorithm.py + |-- heaps_algorithm_iterative.py + |-- inversions.py + |-- kth_order_statistic.py + |-- max_difference_pair.py + |-- max_subarray.py + |-- mergesort.py + |-- peak.py + |-- power.py + |-- strassen_matrix_multiplication.py + |-- __init__.py +|-- docs + |-- source + |-- __init__.py +|-- dynamic_programming + |-- abbreviation.py + |-- all_construct.py + |-- bitmask.py + |-- catalan_numbers.py + |-- climbing_stairs.py + |-- combination_sum_iv.py + |-- edit_distance.py + |-- factorial.py + |-- fast_fibonacci.py + |-- fibonacci.py + |-- fizz_buzz.py + |-- floyd_warshall.py + |-- integer_partition.py + |-- iterating_through_submasks.py + |-- knapsack.py + |-- k_means_clustering_tensorflow.py + |-- largest_divisible_subset.py + |-- longest_common_subsequence.py + |-- longest_common_substring.py + |-- longest_increasing_subsequence.py + |-- longest_increasing_subsequence_o_nlogn.py + |-- longest_palindromic_subsequence.py + |-- matrix_chain_multiplication.py + |-- matrix_chain_order.py + |-- max_non_adjacent_sum.py + |-- max_product_subarray.py + |-- max_subarray_sum.py + |-- minimum_coin_change.py + |-- minimum_cost_path.py + |-- minimum_partition.py + |-- minimum_size_subarray_sum.py + |-- minimum_squares_to_represent_a_number.py + |-- minimum_steps_to_one.py + |-- minimum_tickets_cost.py + |-- min_distance_up_bottom.py + |-- optimal_binary_search_tree.py + |-- palindrome_partitioning.py + |-- regex_match.py + |-- rod_cutting.py + |-- smith_waterman.py + |-- subset_generation.py + |-- sum_of_subset.py + |-- trapped_water.py + |-- tribonacci.py + |-- viterbi.py + |-- wildcard_matching.py + |-- word_break.py + |-- __init__.py +|-- electronics + |-- apparent_power.py + |-- builtin_voltage.py + |-- capacitor_equivalence.py + |-- carrier_concentration.py + |-- charging_capacitor.py + |-- charging_inductor.py + |-- circular_convolution.py + |-- coulombs_law.py + |-- electrical_impedance.py + |-- electric_conductivity.py + |-- electric_power.py + |-- ic_555_timer.py + |-- ind_reactance.py + |-- ohms_law.py + |-- real_and_reactive_power.py + |-- resistor_color_code.py + |-- resistor_equivalence.py + |-- resonant_frequency.py + |-- wheatstone_bridge.py + |-- __init__.py +|-- file_transfer + |-- mytext.txt + |-- receive_file.py + |-- send_file.py + |-- tests + |-- test_send_file.py + |-- __init__.py + |-- __init__.py +|-- financial + |-- ABOUT.md + |-- equated_monthly_installments.py + |-- exponential_moving_average.py + |-- interest.py + |-- present_value.py + |-- price_plus_tax.py + |-- simple_moving_average.py + |-- __init__.py +|-- fractals + |-- julia_sets.py + |-- koch_snowflake.py + |-- mandelbrot.py + |-- sierpinski_triangle.py + |-- vicsek.py + |-- __init__.py +|-- fuzzy_logic + |-- fuzzy_operations.py + |-- fuzzy_operations.py.DISABLED.txt + |-- __init__.py +|-- genetic_algorithm + |-- basic_string.py + |-- __init__.py +|-- geodesy + |-- haversine_distance.py + |-- lamberts_ellipsoidal_distance.py + |-- __init__.py +|-- geometry + |-- geometry.py + |-- __init__.py +|-- graphics + |-- bezier_curve.py + |-- vector3_for_2d_rendering.py + |-- __init__.py +|-- graphs + |-- ant_colony_optimization_algorithms.py + |-- articulation_points.py + |-- a_star.py + |-- basic_graphs.py + |-- bellman_ford.py + |-- bidirectional_a_star.py + |-- bidirectional_breadth_first_search.py + |-- bi_directional_dijkstra.py + |-- boruvka.py + |-- breadth_first_search.py + |-- breadth_first_search_2.py + |-- breadth_first_search_shortest_path.py + |-- breadth_first_search_shortest_path_2.py + |-- breadth_first_search_zero_one_shortest_path.py + |-- check_bipatrite.py + |-- check_cycle.py + |-- connected_components.py + |-- deep_clone_graph.py + |-- depth_first_search.py + |-- depth_first_search_2.py + |-- dijkstra.py + |-- dijkstra_2.py + |-- dijkstra_algorithm.py + |-- dijkstra_alternate.py + |-- dijkstra_binary_grid.py + |-- dinic.py + |-- directed_and_undirected_weighted_graph.py + |-- edmonds_karp_multiple_source_and_sink.py + |-- eulerian_path_and_circuit_for_undirected_graph.py + |-- even_tree.py + |-- finding_bridges.py + |-- frequent_pattern_graph_miner.py + |-- gale_shapley_bigraph.py + |-- graphs_floyd_warshall.py + |-- graph_adjacency_list.py + |-- graph_adjacency_matrix.py + |-- graph_list.py + |-- greedy_best_first.py + |-- greedy_min_vertex_cover.py + |-- g_topological_sort.py + |-- kahns_algorithm_long.py + |-- kahns_algorithm_topo.py + |-- karger.py + |-- markov_chain.py + |-- matching_min_vertex_cover.py + |-- minimum_path_sum.py + |-- minimum_spanning_tree_boruvka.py + |-- minimum_spanning_tree_kruskal.py + |-- minimum_spanning_tree_kruskal2.py + |-- minimum_spanning_tree_prims.py + |-- minimum_spanning_tree_prims2.py + |-- multi_heuristic_astar.py + |-- page_rank.py + |-- prim.py + |-- random_graph_generator.py + |-- scc_kosaraju.py + |-- strongly_connected_components.py + |-- tarjans_scc.py + |-- tests + |-- test_min_spanning_tree_kruskal.py + |-- test_min_spanning_tree_prim.py + |-- __init__.py + |-- __init__.py +|-- greedy_methods + |-- best_time_to_buy_and_sell_stock.py + |-- fractional_cover_problem.py + |-- fractional_knapsack.py + |-- fractional_knapsack_2.py + |-- gas_station.py + |-- minimum_coin_change.py + |-- minimum_waiting_time.py + |-- optimal_merge_pattern.py + |-- smallest_range.py + |-- __init__.py +|-- hashes + |-- adler32.py + |-- chaos_machine.py + |-- djb2.py + |-- elf.py + |-- enigma_machine.py + |-- fletcher16.py + |-- hamming_code.py + |-- luhn.py + |-- md5.py + |-- README.md + |-- sdbm.py + |-- sha1.py + |-- sha256.py + |-- __init__.py +|-- knapsack + |-- greedy_knapsack.py + |-- knapsack.py + |-- README.md + |-- recursive_approach_knapsack.py + |-- tests + |-- test_greedy_knapsack.py + |-- test_knapsack.py + |-- __init__.py + |-- __init__.py +|-- LICENSE.md +|-- linear_algebra + |-- gaussian_elimination.py + |-- jacobi_iteration_method.py + |-- lu_decomposition.py + |-- README.md + |-- src + |-- conjugate_gradient.py + |-- gaussian_elimination_pivoting.py + |-- lib.py + |-- polynom_for_points.py + |-- power_iteration.py + |-- rank_of_matrix.py + |-- rayleigh_quotient.py + |-- schur_complement.py + |-- test_linear_algebra.py + |-- transformations_2d.py + |-- __init__.py + |-- __init__.py +|-- linear_programming + |-- simplex.py + |-- __init__.py +|-- machine_learning + |-- apriori_algorithm.py + |-- astar.py + |-- automatic_differentiation.py + |-- data_transformations.py + |-- decision_tree.py + |-- dimensionality_reduction.py + |-- forecasting + |-- ex_data.csv + |-- run.py + |-- __init__.py + |-- frequent_pattern_growth.py + |-- gaussian_naive_bayes.py.broken.txt + |-- gradient_boosting_classifier.py + |-- gradient_boosting_regressor.py.broken.txt + |-- gradient_descent.py + |-- k_means_clust.py + |-- k_nearest_neighbours.py + |-- linear_discriminant_analysis.py + |-- linear_regression.py + |-- local_weighted_learning + |-- local_weighted_learning.md + |-- local_weighted_learning.py + |-- __init__.py + |-- logistic_regression.py + |-- loss_functions.py + |-- lstm + |-- lstm_prediction.py + |-- sample_data.csv + |-- __init__.py + |-- mfcc.py + |-- multilayer_perceptron_classifier.py + |-- polynomial_regression.py + |-- random_forest_classifier.py.broken.txt + |-- random_forest_regressor.py.broken.txt + |-- scoring_functions.py + |-- self_organizing_map.py + |-- sequential_minimum_optimization.py + |-- similarity_search.py + |-- support_vector_machines.py + |-- word_frequency_functions.py + |-- xgboost_classifier.py + |-- xgboost_regressor.py + |-- __init__.py +|-- maths + |-- abs.py + |-- addition_without_arithmetic.py + |-- aliquot_sum.py + |-- allocation_number.py + |-- arc_length.py + |-- area.py + |-- area_under_curve.py + |-- average_absolute_deviation.py + |-- average_mean.py + |-- average_median.py + |-- average_mode.py + |-- bailey_borwein_plouffe.py + |-- base_neg2_conversion.py + |-- basic_maths.py + |-- binary_exponentiation.py + |-- binary_multiplication.py + |-- binomial_coefficient.py + |-- binomial_distribution.py + |-- ceil.py + |-- chebyshev_distance.py + |-- check_polygon.py + |-- chinese_remainder_theorem.py + |-- chudnovsky_algorithm.py + |-- collatz_sequence.py + |-- combinations.py + |-- continued_fraction.py + |-- decimal_isolate.py + |-- decimal_to_fraction.py + |-- dodecahedron.py + |-- double_factorial.py + |-- dual_number_automatic_differentiation.py + |-- entropy.py + |-- euclidean_distance.py + |-- eulers_totient.py + |-- euler_method.py + |-- euler_modified.py + |-- extended_euclidean_algorithm.py + |-- factorial.py + |-- factors.py + |-- fast_inverse_sqrt.py + |-- fermat_little_theorem.py + |-- fibonacci.py + |-- find_max.py + |-- find_min.py + |-- floor.py + |-- gamma.py + |-- gaussian.py + |-- gcd_of_n_numbers.py + |-- germain_primes.py + |-- greatest_common_divisor.py + |-- hardy_ramanujanalgo.py + |-- images + |-- gaussian.png + |-- __init__.py + |-- integer_square_root.py + |-- interquartile_range.py + |-- is_int_palindrome.py + |-- is_ip_v4_address_valid.py + |-- is_square_free.py + |-- jaccard_similarity.py + |-- joint_probability_distribution.py + |-- josephus_problem.py + |-- juggler_sequence.py + |-- karatsuba.py + |-- kth_lexicographic_permutation.py + |-- largest_of_very_large_numbers.py + |-- least_common_multiple.py + |-- line_length.py + |-- liouville_lambda.py + |-- lucas_lehmer_primality_test.py + |-- lucas_series.py + |-- maclaurin_series.py + |-- manhattan_distance.py + |-- matrix_exponentiation.py + |-- max_sum_sliding_window.py + |-- minkowski_distance.py + |-- mobius_function.py + |-- modular_division.py + |-- modular_exponential.py + |-- monte_carlo.py + |-- monte_carlo_dice.py + |-- number_of_digits.py + |-- numerical_analysis + |-- adams_bashforth.py + |-- bisection.py + |-- bisection_2.py + |-- integration_by_simpson_approx.py + |-- intersection.py + |-- nevilles_method.py + |-- newton_forward_interpolation.py + |-- newton_raphson.py + |-- numerical_integration.py + |-- proper_fractions.py + |-- runge_kutta.py + |-- runge_kutta_fehlberg_45.py + |-- runge_kutta_gills.py + |-- secant_method.py + |-- simpson_rule.py + |-- square_root.py + |-- __init__.py + |-- odd_sieve.py + |-- perfect_cube.py + |-- perfect_number.py + |-- perfect_square.py + |-- persistence.py + |-- pi_generator.py + |-- pi_monte_carlo_estimation.py + |-- points_are_collinear_3d.py + |-- pollard_rho.py + |-- polynomials + |-- single_indeterminate_operations.py + |-- __init__.py + |-- polynomial_evaluation.py + |-- power_using_recursion.py + |-- primelib.py + |-- prime_check.py + |-- prime_factors.py + |-- prime_numbers.py + |-- prime_sieve_eratosthenes.py + |-- print_multiplication_table.py + |-- pythagoras.py + |-- qr_decomposition.py + |-- quadratic_equations_complex_numbers.py + |-- radians.py + |-- radix2_fft.py + |-- remove_digit.py + |-- segmented_sieve.py + |-- series + |-- arithmetic.py + |-- geometric.py + |-- geometric_series.py + |-- harmonic.py + |-- harmonic_series.py + |-- hexagonal_numbers.py + |-- p_series.py + |-- __init__.py + |-- sieve_of_eratosthenes.py + |-- sigmoid.py + |-- signum.py + |-- simultaneous_linear_equation_solver.py + |-- sin.py + |-- sock_merchant.py + |-- softmax.py + |-- solovay_strassen_primality_test.py + |-- spearman_rank_correlation_coefficient.py + |-- special_numbers + |-- armstrong_numbers.py + |-- automorphic_number.py + |-- bell_numbers.py + |-- carmichael_number.py + |-- catalan_number.py + |-- hamming_numbers.py + |-- happy_number.py + |-- harshad_numbers.py + |-- hexagonal_number.py + |-- krishnamurthy_number.py + |-- perfect_number.py + |-- polygonal_numbers.py + |-- pronic_number.py + |-- proth_number.py + |-- triangular_numbers.py + |-- ugly_numbers.py + |-- weird_number.py + |-- __init__.py + |-- sumset.py + |-- sum_of_arithmetic_series.py + |-- sum_of_digits.py + |-- sum_of_geometric_progression.py + |-- sum_of_harmonic_series.py + |-- sylvester_sequence.py + |-- tanh.py + |-- test_prime_check.py + |-- three_sum.py + |-- trapezoidal_rule.py + |-- triplet_sum.py + |-- twin_prime.py + |-- two_pointer.py + |-- two_sum.py + |-- volume.py + |-- zellers_congruence.py + |-- __init__.py +|-- matrix + |-- binary_search_matrix.py + |-- count_islands_in_matrix.py + |-- count_negative_numbers_in_sorted_matrix.py + |-- count_paths.py + |-- cramers_rule_2x2.py + |-- inverse_of_matrix.py + |-- largest_square_area_in_matrix.py + |-- matrix_class.py + |-- matrix_equalization.py + |-- matrix_multiplication_recursion.py + |-- matrix_operation.py + |-- max_area_of_island.py + |-- median_matrix.py + |-- nth_fibonacci_using_matrix_exponentiation.py + |-- pascal_triangle.py + |-- rotate_matrix.py + |-- searching_in_sorted_matrix.py + |-- sherman_morrison.py + |-- spiral_print.py + |-- tests + |-- pytest.ini + |-- test_matrix_operation.py + |-- __init__.py + |-- validate_sudoku_board.py + |-- __init__.py +|-- networking_flow + |-- ford_fulkerson.py + |-- minimum_cut.py + |-- __init__.py +|-- neural_network + |-- activation_functions + |-- binary_step.py + |-- exponential_linear_unit.py + |-- gaussian_error_linear_unit.py + |-- leaky_rectified_linear_unit.py + |-- mish.py + |-- rectified_linear_unit.py + |-- scaled_exponential_linear_unit.py + |-- soboleva_modified_hyperbolic_tangent.py + |-- softplus.py + |-- squareplus.py + |-- swish.py + |-- __init__.py + |-- back_propagation_neural_network.py + |-- convolution_neural_network.py + |-- gan.py_tf + |-- input_data.py + |-- perceptron.py.DISABLED + |-- simple_neural_network.py + |-- two_hidden_layers_neural_network.py + |-- __init__.py +|-- other + |-- activity_selection.py + |-- alternative_list_arrange.py + |-- bankers_algorithm.py + |-- davis_putnam_logemann_loveland.py + |-- doomsday.py + |-- fischer_yates_shuffle.py + |-- gauss_easter.py + |-- graham_scan.py + |-- greedy.py + |-- guess_the_number_search.py + |-- h_index.py + |-- least_recently_used.py + |-- lfu_cache.py + |-- linear_congruential_generator.py + |-- lru_cache.py + |-- magicdiamondpattern.py + |-- majority_vote_algorithm.py + |-- maximum_subsequence.py + |-- nested_brackets.py + |-- number_container_system.py + |-- password.py + |-- quine.py + |-- scoring_algorithm.py + |-- sdes.py + |-- tower_of_hanoi.py + |-- word_search.py + |-- __init__.py +|-- physics + |-- altitude_pressure.py + |-- archimedes_principle_of_buoyant_force.py + |-- basic_orbital_capture.py + |-- casimir_effect.py + |-- center_of_mass.py + |-- centripetal_force.py + |-- coulombs_law.py + |-- doppler_frequency.py + |-- grahams_law.py + |-- horizontal_projectile_motion.py + |-- hubble_parameter.py + |-- ideal_gas_law.py + |-- image_data + |-- 2D_problems.jpg + |-- 2D_problems_1.jpg + |-- __init__.py + |-- in_static_equilibrium.py + |-- kinetic_energy.py + |-- lens_formulae.py + |-- lorentz_transformation_four_vector.py + |-- malus_law.py + |-- mass_energy_equivalence.py + |-- mirror_formulae.py + |-- newtons_law_of_gravitation.py + |-- newtons_second_law_of_motion.py + |-- n_body_simulation.py + |-- photoelectric_effect.py + |-- potential_energy.py + |-- rainfall_intensity.py + |-- reynolds_number.py + |-- rms_speed_of_molecule.py + |-- shear_stress.py + |-- speeds_of_gas_molecules.py + |-- speed_of_sound.py + |-- terminal_velocity.py + |-- __init__.py +|-- project_euler + |-- problem_001 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- sol4.py + |-- sol5.py + |-- sol6.py + |-- sol7.py + |-- __init__.py + |-- problem_002 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- sol4.py + |-- sol5.py + |-- __init__.py + |-- problem_003 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- __init__.py + |-- problem_004 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_005 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_006 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- sol4.py + |-- __init__.py + |-- problem_007 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- __init__.py + |-- problem_008 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- __init__.py + |-- problem_009 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- __init__.py + |-- problem_010 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- __init__.py + |-- problem_011 + |-- grid.txt + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_012 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_013 + |-- num.txt + |-- sol1.py + |-- __init__.py + |-- problem_014 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_015 + |-- sol1.py + |-- __init__.py + |-- problem_016 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_017 + |-- sol1.py + |-- __init__.py + |-- problem_018 + |-- solution.py + |-- triangle.txt + |-- __init__.py + |-- problem_019 + |-- sol1.py + |-- __init__.py + |-- problem_020 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- sol4.py + |-- __init__.py + |-- problem_021 + |-- sol1.py + |-- __init__.py + |-- problem_022 + |-- p022_names.txt + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_023 + |-- sol1.py + |-- __init__.py + |-- problem_024 + |-- sol1.py + |-- __init__.py + |-- problem_025 + |-- sol1.py + |-- sol2.py + |-- sol3.py + |-- __init__.py + |-- problem_026 + |-- sol1.py + |-- __init__.py + |-- problem_027 + |-- sol1.py + |-- __init__.py + |-- problem_028 + |-- sol1.py + |-- __init__.py + |-- problem_029 + |-- sol1.py + |-- __init__.py + |-- problem_030 + |-- sol1.py + |-- __init__.py + |-- problem_031 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_032 + |-- sol32.py + |-- __init__.py + |-- problem_033 + |-- sol1.py + |-- __init__.py + |-- problem_034 + |-- sol1.py + |-- __init__.py + |-- problem_035 + |-- sol1.py + |-- __init__.py + |-- problem_036 + |-- sol1.py + |-- __init__.py + |-- problem_037 + |-- sol1.py + |-- __init__.py + |-- problem_038 + |-- sol1.py + |-- __init__.py + |-- problem_039 + |-- sol1.py + |-- __init__.py + |-- problem_040 + |-- sol1.py + |-- __init__.py + |-- problem_041 + |-- sol1.py + |-- __init__.py + |-- problem_042 + |-- solution42.py + |-- words.txt + |-- __init__.py + |-- problem_043 + |-- sol1.py + |-- __init__.py + |-- problem_044 + |-- sol1.py + |-- __init__.py + |-- problem_045 + |-- sol1.py + |-- __init__.py + |-- problem_046 + |-- sol1.py + |-- __init__.py + |-- problem_047 + |-- sol1.py + |-- __init__.py + |-- problem_048 + |-- sol1.py + |-- __init__.py + |-- problem_049 + |-- sol1.py + |-- __init__.py + |-- problem_050 + |-- sol1.py + |-- __init__.py + |-- problem_051 + |-- sol1.py + |-- __init__.py + |-- problem_052 + |-- sol1.py + |-- __init__.py + |-- problem_053 + |-- sol1.py + |-- __init__.py + |-- problem_054 + |-- poker_hands.txt + |-- sol1.py + |-- test_poker_hand.py + |-- __init__.py + |-- problem_055 + |-- sol1.py + |-- __init__.py + |-- problem_056 + |-- sol1.py + |-- __init__.py + |-- problem_057 + |-- sol1.py + |-- __init__.py + |-- problem_058 + |-- sol1.py + |-- __init__.py + |-- problem_059 + |-- p059_cipher.txt + |-- sol1.py + |-- test_cipher.txt + |-- __init__.py + |-- problem_062 + |-- sol1.py + |-- __init__.py + |-- problem_063 + |-- sol1.py + |-- __init__.py + |-- problem_064 + |-- sol1.py + |-- __init__.py + |-- problem_065 + |-- sol1.py + |-- __init__.py + |-- problem_067 + |-- sol1.py + |-- sol2.py + |-- triangle.txt + |-- __init__.py + |-- problem_068 + |-- sol1.py + |-- __init__.py + |-- problem_069 + |-- sol1.py + |-- __init__.py + |-- problem_070 + |-- sol1.py + |-- __init__.py + |-- problem_071 + |-- sol1.py + |-- __init__.py + |-- problem_072 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_073 + |-- sol1.py + |-- __init__.py + |-- problem_074 + |-- sol1.py + |-- sol2.py + |-- __init__.py + |-- problem_075 + |-- sol1.py + |-- __init__.py + |-- problem_076 + |-- sol1.py + |-- __init__.py + |-- problem_077 + |-- sol1.py + |-- __init__.py + |-- problem_078 + |-- sol1.py + |-- __init__.py + |-- problem_079 + |-- keylog.txt + |-- keylog_test.txt + |-- sol1.py + |-- __init__.py + |-- problem_080 + |-- sol1.py + |-- __init__.py + |-- problem_081 + |-- matrix.txt + |-- sol1.py + |-- __init__.py + |-- problem_082 + |-- input.txt + |-- sol1.py + |-- test_matrix.txt + |-- __init__.py + |-- problem_085 + |-- sol1.py + |-- __init__.py + |-- problem_086 + |-- sol1.py + |-- __init__.py + |-- problem_087 + |-- sol1.py + |-- __init__.py + |-- problem_089 + |-- numeralcleanup_test.txt + |-- p089_roman.txt + |-- sol1.py + |-- __init__.py + |-- problem_091 + |-- sol1.py + |-- __init__.py + |-- problem_092 + |-- sol1.py + |-- __init__.py + |-- problem_094 + |-- sol1.py + |-- __init__.py + |-- problem_097 + |-- sol1.py + |-- __init__.py + |-- problem_099 + |-- base_exp.txt + |-- sol1.py + |-- __init__.py + |-- problem_100 + |-- sol1.py + |-- __init__.py + |-- problem_101 + |-- sol1.py + |-- __init__.py + |-- problem_102 + |-- p102_triangles.txt + |-- sol1.py + |-- test_triangles.txt + |-- __init__.py + |-- problem_104 + |-- sol1.py + |-- __init__.py + |-- problem_107 + |-- p107_network.txt + |-- sol1.py + |-- test_network.txt + |-- __init__.py + |-- problem_109 + |-- sol1.py + |-- __init__.py + |-- problem_112 + |-- sol1.py + |-- __init__.py + |-- problem_113 + |-- sol1.py + |-- __init__.py + |-- problem_114 + |-- sol1.py + |-- __init__.py + |-- problem_115 + |-- sol1.py + |-- __init__.py + |-- problem_116 + |-- sol1.py + |-- __init__.py + |-- problem_117 + |-- sol1.py + |-- __init__.py + |-- problem_119 + |-- sol1.py + |-- __init__.py + |-- problem_120 + |-- sol1.py + |-- __init__.py + |-- problem_121 + |-- sol1.py + |-- __init__.py + |-- problem_123 + |-- sol1.py + |-- __init__.py + |-- problem_125 + |-- sol1.py + |-- __init__.py + |-- problem_129 + |-- sol1.py + |-- __init__.py + |-- problem_131 + |-- sol1.py + |-- __init__.py + |-- problem_135 + |-- sol1.py + |-- __init__.py + |-- problem_144 + |-- sol1.py + |-- __init__.py + |-- problem_145 + |-- sol1.py + |-- __init__.py + |-- problem_173 + |-- sol1.py + |-- __init__.py + |-- problem_174 + |-- sol1.py + |-- __init__.py + |-- problem_180 + |-- sol1.py + |-- __init__.py + |-- problem_187 + |-- sol1.py + |-- __init__.py + |-- problem_188 + |-- sol1.py + |-- __init__.py + |-- problem_191 + |-- sol1.py + |-- __init__.py + |-- problem_203 + |-- sol1.py + |-- __init__.py + |-- problem_205 + |-- sol1.py + |-- __init__.py + |-- problem_206 + |-- sol1.py + |-- __init__.py + |-- problem_207 + |-- sol1.py + |-- __init__.py + |-- problem_234 + |-- sol1.py + |-- __init__.py + |-- problem_301 + |-- sol1.py + |-- __init__.py + |-- problem_493 + |-- sol1.py + |-- __init__.py + |-- problem_551 + |-- sol1.py + |-- __init__.py + |-- problem_587 + |-- sol1.py + |-- __init__.py + |-- problem_686 + |-- sol1.py + |-- __init__.py + |-- problem_800 + |-- sol1.py + |-- __init__.py + |-- README.md + |-- __init__.py +|-- pyproject.toml +|-- quantum + |-- bb84.py.DISABLED.txt + |-- deutsch_jozsa.py.DISABLED.txt + |-- half_adder.py.DISABLED.txt + |-- not_gate.py.DISABLED.txt + |-- quantum_entanglement.py.DISABLED.txt + |-- quantum_random.py.DISABLED.txt + |-- quantum_teleportation.py.DISABLED.txt + |-- q_fourier_transform.py + |-- q_full_adder.py.DISABLED.txt + |-- README.md + |-- ripple_adder_classic.py.DISABLED.txt + |-- single_qubit_measure.py.DISABLED.txt + |-- superdense_coding.py.DISABLED.txt + |-- __init__.py +|-- README.md +|-- requirements.txt +|-- scheduling + |-- first_come_first_served.py + |-- highest_response_ratio_next.py + |-- job_sequence_with_deadline.py + |-- job_sequencing_with_deadline.py + |-- multi_level_feedback_queue.py + |-- non_preemptive_shortest_job_first.py + |-- round_robin.py + |-- shortest_job_first.py + |-- __init__.py +|-- scripts + |-- build_directory_md.py + |-- close_pull_requests_with_awaiting_changes.sh + |-- close_pull_requests_with_failing_tests.sh + |-- close_pull_requests_with_require_descriptive_names.sh + |-- close_pull_requests_with_require_tests.sh + |-- close_pull_requests_with_require_type_hints.sh + |-- project_euler_answers.json + |-- validate_filenames.py + |-- validate_solutions.py + |-- __init__.py +|-- searches + |-- binary_search.py + |-- binary_tree_traversal.py + |-- double_linear_search.py + |-- double_linear_search_recursion.py + |-- exponential_search.py + |-- fibonacci_search.py + |-- hill_climbing.py + |-- interpolation_search.py + |-- jump_search.py + |-- linear_search.py + |-- median_of_medians.py + |-- quick_select.py + |-- sentinel_linear_search.py + |-- simple_binary_search.py + |-- simulated_annealing.py + |-- tabu_search.py + |-- tabu_test_data.txt + |-- ternary_search.py + |-- __init__.py +|-- sorts + |-- bead_sort.py + |-- binary_insertion_sort.py + |-- bitonic_sort.py + |-- bogo_sort.py + |-- bubble_sort.py + |-- bucket_sort.py + |-- circle_sort.py + |-- cocktail_shaker_sort.py + |-- comb_sort.py + |-- counting_sort.py + |-- cycle_sort.py + |-- double_sort.py + |-- dutch_national_flag_sort.py + |-- exchange_sort.py + |-- external_sort.py + |-- gnome_sort.py + |-- heap_sort.py + |-- insertion_sort.py + |-- intro_sort.py + |-- iterative_merge_sort.py + |-- merge_insertion_sort.py + |-- merge_sort.py + |-- msd_radix_sort.py + |-- natural_sort.py + |-- normal_distribution_quick_sort.md + |-- odd_even_sort.py + |-- odd_even_transposition_parallel.py + |-- odd_even_transposition_single_threaded.py + |-- pancake_sort.py + |-- patience_sort.py + |-- pigeonhole_sort.py + |-- pigeon_sort.py + |-- quick_sort.py + |-- quick_sort_3_partition.py + |-- radix_sort.py + |-- README.md + |-- recursive_insertion_sort.py + |-- recursive_mergesort_array.py + |-- recursive_quick_sort.py + |-- selection_sort.py + |-- shell_sort.py + |-- shrink_shell_sort.py + |-- slowsort.py + |-- stooge_sort.py + |-- strand_sort.py + |-- tim_sort.py + |-- topological_sort.py + |-- tree_sort.py + |-- unknown_sort.py + |-- wiggle_sort.py + |-- __init__.py +|-- source + |-- __init__.py +|-- strings + |-- aho_corasick.py + |-- alternative_string_arrange.py + |-- anagrams.py + |-- anagrams.txt + |-- autocomplete_using_trie.py + |-- barcode_validator.py + |-- bitap_string_match.py + |-- boyer_moore_search.py + |-- camel_case_to_snake_case.py + |-- can_string_be_rearranged_as_palindrome.py + |-- capitalize.py + |-- check_anagrams.py + |-- count_vowels.py + |-- credit_card_validator.py + |-- damerau_levenshtein_distance.py + |-- detecting_english_programmatically.py + |-- dictionary.txt + |-- dna.py + |-- edit_distance.py + |-- frequency_finder.py + |-- hamming_distance.py + |-- indian_phone_validator.py + |-- is_contains_unique_chars.py + |-- is_isogram.py + |-- is_pangram.py + |-- is_polish_national_id.py + |-- is_spain_national_id.py + |-- is_srilankan_phone_number.py + |-- is_valid_email_address.py + |-- jaro_winkler.py + |-- join.py + |-- knuth_morris_pratt.py + |-- levenshtein_distance.py + |-- lower.py + |-- manacher.py + |-- min_cost_string_conversion.py + |-- naive_string_search.py + |-- ngram.py + |-- palindrome.py + |-- pig_latin.py + |-- prefix_function.py + |-- rabin_karp.py + |-- remove_duplicate.py + |-- reverse_letters.py + |-- reverse_words.py + |-- snake_case_to_camel_pascal_case.py + |-- split.py + |-- string_switch_case.py + |-- strip.py + |-- text_justification.py + |-- title.py + |-- top_k_frequent_words.py + |-- upper.py + |-- wave.py + |-- wildcard_pattern_matching.py + |-- words.txt + |-- word_occurrence.py + |-- word_patterns.py + |-- z_function.py + |-- __init__.py +|-- web_programming + |-- co2_emission.py + |-- covid_stats_via_xpath.py + |-- crawl_google_results.py + |-- crawl_google_scholar_citation.py + |-- currency_converter.py + |-- current_stock_price.py + |-- current_weather.py + |-- daily_horoscope.py + |-- download_images_from_google_query.py + |-- emails_from_url.py + |-- fetch_anime_and_play.py + |-- fetch_bbc_news.py + |-- fetch_github_info.py + |-- fetch_jobs.py + |-- fetch_quotes.py + |-- fetch_well_rx_price.py + |-- get_amazon_product_data.py + |-- get_imdbtop.py.DISABLED + |-- get_imdb_top_250_movies_csv.py + |-- get_ip_geolocation.py + |-- get_top_billionaires.py + |-- get_top_hn_posts.py + |-- get_user_tweets.py.DISABLED + |-- giphy.py + |-- instagram_crawler.py + |-- instagram_pic.py + |-- instagram_video.py + |-- nasa_data.py + |-- open_google_results.py + |-- random_anime_character.py + |-- recaptcha_verification.py + |-- reddit.py + |-- search_books_by_isbn.py + |-- slack_message.py + |-- test_fetch_github_info.py + |-- world_covid19_stats.py + |-- __init__.py