mirror of
https://github.com/lavafroth/lavafroth.github.io.git
synced 2026-05-28 09:31:17 -03:00
deploy: 1b6e5605b2
This commit is contained in:
102
index.xml
102
index.xml
@@ -10,49 +10,73 @@ enums.</p>
|
||||
<blockquote>
|
||||
<p>I highly encourage you to try out the code snippets and follow along with this article.
|
||||
Use the collapse explanation button to copy multiple code blocks in one go.</p></description></item><item><title>note skta4v7n8h8</title><link>https://lavafroth.is-a.dev/skta4v7n8h8/</link><pubDate>Fri, 31 Oct 2025 20:24:35 +0530</pubDate><guid>https://lavafroth.is-a.dev/skta4v7n8h8/</guid><description><h1 id="grpa-1">GrPA 1</h1>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">swap</span>(arr, i, j):
|
||||
</span></span><span style="display:flex;"><span> arr[i], arr[j] <span style="color:#f92672">=</span> arr[j], arr[i]
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> typing <span style="color:#f92672">import</span> List
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">constructWord</span>(s: str, chunks: List[str]) <span style="color:#f92672">-&gt;</span> List[List[str]]:
|
||||
</span></span><span style="display:flex;"><span> memo <span style="color:#f92672">=</span> {}
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">max_heapify</span>(arr, end, current):
|
||||
</span></span><span style="display:flex;"><span> left <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">*</span> current <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>
|
||||
</span></span><span style="display:flex;"><span> right <span style="color:#f92672">=</span> left <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>
|
||||
</span></span><span style="display:flex;"><span> largest <span style="color:#f92672">=</span> current
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> left <span style="color:#f92672">&lt;</span> end <span style="color:#f92672">and</span> arr[left] <span style="color:#f92672">&gt;</span> arr[largest]:
|
||||
</span></span><span style="display:flex;"><span> largest <span style="color:#f92672">=</span> left
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> right <span style="color:#f92672">&lt;</span> end <span style="color:#f92672">and</span> arr[right] <span style="color:#f92672">&gt;</span> arr[largest]:
|
||||
</span></span><span style="display:flex;"><span> largest <span style="color:#f92672">=</span> right
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> largest <span style="color:#f92672">!=</span> current:
|
||||
</span></span><span style="display:flex;"><span> swap(arr, current, largest)
|
||||
</span></span><span style="display:flex;"><span> max_heapify(arr, end, largest)
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">mergeKLists</span>(arr):
|
||||
</span></span><span style="display:flex;"><span> arr <span style="color:#f92672">=</span> [value <span style="color:#66d9ef">for</span> subarray <span style="color:#f92672">in</span> arr <span style="color:#66d9ef">for</span> value <span style="color:#f92672">in</span> subarray]
|
||||
</span></span><span style="display:flex;"><span> n <span style="color:#f92672">=</span> len(arr)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> reversed(range(n <span style="color:#f92672">//</span> <span style="color:#ae81ff">2</span>)):
|
||||
</span></span><span style="display:flex;"><span> max_heapify(arr, n, i)
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(n<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>,<span style="color:#ae81ff">0</span>,<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>):
|
||||
</span></span><span style="display:flex;"><span> swap(arr, <span style="color:#ae81ff">0</span>, i)
|
||||
</span></span><span style="display:flex;"><span> max_heapify(arr, i, <span style="color:#ae81ff">0</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> arr
|
||||
</span></span></code></pre></div><h1 id="grpa-2">GrPA 2</h1>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">maxLessThan</span>(root, x):
|
||||
</span></span><span style="display:flex;"><span> floor <span style="color:#f92672">=</span> <span style="color:#66d9ef">None</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> <span style="color:#f92672">not</span> root<span style="color:#f92672">.</span>isempty():
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> root<span style="color:#f92672">.</span>value <span style="color:#f92672">&gt;</span> x:
|
||||
</span></span><span style="display:flex;"><span> root <span style="color:#f92672">=</span> root<span style="color:#f92672">.</span>left
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">solve</span>(remaining_suffix: str) <span style="color:#f92672">-&gt;</span> List[List[str]]:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">not</span> remaining_suffix:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> [[]]
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> root<span style="color:#f92672">.</span>value <span style="color:#f92672">&lt;=</span> x:
|
||||
</span></span><span style="display:flex;"><span> floor <span style="color:#f92672">=</span> root<span style="color:#f92672">.</span>value
|
||||
</span></span><span style="display:flex;"><span> root <span style="color:#f92672">=</span> root<span style="color:#f92672">.</span>right
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> floor
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> remaining_suffix <span style="color:#f92672">in</span> memo:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> memo[remaining_suffix]
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> possible_combos <span style="color:#f92672">=</span> []
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> chunk <span style="color:#f92672">in</span> chunks:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">not</span> remaining_suffix<span style="color:#f92672">.</span>startswith(chunk):
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> leftover_results <span style="color:#f92672">=</span> solve(remaining_suffix[len(chunk):])
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">not</span> leftover_results:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> rest <span style="color:#f92672">in</span> leftover_results:
|
||||
</span></span><span style="display:flex;"><span> possible_combos<span style="color:#f92672">.</span>append([chunk] <span style="color:#f92672">+</span> rest)
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> memo[remaining_suffix] <span style="color:#f92672">=</span> possible_combos
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> possible_combos
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> solve(s)
|
||||
</span></span></code></pre></div><h1 id="grpa-2">GrPA 2</h1>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> numpy <span style="color:#66d9ef">as</span> np
|
||||
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">MaxCoinPath</span>(M, x1, y1, x2, y2):
|
||||
</span></span><span style="display:flex;"><span> M <span style="color:#f92672">=</span> np<span style="color:#f92672">.</span>array(M, dtype<span style="color:#f92672">=</span>int)[x1:x2<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>, y1:y2<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>]
|
||||
</span></span><span style="display:flex;"><span> cost <span style="color:#f92672">=</span> np<span style="color:#f92672">.</span>zeros((M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>, M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">1</span>]<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>), dtype<span style="color:#f92672">=</span>int)
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>):
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> range(M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">1</span>]<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>):
|
||||
</span></span><span style="display:flex;"><span> cost[i, j] <span style="color:#f92672">=</span> max(M[i, j] <span style="color:#f92672">+</span> cost[i<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>, j], M[i, j] <span style="color:#f92672">+</span> cost[i, j<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>])
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> cost[<span style="color:#ae81ff">0</span>,<span style="color:#ae81ff">0</span>]
|
||||
</span></span></code></pre></div><h1 id="grpa-3">GrPA 3</h1>
|
||||
<p>Note that this <code>max_heapify</code> is a workhorse function which you should learn well
|
||||
because you&rsquo;re gonna use it very frequently to implement a priority queue.</p></description></item><item><title>secret note jfgp3d7rrx0</title><link>https://lavafroth.is-a.dev/jfgp3d7rrx0/</link><pubDate>Tue, 28 Oct 2025 16:09:00 +0530</pubDate><guid>https://lavafroth.is-a.dev/jfgp3d7rrx0/</guid><description><p>There will be an explanation for non-trivial questions.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">LDS</span>(arr):
|
||||
</span></span><span style="display:flex;"><span> n <span style="color:#f92672">=</span> len(arr)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> n <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> []
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> memo <span style="color:#f92672">=</span> [<span style="color:#ae81ff">1</span>] <span style="color:#f92672">*</span> n
|
||||
</span></span><span style="display:flex;"><span> parent <span style="color:#f92672">=</span> [<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>] <span style="color:#f92672">*</span> n
|
||||
</span></span><span style="display:flex;"><span> max_len <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
|
||||
</span></span><span style="display:flex;"><span> end_index <span style="color:#f92672">=</span> <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(n):
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> range(i):
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> arr[i] <span style="color:#f92672">&lt;</span> arr[j] <span style="color:#f92672">and</span> memo[i] <span style="color:#f92672">&lt;</span> memo[j] <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>:
|
||||
</span></span><span style="display:flex;"><span> memo[i] <span style="color:#f92672">=</span> memo[j] <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>
|
||||
</span></span><span style="display:flex;"><span> parent[i] <span style="color:#f92672">=</span> j
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> memo[i] <span style="color:#f92672">&gt;</span> max_len:
|
||||
</span></span><span style="display:flex;"><span> max_len <span style="color:#f92672">=</span> memo[i]
|
||||
</span></span><span style="display:flex;"><span> end_index <span style="color:#f92672">=</span> i
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> subsequence <span style="color:#f92672">=</span> []
|
||||
</span></span><span style="display:flex;"><span> current_index <span style="color:#f92672">=</span> end_index
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> current_index <span style="color:#f92672">!=</span> <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>:
|
||||
</span></span><span style="display:flex;"><span> subsequence<span style="color:#f92672">.</span>append(arr[current_index])
|
||||
</span></span><span style="display:flex;"><span> current_index <span style="color:#f92672">=</span> parent[current_index]
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> subsequence[::<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>]
|
||||
</span></span></code></pre></div></description></item><item><title>secret note jfgp3d7rrx0</title><link>https://lavafroth.is-a.dev/jfgp3d7rrx0/</link><pubDate>Tue, 28 Oct 2025 16:09:00 +0530</pubDate><guid>https://lavafroth.is-a.dev/jfgp3d7rrx0/</guid><description><p>There will be an explanation for non-trivial questions.</p>
|
||||
<h1 id="activity-1">Activity 1</h1>
|
||||
<h2 id="1">1</h2>
|
||||
<p>Dijkstra&rsquo;s algorithm guarantees finding the shortest path from a single source to all other vertices under which of the following conditions?</p>
|
||||
|
||||
BIN
pagefind/fragment/en-us_12bc273.pf_fragment
Normal file
BIN
pagefind/fragment/en-us_12bc273.pf_fragment
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
pagefind/index/en-us_6392f92.pf_index
Normal file
BIN
pagefind/index/en-us_6392f92.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en-us_6f8076f.pf_index
Normal file
BIN
pagefind/index/en-us_6f8076f.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en-us_88d7325.pf_index
Normal file
BIN
pagefind/index/en-us_88d7325.pf_index
Normal file
Binary file not shown.
Binary file not shown.
BIN
pagefind/index/en-us_90de30f.pf_index
Normal file
BIN
pagefind/index/en-us_90de30f.pf_index
Normal file
Binary file not shown.
Binary file not shown.
BIN
pagefind/index/en-us_b321010.pf_index
Normal file
BIN
pagefind/index/en-us_b321010.pf_index
Normal file
Binary file not shown.
Binary file not shown.
BIN
pagefind/index/en-us_d3cfd06.pf_index
Normal file
BIN
pagefind/index/en-us_d3cfd06.pf_index
Normal file
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_6f20d1343543d","wasm":"en-us","page_count":59}}}
|
||||
{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_2a7de922a61d5","wasm":"en-us","page_count":59}}}
|
||||
BIN
pagefind/pagefind.en-us_2a7de922a61d5.pf_meta
Normal file
BIN
pagefind/pagefind.en-us_2a7de922a61d5.pf_meta
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,102 +1,132 @@
|
||||
<!doctype html><html lang=en-us><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><title>note skta4v7n8h8 - lavafroth</title><meta name=description content='GrPA 1
|
||||
def swap(arr, i, j):
|
||||
arr[i], arr[j] = arr[j], arr[i]
|
||||
from typing import List
|
||||
|
||||
def constructWord(s: str, chunks: List[str]) -> List[List[str]]:
|
||||
memo = {}
|
||||
|
||||
def max_heapify(arr, end, current):
|
||||
left = 2 * current + 1
|
||||
right = left + 1
|
||||
largest = current
|
||||
def solve(remaining_suffix: str) -> List[List[str]]:
|
||||
if not remaining_suffix:
|
||||
return [[]]
|
||||
|
||||
if remaining_suffix in memo:
|
||||
return memo[remaining_suffix]
|
||||
|
||||
if left < end and arr[left] > arr[largest]:
|
||||
largest = left
|
||||
if right < end and arr[right] > arr[largest]:
|
||||
largest = right
|
||||
possible_combos = []
|
||||
|
||||
if largest != current:
|
||||
swap(arr, current, largest)
|
||||
max_heapify(arr, end, largest)
|
||||
for chunk in chunks:
|
||||
if not remaining_suffix.startswith(chunk):
|
||||
continue
|
||||
|
||||
leftover_results = solve(remaining_suffix[len(chunk):])
|
||||
if not leftover_results:
|
||||
continue
|
||||
|
||||
def mergeKLists(arr):
|
||||
arr = [value for subarray in arr for value in subarray]
|
||||
n = len(arr)
|
||||
for i in reversed(range(n // 2)):
|
||||
max_heapify(arr, n, i)
|
||||
for rest in leftover_results:
|
||||
possible_combos.append([chunk] + rest)
|
||||
|
||||
for i in range(n-1,0,-1):
|
||||
swap(arr, 0, i)
|
||||
max_heapify(arr, i, 0)
|
||||
return arr
|
||||
memo[remaining_suffix] = possible_combos
|
||||
return possible_combos
|
||||
|
||||
return solve(s)
|
||||
GrPA 2
|
||||
def maxLessThan(root, x):
|
||||
floor = None
|
||||
while not root.isempty():
|
||||
if root.value > x:
|
||||
root = root.left
|
||||
import numpy as np
|
||||
def MaxCoinPath(M, x1, y1, x2, y2):
|
||||
M = np.array(M, dtype=int)[x1:x2+1, y1:y2+1]
|
||||
cost = np.zeros((M.shape[0]+1, M.shape[1]+1), dtype=int)
|
||||
|
||||
elif root.value <= x:
|
||||
floor = root.value
|
||||
root = root.right
|
||||
return floor
|
||||
for i in range(M.shape[0]-1, -1, -1):
|
||||
for j in range(M.shape[1]-1, -1, -1):
|
||||
cost[i, j] = max(M[i, j] + cost[i+1, j], M[i, j] + cost[i, j+1])
|
||||
return cost[0,0]
|
||||
GrPA 3
|
||||
Note that this max_heapify is a workhorse function which you should learn well
|
||||
because you’re gonna use it very frequently to implement a priority queue.'><meta name=author content><link rel="preload stylesheet" as=style href=https://lavafroth.is-a.dev/app.min.css><link rel=preload as=image href=../header.svg><link as=font href=https://lavafroth.is-a.dev/latinmodern-math.otf><link rel=preload as=image href=https://lavafroth.is-a.dev/github.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/about.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/art.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/rss.svg><link rel=icon href=https://lavafroth.is-a.dev/favicon.png><link rel=blog-icon href=https://lavafroth.is-a.dev/icon.png></head><body><header><a class=site-name href=https://lavafroth.is-a.dev/><svg viewBox="0 0 8790 2080"><path d="M80 1935V465h216v1270h286v2e2zm853 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm1025 528L2014 465h210l108 868 8 142h12l8-142 108-868h210l-224 1470zm813 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm851 528V465h514v222h-298v386h2e2v222h-2e2v640zm910 0V465h216q194 0 286 108 92 107 92 316 0 124-43 215-44 90-106 132l147 699h-216l-122-620h-38v620zm216-820q60 0 95-26 35-27 50-76t15-116q0-105-34-161-35-57-126-57zm1084 836q-90 0-154-42-65-42-99-114-35-72-35-162V767q0-91 35-162 34-72 99-114 64-42 154-42t155 42q64 42 99 114 34 72 34 162v866q0 90-34 162-35 72-99 114-65 42-155 42zm0-210q40 0 56-33 16-34 16-75V767q0-41-17-74-17-34-55-34-37 0-54 34-18 33-18 74v866q0 41 17 75 17 33 55 33zm890 194V687h-204V465h624v222h-204v1248zm828 0V465h216v608h168V465h216v1470h-216v-640h-168v640z"/></svg></a><nav><a style=--url:url(./github.svg) href=https://github.com/lavafroth aria-label=github target=_blank></a><a href=../about/ aria-label=about style=--url:url(./about.svg)></a><a href=../art/ aria-label=art style=--url:url(./art.svg)></a><a href=../index.xml aria-label=rss style=--url:url(./rss.svg)></a><nav></header><main><hgroup data-pagefind-body><p data-pagefind-ignore><time>Oct 31, 2025 | 2 minutes read</time></p><h1 data-pagefind-meta=title>note skta4v7n8h8</h1></hgroup><section class=post-content data-pagefind-body><h1 id=grpa-1>GrPA 1</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>swap</span>(arr, i, j):
|
||||
</span></span><span style=display:flex><span> arr[i], arr[j] <span style=color:#f92672>=</span> arr[j], arr[i]
|
||||
def LDS(arr):
|
||||
n = len(arr)
|
||||
if n == 0:
|
||||
return []
|
||||
|
||||
memo = [1] * n
|
||||
parent = [-1] * n
|
||||
max_len = 0
|
||||
end_index = -1
|
||||
|
||||
for i in range(n):
|
||||
for j in range(i):
|
||||
if arr[i] < arr[j] and memo[i] < memo[j] + 1:
|
||||
memo[i] = memo[j] + 1
|
||||
parent[i] = j
|
||||
|
||||
if memo[i] > max_len:
|
||||
max_len = memo[i]
|
||||
end_index = i
|
||||
|
||||
subsequence = []
|
||||
current_index = end_index
|
||||
while current_index != -1:
|
||||
subsequence.append(arr[current_index])
|
||||
current_index = parent[current_index]
|
||||
return subsequence[::-1]
|
||||
'><meta name=author content><link rel="preload stylesheet" as=style href=https://lavafroth.is-a.dev/app.min.css><link rel=preload as=image href=../header.svg><link as=font href=https://lavafroth.is-a.dev/latinmodern-math.otf><link rel=preload as=image href=https://lavafroth.is-a.dev/github.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/about.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/art.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/rss.svg><link rel=icon href=https://lavafroth.is-a.dev/favicon.png><link rel=blog-icon href=https://lavafroth.is-a.dev/icon.png></head><body><header><a class=site-name href=https://lavafroth.is-a.dev/><svg viewBox="0 0 8790 2080"><path d="M80 1935V465h216v1270h286v2e2zm853 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm1025 528L2014 465h210l108 868 8 142h12l8-142 108-868h210l-224 1470zm813 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm851 528V465h514v222h-298v386h2e2v222h-2e2v640zm910 0V465h216q194 0 286 108 92 107 92 316 0 124-43 215-44 90-106 132l147 699h-216l-122-620h-38v620zm216-820q60 0 95-26 35-27 50-76t15-116q0-105-34-161-35-57-126-57zm1084 836q-90 0-154-42-65-42-99-114-35-72-35-162V767q0-91 35-162 34-72 99-114 64-42 154-42t155 42q64 42 99 114 34 72 34 162v866q0 90-34 162-35 72-99 114-65 42-155 42zm0-210q40 0 56-33 16-34 16-75V767q0-41-17-74-17-34-55-34-37 0-54 34-18 33-18 74v866q0 41 17 75 17 33 55 33zm890 194V687h-204V465h624v222h-204v1248zm828 0V465h216v608h168V465h216v1470h-216v-640h-168v640z"/></svg></a><nav><a style=--url:url(./github.svg) href=https://github.com/lavafroth aria-label=github target=_blank></a><a href=../about/ aria-label=about style=--url:url(./about.svg)></a><a href=../art/ aria-label=art style=--url:url(./art.svg)></a><a href=../index.xml aria-label=rss style=--url:url(./rss.svg)></a><nav></header><main><hgroup data-pagefind-body><p data-pagefind-ignore><time>Oct 31, 2025 | 1 minute read</time></p><h1 data-pagefind-meta=title>note skta4v7n8h8</h1></hgroup><section class=post-content data-pagefind-body><h1 id=grpa-1>GrPA 1</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#f92672>from</span> typing <span style=color:#f92672>import</span> List
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>constructWord</span>(s: str, chunks: List[str]) <span style=color:#f92672>-></span> List[List[str]]:
|
||||
</span></span><span style=display:flex><span> memo <span style=color:#f92672>=</span> {}
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>max_heapify</span>(arr, end, current):
|
||||
</span></span><span style=display:flex><span> left <span style=color:#f92672>=</span> <span style=color:#ae81ff>2</span> <span style=color:#f92672>*</span> current <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
|
||||
</span></span><span style=display:flex><span> right <span style=color:#f92672>=</span> left <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
|
||||
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> current
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>def</span> <span style=color:#a6e22e>solve</span>(remaining_suffix: str) <span style=color:#f92672>-></span> List[List[str]]:
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> <span style=color:#f92672>not</span> remaining_suffix:
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> [[]]
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> remaining_suffix <span style=color:#f92672>in</span> memo:
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> memo[remaining_suffix]
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> left <span style=color:#f92672><</span> end <span style=color:#f92672>and</span> arr[left] <span style=color:#f92672>></span> arr[largest]:
|
||||
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> left
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> right <span style=color:#f92672><</span> end <span style=color:#f92672>and</span> arr[right] <span style=color:#f92672>></span> arr[largest]:
|
||||
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> right
|
||||
</span></span><span style=display:flex><span> possible_combos <span style=color:#f92672>=</span> []
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> largest <span style=color:#f92672>!=</span> current:
|
||||
</span></span><span style=display:flex><span> swap(arr, current, largest)
|
||||
</span></span><span style=display:flex><span> max_heapify(arr, end, largest)
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> chunk <span style=color:#f92672>in</span> chunks:
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> <span style=color:#f92672>not</span> remaining_suffix<span style=color:#f92672>.</span>startswith(chunk):
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>continue</span>
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> leftover_results <span style=color:#f92672>=</span> solve(remaining_suffix[len(chunk):])
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> <span style=color:#f92672>not</span> leftover_results:
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>continue</span>
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>mergeKLists</span>(arr):
|
||||
</span></span><span style=display:flex><span> arr <span style=color:#f92672>=</span> [value <span style=color:#66d9ef>for</span> subarray <span style=color:#f92672>in</span> arr <span style=color:#66d9ef>for</span> value <span style=color:#f92672>in</span> subarray]
|
||||
</span></span><span style=display:flex><span> n <span style=color:#f92672>=</span> len(arr)
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> reversed(range(n <span style=color:#f92672>//</span> <span style=color:#ae81ff>2</span>)):
|
||||
</span></span><span style=display:flex><span> max_heapify(arr, n, i)
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> rest <span style=color:#f92672>in</span> leftover_results:
|
||||
</span></span><span style=display:flex><span> possible_combos<span style=color:#f92672>.</span>append([chunk] <span style=color:#f92672>+</span> rest)
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(n<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>,<span style=color:#ae81ff>0</span>,<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>):
|
||||
</span></span><span style=display:flex><span> swap(arr, <span style=color:#ae81ff>0</span>, i)
|
||||
</span></span><span style=display:flex><span> max_heapify(arr, i, <span style=color:#ae81ff>0</span>)
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> arr
|
||||
</span></span></code></pre></div><h1 id=grpa-2>GrPA 2</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>maxLessThan</span>(root, x):
|
||||
</span></span><span style=display:flex><span> floor <span style=color:#f92672>=</span> <span style=color:#66d9ef>None</span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>while</span> <span style=color:#f92672>not</span> root<span style=color:#f92672>.</span>isempty():
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> root<span style=color:#f92672>.</span>value <span style=color:#f92672>></span> x:
|
||||
</span></span><span style=display:flex><span> root <span style=color:#f92672>=</span> root<span style=color:#f92672>.</span>left
|
||||
</span></span><span style=display:flex><span> memo[remaining_suffix] <span style=color:#f92672>=</span> possible_combos
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> possible_combos
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> solve(s)
|
||||
</span></span></code></pre></div><h1 id=grpa-2>GrPA 2</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#f92672>import</span> numpy <span style=color:#66d9ef>as</span> np
|
||||
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>MaxCoinPath</span>(M, x1, y1, x2, y2):
|
||||
</span></span><span style=display:flex><span> M <span style=color:#f92672>=</span> np<span style=color:#f92672>.</span>array(M, dtype<span style=color:#f92672>=</span>int)[x1:x2<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>, y1:y2<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>]
|
||||
</span></span><span style=display:flex><span> cost <span style=color:#f92672>=</span> np<span style=color:#f92672>.</span>zeros((M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>0</span>]<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>, M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>1</span>]<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>), dtype<span style=color:#f92672>=</span>int)
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>elif</span> root<span style=color:#f92672>.</span>value <span style=color:#f92672><=</span> x:
|
||||
</span></span><span style=display:flex><span> floor <span style=color:#f92672>=</span> root<span style=color:#f92672>.</span>value
|
||||
</span></span><span style=display:flex><span> root <span style=color:#f92672>=</span> root<span style=color:#f92672>.</span>right
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> floor
|
||||
</span></span></code></pre></div><h1 id=grpa-3>GrPA 3</h1><p>Note that this <code>max_heapify</code> is a workhorse function which you should learn well
|
||||
because you’re gonna use it very frequently to implement a priority queue.</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>max_heapify</span>(arr, end, current):
|
||||
</span></span><span style=display:flex><span> left <span style=color:#f92672>=</span> <span style=color:#ae81ff>2</span> <span style=color:#f92672>*</span> current <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
|
||||
</span></span><span style=display:flex><span> right <span style=color:#f92672>=</span> left <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
|
||||
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> current
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> left <span style=color:#f92672><</span> end <span style=color:#f92672>and</span> arr[left] <span style=color:#f92672>></span> arr[largest]:
|
||||
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> left
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> right <span style=color:#f92672><</span> end <span style=color:#f92672>and</span> arr[right] <span style=color:#f92672>></span> arr[largest]:
|
||||
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> right
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> largest <span style=color:#f92672>!=</span> current:
|
||||
</span></span><span style=display:flex><span> swap(arr, current, largest)
|
||||
</span></span><span style=display:flex><span> max_heapify(arr, end, largest)
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>min_max</span>(arr):
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>0</span>]<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>):
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> j <span style=color:#f92672>in</span> range(M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>1</span>]<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>):
|
||||
</span></span><span style=display:flex><span> cost[i, j] <span style=color:#f92672>=</span> max(M[i, j] <span style=color:#f92672>+</span> cost[i<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>, j], M[i, j] <span style=color:#f92672>+</span> cost[i, j<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>])
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> cost[<span style=color:#ae81ff>0</span>,<span style=color:#ae81ff>0</span>]
|
||||
</span></span></code></pre></div><h1 id=grpa-3>GrPA 3</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>LDS</span>(arr):
|
||||
</span></span><span style=display:flex><span> n <span style=color:#f92672>=</span> len(arr)
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> reversed(range(n <span style=color:#f92672>//</span> <span style=color:#ae81ff>2</span>)):
|
||||
</span></span><span style=display:flex><span> max_heapify(arr, n, i)
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> n <span style=color:#f92672>==</span> <span style=color:#ae81ff>0</span>:
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> []
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> memo <span style=color:#f92672>=</span> [<span style=color:#ae81ff>1</span>] <span style=color:#f92672>*</span> n
|
||||
</span></span><span style=display:flex><span> parent <span style=color:#f92672>=</span> [<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>] <span style=color:#f92672>*</span> n
|
||||
</span></span><span style=display:flex><span> max_len <span style=color:#f92672>=</span> <span style=color:#ae81ff>0</span>
|
||||
</span></span><span style=display:flex><span> end_index <span style=color:#f92672>=</span> <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(n):
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> j <span style=color:#f92672>in</span> range(i):
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> arr[i] <span style=color:#f92672><</span> arr[j] <span style=color:#f92672>and</span> memo[i] <span style=color:#f92672><</span> memo[j] <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>:
|
||||
</span></span><span style=display:flex><span> memo[i] <span style=color:#f92672>=</span> memo[j] <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
|
||||
</span></span><span style=display:flex><span> parent[i] <span style=color:#f92672>=</span> j
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> memo[i] <span style=color:#f92672>></span> max_len:
|
||||
</span></span><span style=display:flex><span> max_len <span style=color:#f92672>=</span> memo[i]
|
||||
</span></span><span style=display:flex><span> end_index <span style=color:#f92672>=</span> i
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span> subsequence <span style=color:#f92672>=</span> []
|
||||
</span></span><span style=display:flex><span> current_index <span style=color:#f92672>=</span> end_index
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>while</span> current_index <span style=color:#f92672>!=</span> <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>:
|
||||
</span></span><span style=display:flex><span> subsequence<span style=color:#f92672>.</span>append(arr[current_index])
|
||||
</span></span><span style=display:flex><span> current_index <span style=color:#f92672>=</span> parent[current_index]
|
||||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> subsequence[::<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>]
|
||||
</span></span></code></pre></div></section><footer class=post-tags data-pagefind-meta=tags></footer></main><footer class=footer><p>© 2025 <a href=https://lavafroth.is-a.dev/>lavafroth</a></p><p><a href=https://github.com/lavafroth/lavafroth.github.io/issues/new/choose>Report an issue</a></p><p><a href=https://github.com/lavafroth/lavafroth.github.io/discussions/>Discuss</a></p><p><a href=https://lavafroth.is-a.dev/privacy>Privacy</a></p><p><a href=https://creativecommons.org/licenses/by-sa/4.0/legalcode>License</a></p></footer></body></html>
|
||||
Reference in New Issue
Block a user