595 lines
24 KiB
HTML
Executable File
595 lines
24 KiB
HTML
Executable File
<?xml version="1.0" encoding="utf-8"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||
<head>
|
||
<!-- 2025-12-28 Sun 20:37 -->
|
||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>big-o-complexity</title>
|
||
<meta name="generator" content="Org Mode" />
|
||
<style type="text/css">
|
||
#content { max-width: 60em; margin: auto; }
|
||
.title { text-align: center;
|
||
margin-bottom: .2em; }
|
||
.subtitle { text-align: center;
|
||
font-size: medium;
|
||
font-weight: bold;
|
||
margin-top:0; }
|
||
.todo { font-family: monospace; color: red; }
|
||
.done { font-family: monospace; color: green; }
|
||
.priority { font-family: monospace; color: orange; }
|
||
.tag { background-color: #eee; font-family: monospace;
|
||
padding: 2px; font-size: 80%; font-weight: normal; }
|
||
.timestamp { color: #bebebe; }
|
||
.timestamp-kwd { color: #5f9ea0; }
|
||
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
|
||
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
|
||
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
|
||
.underline { text-decoration: underline; }
|
||
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
|
||
p.verse { margin-left: 3%; }
|
||
pre {
|
||
border: 1px solid #e6e6e6;
|
||
border-radius: 3px;
|
||
background-color: #f2f2f2;
|
||
padding: 8pt;
|
||
font-family: monospace;
|
||
overflow: auto;
|
||
margin: 1.2em;
|
||
}
|
||
pre.src {
|
||
position: relative;
|
||
overflow: auto;
|
||
}
|
||
pre.src:before {
|
||
display: none;
|
||
position: absolute;
|
||
top: -8px;
|
||
right: 12px;
|
||
padding: 3px;
|
||
color: #555;
|
||
background-color: #f2f2f299;
|
||
}
|
||
pre.src:hover:before { display: inline; margin-top: 14px;}
|
||
/* Languages per Org manual */
|
||
pre.src-asymptote:before { content: 'Asymptote'; }
|
||
pre.src-awk:before { content: 'Awk'; }
|
||
pre.src-authinfo::before { content: 'Authinfo'; }
|
||
pre.src-C:before { content: 'C'; }
|
||
/* pre.src-C++ doesn't work in CSS */
|
||
pre.src-clojure:before { content: 'Clojure'; }
|
||
pre.src-css:before { content: 'CSS'; }
|
||
pre.src-D:before { content: 'D'; }
|
||
pre.src-ditaa:before { content: 'ditaa'; }
|
||
pre.src-dot:before { content: 'Graphviz'; }
|
||
pre.src-calc:before { content: 'Emacs Calc'; }
|
||
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
|
||
pre.src-fortran:before { content: 'Fortran'; }
|
||
pre.src-gnuplot:before { content: 'gnuplot'; }
|
||
pre.src-haskell:before { content: 'Haskell'; }
|
||
pre.src-hledger:before { content: 'hledger'; }
|
||
pre.src-java:before { content: 'Java'; }
|
||
pre.src-js:before { content: 'Javascript'; }
|
||
pre.src-latex:before { content: 'LaTeX'; }
|
||
pre.src-ledger:before { content: 'Ledger'; }
|
||
pre.src-lisp:before { content: 'Lisp'; }
|
||
pre.src-lilypond:before { content: 'Lilypond'; }
|
||
pre.src-lua:before { content: 'Lua'; }
|
||
pre.src-matlab:before { content: 'MATLAB'; }
|
||
pre.src-mscgen:before { content: 'Mscgen'; }
|
||
pre.src-ocaml:before { content: 'Objective Caml'; }
|
||
pre.src-octave:before { content: 'Octave'; }
|
||
pre.src-org:before { content: 'Org mode'; }
|
||
pre.src-oz:before { content: 'OZ'; }
|
||
pre.src-plantuml:before { content: 'Plantuml'; }
|
||
pre.src-processing:before { content: 'Processing.js'; }
|
||
pre.src-python:before { content: 'Python'; }
|
||
pre.src-R:before { content: 'R'; }
|
||
pre.src-ruby:before { content: 'Ruby'; }
|
||
pre.src-sass:before { content: 'Sass'; }
|
||
pre.src-scheme:before { content: 'Scheme'; }
|
||
pre.src-screen:before { content: 'Gnu Screen'; }
|
||
pre.src-sed:before { content: 'Sed'; }
|
||
pre.src-sh:before { content: 'shell'; }
|
||
pre.src-sql:before { content: 'SQL'; }
|
||
pre.src-sqlite:before { content: 'SQLite'; }
|
||
/* additional languages in org.el's org-babel-load-languages alist */
|
||
pre.src-forth:before { content: 'Forth'; }
|
||
pre.src-io:before { content: 'IO'; }
|
||
pre.src-J:before { content: 'J'; }
|
||
pre.src-makefile:before { content: 'Makefile'; }
|
||
pre.src-maxima:before { content: 'Maxima'; }
|
||
pre.src-perl:before { content: 'Perl'; }
|
||
pre.src-picolisp:before { content: 'Pico Lisp'; }
|
||
pre.src-scala:before { content: 'Scala'; }
|
||
pre.src-shell:before { content: 'Shell Script'; }
|
||
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
|
||
/* additional language identifiers per "defun org-babel-execute"
|
||
in ob-*.el */
|
||
pre.src-cpp:before { content: 'C++'; }
|
||
pre.src-abc:before { content: 'ABC'; }
|
||
pre.src-coq:before { content: 'Coq'; }
|
||
pre.src-groovy:before { content: 'Groovy'; }
|
||
/* additional language identifiers from org-babel-shell-names in
|
||
ob-shell.el: ob-shell is the only babel language using a lambda to put
|
||
the execution function name together. */
|
||
pre.src-bash:before { content: 'bash'; }
|
||
pre.src-csh:before { content: 'csh'; }
|
||
pre.src-ash:before { content: 'ash'; }
|
||
pre.src-dash:before { content: 'dash'; }
|
||
pre.src-ksh:before { content: 'ksh'; }
|
||
pre.src-mksh:before { content: 'mksh'; }
|
||
pre.src-posh:before { content: 'posh'; }
|
||
/* Additional Emacs modes also supported by the LaTeX listings package */
|
||
pre.src-ada:before { content: 'Ada'; }
|
||
pre.src-asm:before { content: 'Assembler'; }
|
||
pre.src-caml:before { content: 'Caml'; }
|
||
pre.src-delphi:before { content: 'Delphi'; }
|
||
pre.src-html:before { content: 'HTML'; }
|
||
pre.src-idl:before { content: 'IDL'; }
|
||
pre.src-mercury:before { content: 'Mercury'; }
|
||
pre.src-metapost:before { content: 'MetaPost'; }
|
||
pre.src-modula-2:before { content: 'Modula-2'; }
|
||
pre.src-pascal:before { content: 'Pascal'; }
|
||
pre.src-ps:before { content: 'PostScript'; }
|
||
pre.src-prolog:before { content: 'Prolog'; }
|
||
pre.src-simula:before { content: 'Simula'; }
|
||
pre.src-tcl:before { content: 'tcl'; }
|
||
pre.src-tex:before { content: 'TeX'; }
|
||
pre.src-plain-tex:before { content: 'Plain TeX'; }
|
||
pre.src-verilog:before { content: 'Verilog'; }
|
||
pre.src-vhdl:before { content: 'VHDL'; }
|
||
pre.src-xml:before { content: 'XML'; }
|
||
pre.src-nxml:before { content: 'XML'; }
|
||
/* add a generic configuration mode; LaTeX export needs an additional
|
||
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
|
||
pre.src-conf:before { content: 'Configuration File'; }
|
||
|
||
table { border-collapse:collapse; }
|
||
caption.t-above { caption-side: top; }
|
||
caption.t-bottom { caption-side: bottom; }
|
||
td, th { vertical-align:top; }
|
||
th.org-right { text-align: center; }
|
||
th.org-left { text-align: center; }
|
||
th.org-center { text-align: center; }
|
||
td.org-right { text-align: right; }
|
||
td.org-left { text-align: left; }
|
||
td.org-center { text-align: center; }
|
||
dt { font-weight: bold; }
|
||
.footpara { display: inline; }
|
||
.footdef { margin-bottom: 1em; }
|
||
.figure { padding: 1em; }
|
||
.figure p { text-align: center; }
|
||
.equation-container {
|
||
display: table;
|
||
text-align: center;
|
||
width: 100%;
|
||
}
|
||
.equation {
|
||
vertical-align: middle;
|
||
}
|
||
.equation-label {
|
||
display: table-cell;
|
||
text-align: right;
|
||
vertical-align: middle;
|
||
}
|
||
.inlinetask {
|
||
padding: 10px;
|
||
border: 2px solid gray;
|
||
margin: 10px;
|
||
background: #ffffcc;
|
||
}
|
||
#org-div-home-and-up
|
||
{ text-align: right; font-size: 70%; white-space: nowrap; }
|
||
textarea { overflow-x: auto; }
|
||
.linenr { font-size: smaller }
|
||
.code-highlighted { background-color: #ffff00; }
|
||
.org-info-js_info-navigation { border-style: none; }
|
||
#org-info-js_console-label
|
||
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
|
||
.org-info-js_search-highlight
|
||
{ background-color: #ffff00; color: #000000; font-weight: bold; }
|
||
.org-svg { }
|
||
</style>
|
||
|
||
<link rel="stylesheet" href="/assets/styles/style.css" />
|
||
<link rel="stylesheet" href="/assets/styles/bigger-picture.min.css" />
|
||
<link rel="stylesheet" href="/assets/styles/media.css" />
|
||
|
||
<script src="/assets/scripts/script.js" defer></script>
|
||
<script src="/assets/scripts/search.js" defer></script>
|
||
<script src="/assets/scripts/bigger-picture.min.js" defer></script>
|
||
<script src="/assets/scripts/svg-pan-zoom.min.js" defer></script>
|
||
<script src="/assets/scripts/gallery-init.js" defer></script>
|
||
</head>
|
||
<body>
|
||
<div id="preamble" class="status">
|
||
|
||
<div class="banner-header">
|
||
<div class="banner-left">
|
||
<a href="/20241210233721-brain_moc.html"> <img src="/assets/gr.png" alt="Site Logo" class="banner-logo" /> </a>
|
||
<div id="updated">Updated: 2025-12-28 Sun 19:48</div>
|
||
</div>
|
||
|
||
<div class="banner-search">
|
||
<input id="search-box"
|
||
type="search"
|
||
placeholder="Search notes…"
|
||
aria-label="Search notes"
|
||
autocomplete="off" />
|
||
<div id="search-results"></div>
|
||
</div>
|
||
|
||
<button id="close-all">Close All</button>
|
||
</div>
|
||
</div>
|
||
<div id="stack-root">
|
||
<div class="stack-track">
|
||
<article class="stack-pane pane-root" data-url="/20250804201706-big_o_complexity.html">
|
||
<div id="content" class="content">
|
||
<div class="title-section">
|
||
<div class="title-controls">
|
||
<button class="pane-fullscreen" aria-label="Fullscreen">F</button>
|
||
<button class="pane-edit" aria-label="Edit pane">E</button>
|
||
<button class="pane-close" aria-label="Close pane">×</button>
|
||
</div>
|
||
<h1 class="title">big-o-complexity</h1>
|
||
<div class="title-metadata">
|
||
<span class="metadata-item">
|
||
<span class="metadata-label">planted:</span>
|
||
<span class="metadata-value">2025-08-04</span>
|
||
</span>
|
||
<span class="metadata-item">
|
||
<span class="metadata-label">last tended to:</span>
|
||
<span class="metadata-value">2025-12-28</span>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<div id="table-of-contents" role="doc-toc">
|
||
<h2>Table of Contents</h2>
|
||
<div id="text-table-of-contents" role="doc-toc">
|
||
<ul>
|
||
<li><a href="#orgca865ea">Big (O) - Time and Space Complexity</a>
|
||
<ul>
|
||
<li><a href="#orga17bd25">Intro</a></li>
|
||
<li><a href="#orgc8b3561">Technical Definition of Big O</a></li>
|
||
<li><a href="#org808a870">Big O - linear example</a></li>
|
||
<li><a href="#orgbbd31ff">Summation of complexities:</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgca865ea" class="outline-2">
|
||
<h2 id="orgca865ea"><a href="#orgca865ea">Big (O) - Time and Space Complexity</a></h2>
|
||
<div class="outline-text-2" id="text-orgca865ea">
|
||
</div>
|
||
<div id="outline-container-orga17bd25" class="outline-3">
|
||
<h3 id="orga17bd25"><a href="#orga17bd25">Intro</a></h3>
|
||
<div class="outline-text-3" id="text-orga17bd25">
|
||
<p>
|
||
Time Complexity: Describes the amount of time necessary to execute an algorithm
|
||
</p>
|
||
|
||
<p>
|
||
Space Complexity: Describes the amount of memory or space utilized by an algorithm/program
|
||
</p>
|
||
|
||
<p>
|
||
Both - asymptotically
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgc8b3561" class="outline-3">
|
||
<h3 id="orgc8b3561"><a href="#orgc8b3561">Technical Definition of Big O</a></h3>
|
||
<div class="outline-text-3" id="text-orgc8b3561">
|
||
<p>
|
||
is a mathematical notation that describes the limiting behaviour of a function when the arguments tend towards a particular value or infinity. Why do we need it? it helps us understand how the performance of an algorithm changes as the size of the input grows, providing a simple way to compare and analyse different algorithms’ efficiency.
|
||
</p>
|
||
|
||
<p>
|
||
Improvement in time complexity is often more important as memory is cheap and readily available
|
||
</p>
|
||
|
||
<p>
|
||
In Big O, there are six major types of complexities (time and space):
|
||
</p>
|
||
|
||
<ul class="org-ul">
|
||
<li>Constant: O(1)</li>
|
||
|
||
<li>Linear time: O(n)</li>
|
||
|
||
<li>Logarithmic time: O(n log n)</li>
|
||
|
||
<li>Quadratic time: O(n<sup>2</sup>)</li>
|
||
|
||
<li>Exponential time: O(2<sup>n</sup>)</li>
|
||
|
||
<li>Factorial time: O(n!)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org808a870" class="outline-3">
|
||
<h3 id="org808a870"><a href="#org808a870">Big O - linear example</a></h3>
|
||
<div class="outline-text-3" id="text-org808a870">
|
||
<p>
|
||
Suppose we are given a problem where we have a list of `N` numbers of unknown length. We are asked to use code to find and return “True” if the number 2 is in the list and “False” otherwise. Our solution could be to go through every position in the list and check if the number at that position is equal to 2.
|
||
</p>
|
||
|
||
<p>
|
||
[3, 10, 2, 7]
|
||
</p>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-python">for number in list:
|
||
if number == 2:
|
||
return True
|
||
else:
|
||
continue
|
||
return False
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
This would take N time, we need to check every number in the list once, making this solution O(N) - linear time. This looks at the worst case scenarion, if 2 was at the start of the list we know it would take a constant time, however if it’s at the end then it would take N time.
|
||
</p>
|
||
|
||
|
||
<div id="orgdefa53f" class="figure">
|
||
<p><img src="assets/Big-O-Notation-3130482830.png" alt="Big-O-Notation-3130482830.png" />
|
||
</p>
|
||
</div>
|
||
|
||
|
||
<p>
|
||
In the graph above focus on the tail end of the graphs because Big O is concerned with “as the input size grows what happens to the speed of the operations”.
|
||
</p>
|
||
|
||
<!-- This HTML table template is generated by emacs 30.2 -->
|
||
<table border="1">
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
Complexity
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Name
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Description
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Common Use Cases
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Performance at Scale
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
O(1)
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Constant
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Runtime unaffected by input size
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Hash tables, array access
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Excellent
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
O(log n) <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Logarithmic <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Runtime increases slowly <br />
|
||
(typically halved at each step)
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Binary search, balanced trees <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Very good <br />
|
||
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
O(n) <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Linear <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Runtime scales linearly <br />
|
||
(proportional)
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Linear search, array traversal <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Good <br />
|
||
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
O(n log n) <br />
|
||
<br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Linearithmic <br />
|
||
<br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Between linear and quadratic <br />
|
||
(often seen in divide and conquer<br />
|
||
algorithms)
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Efficient sorting algorithms <br />
|
||
<br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Fair <br />
|
||
<br />
|
||
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
O(n²)
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Quadratic
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Runtime squares with input size
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Nested loops, simple sorting
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Poor
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
O(2ⁿ)
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Exponential
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Runtime doubles with each input
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Recursive solutions, combinatorics
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Very poor
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="left" valign="top">
|
||
O(n!) <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Factorial <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Runtime grows by factorial <br />
|
||
(extremely slow)
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Permutations, traveling salesman <br />
|
||
|
||
</td>
|
||
<td align="left" valign="top">
|
||
Terrible <br />
|
||
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgbbd31ff" class="outline-3">
|
||
<h3 id="orgbbd31ff"><a href="#orgbbd31ff">Summation of complexities:</a></h3>
|
||
<div class="outline-text-3" id="text-orgbbd31ff">
|
||
<p>
|
||
When you have multiple operations in an algorithm that each have a linear time complexity O(n), and these operations are sequential (not nested), the overall time complexity of the algorithm remains linear, O(n).
|
||
</p>
|
||
|
||
<p>
|
||
Here’s how it works:
|
||
</p>
|
||
|
||
<ol class="org-ol">
|
||
<li>Summing Linear Operations: If your algorithm involves several separate linear operations, such as:</li>
|
||
</ol>
|
||
<p>
|
||
• First iterating over an array of n elements,
|
||
• Then, in a separate loop, iterating over the same or another array of n elements,
|
||
• And perhaps another loop doing the same,
|
||
each operation has a complexity of O(n). If you sum these, the resulting complexity for these sequential operations is O(n) + O(n) + O(n), and so on.
|
||
</p>
|
||
|
||
<ol class="org-ol">
|
||
<li>Simplification: According to Big O notation rules, when you add complexities of the same order, the overall complexity is dominated by the term that grows fastest as n increases. For linear operations, O(n) + O(n) + O(n) simplifies to O(n) because the growth rate in terms of the largest input size n doesn’t change-it remains linear.</li>
|
||
</ol>
|
||
|
||
|
||
<p>
|
||
Linear time complexity, denoted as O(n), means that the time required to complete the execution of an algorithm increases linearly with the increase in the size of the input data. In essence, if you double the size of the input, you double the time it takes to process it.
|
||
</p>
|
||
|
||
<p>
|
||
Suppose you have a task to sum the number 5, n times. The number of operations (in this case, additions) you perform directly corresponds to n. For instance:
|
||
</p>
|
||
|
||
<ul class="org-ul">
|
||
<li>If n = 1, you perform the operation 1 time: 5.</li>
|
||
<li>If n = 2, you perform the operation 2 times: 5+5.</li>
|
||
<li>If n = 3, you perform the operation 3 times: 5+5+5.</li>
|
||
<li>And so on…</li>
|
||
</ul>
|
||
|
||
<p>
|
||
In each of these cases, the number of addition operations you perform is exactly equal to n. The computational cost grows directly with n, which is the very definition of linear time complexity. Here’s a breakdown:
|
||
</p>
|
||
|
||
<ul class="org-ul">
|
||
<li>When n = 1, the number of operations is 1.</li>
|
||
<li>When n = 10, the number of operations is 10.</li>
|
||
<li>When n = 100, the number of operations is 100.</li>
|
||
<li>When n = 1000, the number of operations is 1000.</li>
|
||
</ul>
|
||
|
||
<p>
|
||
In general, the total time taken for this task can be described as a function T(n) = n, where T(n) represents the total time or total number of operations, and n is the number of times you need to add 5. This function is a straight line when plotted against n, hence it is classified under linear time complexity O(n).
|
||
</p>
|
||
|
||
<p class="backlinks-section" id="backlinks">
|
||
Backlinks
|
||
</p>
|
||
<ul class="org-ul backlinks-list">
|
||
<li><a href="20241210001206-leetcode_notes.html#ID-9d1cfccc-8da7-41a3-b435-9857f0abe441">leetcode<sub>notes</sub></a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div></article></div></div>
|
||
<div id="postamble" class="status">
|
||
<footer>
|
||
<div class="copyright-container">
|
||
<div class="copyright">
|
||
Copyright © 2022-2025 Zaine Qayyum. All rights reserved unless otherwise noted.</div></div>
|
||
<div class="generated">
|
||
Created with <a href="https://www.gnu.org/software/emacs/">Emacs</a> 30.2 (<a href="https://orgmode.org">Org</a> mode 9.7.11) on <a href="https://www.archlinux.org/">Arch</a> <a href="https://www.gnu.org">GNU</a>/<a href="https://www.kernel.org/">Linux</a>
|
||
</div>
|
||
</footer>
|
||
</div>
|
||
</body>
|
||
</html>
|