diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..22f2aa3 Binary files /dev/null and b/.DS_Store differ diff --git a/blogs/block_id9.md b/blogs/block_id9.md new file mode 100644 index 0000000..afc0f96 --- /dev/null +++ b/blogs/block_id9.md @@ -0,0 +1,123 @@ +--- + +# Heavy-Light Decomposition (HLD) + +### Difficulty: Very Hard +**Topic**: Advanced Tree Data Structures +**Time Complexity**: \( O(\log^2 N) \) for queries +**Space Complexity**: \( O(N) \) + +--- + + +Heavy-Light Decomposition (HLD) is an advanced technique used in trees to break down a path into "heavy" and "light" edges. This method is especially powerful in solving **range queries** (e.g., sum, min, max) and **path updates** between nodes in trees. HLD is mainly used in competitive programming and advanced data structure problems. + +--- + +### Algorithm + +1. **Tree Traversal**: Calculate the subtree size for each node in a Depth-First Search (DFS). +2. **Heavy Edge Selection**: For each node, select the child with the largest subtree size as the "heavy" child. +3. **Heavy-Light Paths**: + - Assign each node to either a heavy path or a light path based on its position relative to the "heavy" child. + - Label paths so that each node is part of a continuous segment in an array. +4. **Segment Tree**: Use a Segment Tree or Fenwick Tree to handle range queries and updates on the flattened tree array. + +--- + +### Input and Output + +- **Input**: + - A tree with nodes and edges. + - Queries involving range queries (e.g., sum, min) or point updates between nodes. +- **Output**: + - The result of each query, based on the current tree structure. + +--- + +### Example + +#### Input + +A tree structured as follows: + 1 + / \ + 2 3 + / \ \ +4 5 6 +- Queries: Find the sum between nodes 4 and 5, or update the value at node 3. + +#### Output + +Results for the specified queries, such as path sums, min, or max values. + +--- + +### Solution Outline + +Here is an outline of the solution using HLD: + +```python +class HLD: + def __init__(self, n): + self.n = n + self.tree = [[] for _ in range(n)] + self.size = [0] * n + self.parent = [-1] * n + self.depth = [0] * n + self.chain_head = [-1] * n + self.pos_in_base = [-1] * n + self.curr_pos = 0 + + def dfs_size(self, u): + """Calculate subtree sizes and parents using DFS.""" + self.size[u] = 1 + for v in self.tree[u]: + if v != self.parent[u]: + self.parent[v] = u + self.depth[v] = self.depth[u] + 1 + self.size[u] += self.dfs_size(v) + return self.size[u] + + def decompose(self, u, head): + """Decompose tree into heavy-light paths.""" + self.chain_head[u] = head + self.pos_in_base[u] = self.curr_pos + self.curr_pos += 1 + heavy_child, max_size = -1, 0 + for v in self.tree[u]: + if v != self.parent[u] and self.size[v] > max_size: + heavy_child, max_size = v, self.size[v] + if heavy_child != -1: + self.decompose(heavy_child, head) + for v in self.tree[u]: + if v != self.parent[u] and v != heavy_child: + self.decompose(v, v) +## Explanation + +- **Tree Size Calculation**: A Depth-First Search (DFS) is used to calculate subtree sizes. +- **Heavy Path Assignment**: Each node’s child with the largest subtree is designated as “heavy.” +- **Path Decomposition**: Nodes are grouped into heavy paths, minimizing the number of paths a query crosses. +- **Flattened Representation**: The tree is mapped into an array where each path segment is continuous, enabling efficient range queries with a Segment Tree. + + +## Pros and Cons + +- **Pros**: + - Efficient path-based operations in trees. + - Reduces complex tree queries to simpler range queries on an array. +- **Cons**: + - Difficult to implement and understand. + - Limited to trees and paths, less flexible for general graph types. + +## Use Cases + +- **Path Queries**: Ideal for answering range queries along paths in trees (e.g., sum, min, max). +- **Point Updates**: Useful for updating values at nodes within a tree and quickly reflecting them on paths. +- **Lowest Common Ancestor (LCA)**: Can work alongside HLD for efficient LCA computation in tree structures. + +## Additional Challenges + +1. **Dynamic Edge Updates**: Adapt HLD to work with dynamic edge weights. +2. **Path XOR Queries**: Modify the algorithm to handle XOR queries along a path. +3. **Advanced Tree Queries**: Solve complex tree-based range queries by combining HLD with other techniques. \ No newline at end of file diff --git a/blogs/blog_id_7.md b/blogs/blog_id_7.md new file mode 100644 index 0000000..4baad9f --- /dev/null +++ b/blogs/blog_id_7.md @@ -0,0 +1,39 @@ +# Understanding Binary Search in Python + +## Introduction +Binary Search is an efficient algorithm for finding an element in a sorted list. The binary search algorithm works by repeatedly dividing the search interval in half, which makes it faster than linear search, especially for large datasets. + +## How Binary Search Works +In binary search, there are two main components: +- **Search Interval**: The range within which the search is conducted. Initially, the interval covers the entire array. +- **Middle Element Comparison**: The middle element of the interval is compared with the target value. If they match, the search is successful. If the target value is smaller, the search continues in the left half; if it's larger, the search continues in the right half. + +### Key Points +- Binary search works only on sorted arrays. +- It has a time complexity of **O(log n)**, making it highly efficient. + +## Example +Here’s a simple example of a binary search function that returns the index of a target value if it exists in a sorted array, or -1 if it doesn’t: + +```python +def binary_search(arr, target): + left, right = 0, len(arr) - 1 # Set initial search bounds + + while left <= right: + mid = (left + right) // 2 # Find the middle index + + if arr[mid] == target: # Target found + return mid + elif arr[mid] < target: # Move to the right half + left = mid + 1 + else: # Move to the left half + right = mid - 1 + + return -1 # Target not found + +# Example usage +array = [1, 3, 5, 7, 9, 11] +target = 7 +result = binary_search(array, target) +print("Target found at index:", result) # Output: Target found at index: 3 +``` \ No newline at end of file diff --git a/blogs/blog_id_8.md b/blogs/blog_id_8.md new file mode 100644 index 0000000..314094b --- /dev/null +++ b/blogs/blog_id_8.md @@ -0,0 +1,120 @@ +--- + +# Heap Sort Algorithm + +### Difficulty: Medium +**Topic**: Sorting Algorithms +**Time Complexity**: O(n log n) +**Space Complexity**: O(1) + +--- + +Heap Sort is a comparison-based sorting technique that uses a binary heap data structure. It builds a max heap (or min heap) and repeatedly extracts the maximum (or minimum) element to create a sorted array. The algorithm is efficient and performs well for large datasets. + +--- + +### Algorithm + +1. **Build the Heap**: + - Create a max heap from the input data. This step ensures that the largest element is at the root of the heap. +2. **Extract Elements**: + - Swap the root of the heap (maximum element) with the last element of the heap. + - Reduce the size of the heap by one. + - Heapify the root of the heap to maintain the max heap property. +3. **Repeat**: + - Continue the process until all elements are sorted. + +--- + +### Input and Output + +- **Input**: + - An array of integers to be sorted. +- **Output**: + - A sorted array in ascending order. + +--- + +### Example + +#### Input +```python +Array: [12, 11, 13, 5, 6, 7] +``` +#### Output +```python +Sorted Array: [5, 6, 7, 11, 12, 13] +``` +--- + +## Solution + +Below is a Python solution for the Heap Sort algorithm. + +```python +def heapify(arr, n, i): + largest = i # Initialize largest as root + left = 2 * i + 1 # left = 2*i + 1 + right = 2 * i + 2 # right = 2*i + 2 + + # Check if left child exists and is greater than root + if left < n and arr[left] > arr[largest]: + largest = left + + # Check if right child exists and is greater than largest so far + if right < n and arr[right] > arr[largest]: + largest = right + + # Change root if needed + if largest != i: + arr[i], arr[largest] = arr[largest], arr[i] # Swap + + # Heapify the root + heapify(arr, n, largest) + +def heap_sort(arr): + n = len(arr) + + # Build a max heap + for i in range(n // 2 - 1, -1, -1): + heapify(arr, n, i) + + # One by one extract elements from heap + for i in range(n - 1, 0, -1): + arr[i], arr[0] = arr[0], arr[i] # Swap + heapify(arr, i, 0) + +# Example usage +arr = [12, 11, 13, 5, 6, 7] +heap_sort(arr) +print("Sorted array is", arr) +``` + +--- + +### Pros and Cons + +- **Pros**: + - Efficient for large datasets. + - Performs well in worst-case scenarios compared to other sorting algorithms. + +- **Cons**: + - More complex to implement compared to simpler algorithms like bubble sort. + - Not stable (does not preserve the relative order of equal elements). + +--- + +### Use Cases + +- Suitable for applications where performance is critical. +- Used in implementing priority queues. +- Applicable in scenarios where the data is too large to fit into memory (external sorting). + +--- + +### Additional Challenges + +1. **Implement Min Heap**: Modify the algorithm to sort in descending order by implementing a min heap. +2. **Heap Sort with Duplicates**: Extend the algorithm to handle arrays with duplicate values while maintaining stability. + +--- \ No newline at end of file diff --git a/blogsList.json b/blogsList.json index 82be3af..2f75679 100644 --- a/blogsList.json +++ b/blogsList.json @@ -40,5 +40,24 @@ "image": "https://www.trytoprogram.com/images/python-directory-management.jpg", "title": "Understanding Dictionaries in Python", "description": "Key-value pairs for data storage in Python." + }, + { + "id": "blog_id_7", + "image": "data:image/png;base64,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", + "title": "Understanding Binary search Algorithm in Python", + "description": "Efficiently locate an element in a sorted list by repeatedly halving the search interval." + }, + { + + "id": "blog_id_8", + "image": "data:image/png;base64,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", + "title": "Understanding Heap Sort Algorithm in Python", + "description": "comparison-based sorting algorithm that utilizes a binary heap data structure to repeatedly extract the maximum (or minimum) element, resulting in a sorted array with a time complexity of O(n log n)." + }, + { + "id": "blog_id9", + "image": "data:image/png;base64,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", + "title": "Understanding Heavy-Light Decomposition in Python", + "description": "Heavy-Light Decomposition in Python." } ] diff --git a/css/index-style.css b/css/index-style.css index 2a1f0c6..5b066e2 100644 --- a/css/index-style.css +++ b/css/index-style.css @@ -3,116 +3,131 @@ margin: 0; } */ body { - background-color: whitesmoke; - font-family: outfit, rubik; + background: linear-gradient(135deg, #ece9e6, #ffffff); + font-family: 'Outfit', 'Rubik', sans-serif; + color: #333; } + .container { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); min-height: 80vh; + gap: 1rem; + padding: 2rem; } + .container-item { - background-color: white; - border-radius: 5px; - margin: 1rem; - padding: 1rem; - height: min-content; + background: white; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + transition: transform 0.3s ease, box-shadow 0.3s ease; } + +.container-item:hover { + transform: scale(1.05); + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); +} + .container-item > .img-wrapper { display: flex; align-items: center; justify-content: center; width: 100%; - height: 13rem; + height: 14rem; + overflow: hidden; + transition: all 0.3s ease; } + .container-item > .img-wrapper > img { - object-fit: contain; + object-fit: cover; width: 100%; - border-radius: 5px; + height: 100%; + transition: transform 0.4s ease; + border-radius: 10px 10px 0 0; } -.container-item > .img-wrapper > img:hover { + +.container-item > .img-wrapper:hover > img { + transform: scale(1.1); cursor: pointer; } -.container-item > .img-wrapper:hover + h3 { - text-decoration: underline; -} + .container-item > h3 { - transition: all; - transition-duration: 200ms; - cursor: pointer; - margin: 0rem; - margin-top: 0.5rem; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; + margin: 0.75rem 0; + font-size: 1.2rem; + color: #333; + transition: color 0.3s ease; + white-space: nowrap; overflow: hidden; - - /* text-decoration: solid; */ + text-overflow: ellipsis; } + .container-item > h3:hover { + color: #3498db; text-decoration: underline; } + .container-item > p { - font-size: 10px; - color: gray; - line-clamp: 2; + font-size: 0.9rem; + color: #777; + margin-bottom: 1rem; + line-height: 1.5; display: -webkit-box; - -webkit-box-orient: vertical; -webkit-line-clamp: 2; + -webkit-box-orient: vertical; overflow: hidden; - padding: 0; -} -.container-item > div > button > h3 { - margin: 0; - padding: 0; - font-family: rubik; - font-weight: 100; } + .container-item > div > button { - border: 1px solid gainsboro; - border-radius: 3px; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-top: 0.9rem; - background: none; + border: 1px solid #3498db; + border-radius: 5px; + padding: 0.6rem 1rem; + margin-top: 0.5rem; + background: transparent; + color: #3498db; + font-size: 0.9rem; cursor: pointer; display: flex; align-items: center; gap: 0.5rem; - font-size: 10px; - transition: all; - transition-duration: 300ms; - background: transparent; + transition: all 0.3s ease; } + .container-item > div > button:hover { - border: 1px solid rgb(187, 187, 187); - background: rgba(0, 0, 0, 0.01); + background-color: #3498db; + color: #fff; + box-shadow: 0 4px 10px rgba(52, 152, 219, 0.3); } -@media only screen and (max-width: 600px) { +.container-item > div > button > h3 { + margin: 0; + padding: 0; + font-family: 'Rubik', sans-serif; + font-weight: 500; +} + +@media only screen and (max-width: 900px) { .container { - display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 1.5rem; } - .container-item > h3 { - font-size: 13px; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - } - .container-item { - background-color: white; - border-radius: 5px; - margin: 0.3rem; - padding: 0.8rem; +} + +@media only screen and (max-width: 600px) { + .container { + grid-template-columns: repeat(1, minmax(0, 1fr)); + padding: 1rem; } + .container-item > .img-wrapper { - display: flex; - align-items: center; - justify-content: center; - width: 100%; - height: 8rem; + height: 10rem; } -} + + .container-item > h3 { + font-size: 1rem; + } + + .container-item > p { + font-size: 0.8rem; + } +} \ No newline at end of file diff --git a/index.html b/index.html index 420386f..e71f008 100644 --- a/index.html +++ b/index.html @@ -83,4 +83,4 @@

Read more

- + \ No newline at end of file