An Overview of competitivepython: A Python Library for Implementing Algorithms and Data Structures
Introduction:
As a software developer, we often come across situations where we need to implement algorithms or data structures to solve various programming problems. Competitive programming is one such area where developers need to implement various algorithms and data structures to solve a given problem within a specified time limit. To make this process easier, many libraries are available to provide implementations of common algorithms and data structures. In this blog, we will discuss one such library, competitivepython
.
What is competitivepython?
competitivepython
is an open-source library of algorithms and data structures implemented in Python. It offers a collection of frequently used algorithms and data structures that can be directly used in any Python-based project. The library provides implementations for several common algorithms and data structures, such as searching algorithms (Binary Search, Linear Search, KMP Pattern Search), graph algorithms (BFS, DFS, Dijkstra), sorting algorithms (Bubble Sort, Insertion Sort, Shell Sort, Selection Sort, Bucket Sort, Merge Sort, Tim Sort, Quick Sort, Heap Sort, Radix Sort), and Binary Search Trees.
Features:
competitivepython
offers several useful features, including:
- Provides implementations for various commonly used algorithms and data structures.
- Codebase is easy to use, well-documented, and compatible with Python 3.
- Open source and available under the MIT license.
Implementation:
competitivepython
is very easy to install and use. To install the library, simply run the following command: pip install competitivepython
. Once installed, you can import any desired algorithm or data structure and use it as needed.
Usage:
Let’s take a look at some example use cases for competitivepython
.
I͟m͟p͟l͟e͟m͟e͟n͟t͟i͟n͟g͟ S͟e͟a͟r͟c͟h͟e͟s͟:
Below are some example use cases for implementing searches using competitivepython
.
a. Binary Search:
from competitivepython import searches
arr = [1, 2, 3, 4, 5]
target = 3
result = searches.binary_search(arr, target)
print("Binary Search:",result)
b. Linear Search:
from competitivepython import searches
arr = [5, 7, 9, 2, 4, 10]
target = 4
result = searches.linear_search(arr, target)
print("Linear Search:",result)
c. Knuth–Morris–Pratt string Search:
from competitivepython import searches
txt = "ABABDABACDABABCABAB"
pat = "ABABCABAB"
result = searches.kmp_search(pat,txt)
print("KMP Search:",result)
I͟m͟p͟l͟e͟m͟e͟n͟t͟i͟n͟g͟ S͟o͟r͟t͟i͟n͟g͟:
Below are some example use cases for implementing sorting using competitivepython
.
a. Bubble Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.bubble_sort(arr)
print('bubble sort:', result)
b. Bucket Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.bucket_sort(arr)
print('bucket sort:', result)
c. Heap Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.heap_sort(arr)
print('heap sort:', result)
d. Insertion Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.insertion_sort(arr)
print('insertion sort:', result)
e. Merge Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.merge_sort(arr)
print('merge sort:', result)
f. Quick Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.quick_sort(arr)
print('quick sort:', result)
g. Radix Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.radix_sort(arr)
print('radix sort:', result)
h. Selection Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.selection_sort(arr)
print('selection sort:', result)
i. Shell Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.shell_sort(arr)
print('shell sort:', result)
j. Tim Sort:
from competitivepython import sorting
arr = [112, 6, 7, 12, 15]
result = sorting.tim_sort(arr)
print('tim sort:', result)
I͟m͟p͟l͟e͟m͟e͟n͟t͟i͟n͟g͟ G͟r͟a͟p͟h͟s͟:
Below are some example use cases for implementing graphs using competitivepython
.
a. Breadth First Search (or Breadth First Traversal):
from competitivepython import graphs
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 5},
'C': {'A': 4, 'B': 2, 'D': 1},
'D': {'B': 5, 'C': 1},
}
start = 'A'
end = 'D'
result = graphs.breadth_first_search(graph, 'C')
print("bfs:",result)
b. Depth First Search(or Depth First Traversal):
from competitivepython import graphs
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 5},
'C': {'A': 4, 'B': 2, 'D': 1},
'D': {'B': 5, 'C': 1},
}
start = 'A'
end = 'D'
result = graphs.depth_first_search(graph, 'C')
print("dfs:",result)
c. Dijkstra’s Shortest Path:
from competitivepython import graphs
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 5},
'C': {'A': 4, 'B': 2, 'D': 1},
'D': {'B': 5, 'C': 1},
}
start = 'A'
end = 'D'
result = graphs.dijkstra(graph, start, end)
print("dijikstra:",result)
I͟m͟p͟l͟e͟m͟e͟n͟t͟i͟n͟g͟ T͟r͟e͟e͟s͟:
Below are some example use cases for implementing trees using competitivepython
.
from competitivepython import trees
# Create an instance of the BinarySearchTree
bst = trees.BinarySearchTree()
# Insert some values into the tree
bst.insert(50)
bst.insert(30)
bst.insert(20)
bst.insert(40)
bst.insert(70)
bst.insert(60)
bst.insert(80)
# Check if a value is present in the tree
print(bst.search(50)) # Output: True
print(bst.search(35)) # Output: False
# Get the values in the tree in in-order traversal order
print(bst.get_in_order_traversal())
Benefits of Using competitivepython Library
The competitivepython
library is a useful tool for anyone looking to improve their skills in competitive programming. Here are some benefits of using this library:
- Saves Time: The library provides a wide range of useful functions and algorithms that can be directly used in your code, saving you time in writing the code from scratch.
- Ease of Use: The library is designed to be easy to use, with simple and clear documentation that makes it easy to understand the functions and algorithms.
- Improved Performance: The algorithms provided in the library are optimized for performance, which means that they run faster and use less memory than less optimized algorithms.
- Reusable Code: The library provides a collection of functions that can be reused across multiple projects, saving you time and effort in writing similar functions for different projects.
- Open Source: The library is open source, which means that the code is available for anyone to use, modify, and distribute. This makes it a great resource for learning and contributing to the programming community.
Open Source and Collaboration
One of the main goals of competitivepython
is to provide the Python community with ready to use standard algorithms in their day to day task or coding contests (such as codeforces, codechef, leetcode etc.). As such, the library is hosted on GitHub, a popular platform for hosting open source projects.
You can access the Competitive Python repository at the following URL:
https://github.com/Shikha-code36/Competitive-Python
We welcome contributions from the community, whether that be bug fixes, feature requests, or other improvements. If you are interested in contributing to the project, please follow the guidelines outlined in the README file of the repository.
In addition to the repository, we have also made Competitive Python available on PyPI, the official Python Package Index. This means that you can easily install the library using pip, the Python package manager.
You can find Competitive Python on PyPI at the following URL:
https://pypi.org/project/competitivepython/
We encourage users to submit issues and feature requests through the GitHub repository, as this allows us to better track and prioritize requests. However, we also welcome feedback and questions through the PyPI page, so feel free to leave a review or comment there as well.
Thank you for your support of open source software development and collaboration within the Python community!