<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Algorithms on maladroit.dev</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/</link><description>Recent content in Algorithms on maladroit.dev</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://maladroit.dev/kb/computer-engineering/algorithms/index.xml" rel="self" type="application/rss+xml"/><item><title>Binary search</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/binary-search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/binary-search/</guid><description>&lt;p&gt;Given an array of integers &lt;code&gt;nums&lt;/code&gt; which is sorted in ascending order, and an
integer &lt;code&gt;target&lt;/code&gt;, write a function to search &lt;code&gt;target&lt;/code&gt; in &lt;code&gt;nums&lt;/code&gt;. If &lt;code&gt;target&lt;/code&gt;
exists, then return its index. Otherwise, return &lt;code&gt;-1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You must write an algorithm with &lt;code&gt;O(log n)&lt;/code&gt; runtime complexity.&lt;/p&gt;
&lt;h2 id="method"&gt;Method&lt;/h2&gt;
&lt;p&gt;Iterate over array and change the start/end to be the mid point&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;h3 id="go"&gt;go&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;search&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nums&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;target&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;start&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;end&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;len&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nums&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;var&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;mid&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;start&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;end&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;mid&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;end&lt;/span&gt; &lt;span style="color:#908caa"&gt;+&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;start&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;/&lt;/span&gt; &lt;span style="color:#f6c177"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nums&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;mid&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;target&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ea9a97"&gt;start&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;mid&lt;/span&gt; &lt;span style="color:#908caa"&gt;+&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;else&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nums&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;mid&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;target&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ea9a97"&gt;end&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;mid&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;else&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;mid&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/tech-interview-handbook"&gt;Tech-Interview-Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://leetcode.com/problems/binary-search/"&gt;LeetCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Breadth first search</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/breadth-first-search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/breadth-first-search/</guid><description>&lt;p&gt;Breadth-first search is a graph traversal algorithm that starts at a node and
travels to all other nodes at the current depth before moving further into the
graph. &lt;a href="https://maladroit.dev/kb/computer-engineering/queue"&gt;queue&lt;/a&gt; are a good data structure for
tracking of the nodes that have been encountered, but not traversed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ℹ️ Note&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It is important to use a double-ended queue (not an array) due to the time
complexity of dequeuing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;/h2&gt;
&lt;h3 id="go"&gt;go&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;var&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;directions&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;},&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;},&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;},&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;type&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;struct&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;NewGraph&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;bfs&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;startX&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;startY&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;len&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][&lt;/span&gt;&lt;span style="color:#f6c177"&gt;2&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;bfsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;startX&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;startY&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;bfsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][&lt;/span&gt;&lt;span style="color:#f6c177"&gt;2&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;append&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;2&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt;&lt;span style="color:#908caa"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;len&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;][&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;],&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;][&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;:]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;][&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;==&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;true&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#3e8fb0"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;][&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;fmt&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;Printf&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#f6c177"&gt;&amp;#34;visited: %v, %v\n&amp;#34;&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;_&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;direction&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;directions&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;+&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;direction&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;],&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;+&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;direction&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;||&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				&lt;span style="color:#3e8fb0"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;||&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				&lt;span style="color:#3e8fb0"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;append&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;queue&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;2&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt;&lt;span style="color:#908caa"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/tech-interview-handbook"&gt;Tech Interview Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/computer-engineering/algorithms"&gt;The Algorithm Design Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Constant time functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/constant-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/constant-functions/</guid><description>&lt;p&gt;$$f(n)=1$$&lt;/p&gt;
&lt;p&gt;Constant functions are the fastest function classes when describing an algorithm&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/computer-engineering/algorithms"&gt;The Algorithm Design Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Cubic Time Functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/cubic-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/cubic-functions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;f(n)=n^3&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cubic functions describe algorithms that examine all triples&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Depth first search</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/depth-first-search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/depth-first-search/</guid><description>&lt;p&gt;Depth first search is a graph traversal algorithm that travels as far as
possible along edges before it backtracks. This is typically accomplished using
a &lt;a href="https://maladroit.dev/kb/computer-engineering/stack"&gt;Stack&lt;/a&gt; to keep track of the nodes on the current
path. This could be an implicit stack through using recursion or a literal stack
data structure.&lt;/p&gt;
&lt;h2 id="example"&gt;Example&lt;/h2&gt;
&lt;h3 id="go"&gt;go&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;var&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;directions&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;},&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;},&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;},&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;type&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;struct&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;NewGraph&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;x&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;y&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;dfs&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;startX&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;startY&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;len&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;dfsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;startX&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;startY&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;dfsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#908caa"&gt;[][]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;][&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;==&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;true&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;][&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;fmt&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;Printf&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#f6c177"&gt;&amp;#34;visited: %v, %v\n&amp;#34;&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;_&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;direction&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;directions&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;+&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;direction&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;],&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;+&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;direction&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;||&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;rows&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#3e8fb0"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;||&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;cols&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#3e8fb0"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;dfsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nextI&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;nextJ&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/tech-interview-handbook"&gt;Tech-Interview-Handbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Dynamic programming</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/dynamic-programming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/dynamic-programming/</guid><description>&lt;p&gt;Dynamic programming is a technique for efficiently implementing a recursive
algorithm by storing partial results. This is helpful because it allows for an
exhaustive search without processing the same partial result over and over. It
is important to know that this is a trade off of time complexity for space.&lt;/p&gt;
&lt;h2 id="examples"&gt;Examples&lt;/h2&gt;
&lt;h3 id="go"&gt;go&lt;/h3&gt;
&lt;h4 id="before"&gt;Before&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fib&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#908caa"&gt;==&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#908caa"&gt;==&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fib&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;2&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;+&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fib&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="after"&gt;After&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;const&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;miss&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;maxN&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;92&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;var&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;make&lt;/span&gt;&lt;span style="color:#908caa"&gt;([]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;maxN&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fibDriver&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;miss&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fib&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fib&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;==&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;miss&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fib&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;2&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;+&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;fib&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;-&lt;/span&gt;&lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;cache&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/tech-interview-handbook"&gt;Tech-Interview-Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Exponential time functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/exponential-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/exponential-functions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;f(n)=c^n&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Exponential functions describe algorithms when iterating over all subsets of &lt;code&gt;n&lt;/code&gt; items&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Factorial time functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/factorial-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/factorial-functions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;f(n)=n!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Factorial functions exist when generating all permutations or orderings of &lt;code&gt;n&lt;/code&gt; items&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>KMP</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/kmp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/kmp/</guid><description>&lt;p&gt;Knuth-Morris-Pratt (KMP) is an algorithm for pattern matching in a string
similar to the &lt;a href="https://maladroit.dev/kb/computer-engineering/sliding-window"&gt;Sliding-window&lt;/a&gt; technique.
The primary difference in KMP is that the algorithm does not backtrack on the
text string and instead creates a lookup up index in the pattern string.&lt;/p&gt;
&lt;p&gt;To accomplish this, a prefix look up table is generated where all the
sub-strings in the pattern string that match the largest repeating prefix are
given index values. This index value is used as a point of reference for where
to backtrack in the pattern string when a match is not found. This allows
pattern matching without the need to back track in the text string.&lt;/p&gt;</description></item><item><title>Linear time functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/linear-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/linear-functions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;f(n)=n&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Linear functions describe algorithms that need look at everything once such as a
for loop.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Logarithmic time functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/logarithmic-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/logarithmic-functions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;f(n)=log(n)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Logarithmic functions grow very slowly as &lt;code&gt;n&lt;/code&gt; gets large, but not as slow as
&lt;a href="https://maladroit.dev/kb/computer-engineering/constant-functions"&gt;Constant-functions&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Quadratic time functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/quadratic-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/quadratic-functions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;f(n)=n^2&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quadratic functions describe algorithms that require examining all pairs of elements.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rabin-Karp</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/rabin-karp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/rabin-karp/</guid><description>&lt;p&gt;The Rabin-Karp algorithm is a method of finding all occurrences of a sub-string
in a given string. The naive approach to this solution would be to use the
&lt;a href="https://maladroit.dev/kb/computer-engineering/sliding-window"&gt;Sliding-window&lt;/a&gt; technique. Rabin-Karp has a similar
approach, but instead of comparing the window to the sub-string, it instead
compares hash values using a rolling hash function.&lt;/p&gt;
&lt;h2 id="complexity"&gt;Complexity&lt;/h2&gt;
&lt;p&gt;It has an average/best case time complexity of &lt;code&gt;O(n+m)&lt;/code&gt; and a worse case time
complexity of &lt;code&gt;O(n * m)&lt;/code&gt;. The worst case would occur if all the calculated hash
values of the text were the same as the calculated hash of the pattern. It has
auxiliary complexity of &lt;code&gt;O(1)&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Recursion</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/recursion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/recursion/</guid><description>&lt;p&gt;Recursion is a problem solving strategy that involves breaking a problem down
into smaller and smaller pieces and using those solutions collectively to find
the original solution. All recursive functions have at least these two parts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A base case where the recursion stops&lt;/li&gt;
&lt;li&gt;Breaking the problem down and calling the function recursively&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="techniques"&gt;Techniques&lt;/h2&gt;
&lt;h3 id="memoization"&gt;Memoization&lt;/h3&gt;
&lt;p&gt;Some recursive functions may end up calling the same function multiple times.
When possible, store the results of previously calculated functions and re-use
the to improve efficiency.&lt;/p&gt;</description></item><item><title>Sliding window</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/sliding-window/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/sliding-window/</guid><description>&lt;p&gt;Sliding window is a technique that accomplishes what would normally taking
multiple iterations in a single iteration. The technique can be applied when
given a window of a known size, finding the result for the first window, and
then shifting the window to the next position in the array or string.&lt;/p&gt;
&lt;h2 id="common-use-cases"&gt;Common use cases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;largest sum&lt;/li&gt;
&lt;li&gt;min/max sum&lt;/li&gt;
&lt;li&gt;sub array/string&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="examples"&gt;Examples&lt;/h2&gt;
&lt;h3 id="python"&gt;python&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;def&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;slidingWindow&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;arr&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;windowSize&lt;/span&gt;&lt;span style="color:#908caa"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;arrLen&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;len&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;arr&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#6e6a86"&gt;# outer loop needs to account for to avoid out of bounds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;in&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;range&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;arrLen&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;windowSize&lt;/span&gt; &lt;span style="color:#908caa"&gt;+&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#6e6a86"&gt;# inner loop only needs to iterate over the window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt; &lt;span style="color:#908caa"&gt;in&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;range&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;windowSize&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#6e6a86"&gt;# operation inside the window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;result&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="go"&gt;go&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;slidingWindow&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;arr&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;windowSize&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;int&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;arrLen&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;len&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;arr&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#6e6a86"&gt;// outer loop needs to account for to avoid out of bounds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;;&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;arrLen&lt;/span&gt; &lt;span style="color:#908caa"&gt;-&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;windowSize&lt;/span&gt; &lt;span style="color:#908caa"&gt;+&lt;/span&gt; &lt;span style="color:#f6c177"&gt;1&lt;/span&gt;&lt;span style="color:#908caa"&gt;);&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;i&lt;/span&gt;&lt;span style="color:#908caa"&gt;++&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#6e6a86"&gt;// inner loop only needs to iterate over the window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt;&lt;span style="color:#908caa"&gt;;&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;windowSize&lt;/span&gt;&lt;span style="color:#908caa"&gt;;&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;j&lt;/span&gt;&lt;span style="color:#908caa"&gt;++&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#6e6a86"&gt;// operation inside the window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;result&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Sorting and searching</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/sorting-and-searching/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/sorting-and-searching/</guid><description>&lt;p&gt;Sorting is the act of rearranging a sequence in some known order such as
numerical or lexicographical that is either ascending or descending. Sorting
arrays are valuable as they enable binary searching which is faster than
&lt;a href="https://maladroit.dev/kb/computer-engineering/linear-functions"&gt;linear time&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="complexity"&gt;Complexity&lt;/h2&gt;
&lt;h3 id="sorting"&gt;Sorting&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Algorithm&lt;/th&gt;
					&lt;th&gt;Time&lt;/th&gt;
					&lt;th&gt;Space&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Bubble sort&lt;/td&gt;
					&lt;td&gt;O(n^2)&lt;/td&gt;
					&lt;td&gt;O(1)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Insertion sort&lt;/td&gt;
					&lt;td&gt;O(n^2)&lt;/td&gt;
					&lt;td&gt;O(1)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Selection sort&lt;/td&gt;
					&lt;td&gt;O(n^2)&lt;/td&gt;
					&lt;td&gt;O(1)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Quicksort&lt;/td&gt;
					&lt;td&gt;O(n log(n))&lt;/td&gt;
					&lt;td&gt;O(log(n))&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mergesort&lt;/td&gt;
					&lt;td&gt;O(n log(n))&lt;/td&gt;
					&lt;td&gt;O(n)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Heapsort&lt;/td&gt;
					&lt;td&gt;O(n log(n))&lt;/td&gt;
					&lt;td&gt;O(1)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Counting sort&lt;/td&gt;
					&lt;td&gt;O(n + k)&lt;/td&gt;
					&lt;td&gt;O(k)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Radix sort&lt;/td&gt;
					&lt;td&gt;O(nk)&lt;/td&gt;
					&lt;td&gt;O(n + k)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="searching"&gt;Searching&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Algorithm&lt;/th&gt;
					&lt;th&gt;Time&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Binary search&lt;/td&gt;
					&lt;td&gt;O(log(n))&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="edge-cases"&gt;Edge cases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Empty sequence&lt;/li&gt;
&lt;li&gt;Sequence with one element&lt;/li&gt;
&lt;li&gt;Sequence with two elements&lt;/li&gt;
&lt;li&gt;Sequence with duplicate elements&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/tech-interview-handbook"&gt;Tech-Interview-Handbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Super-linear time functions</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/super-linear-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/super-linear-functions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;f(n)=n*log(n)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Functions that are super-linear grow slightly faster than linear, but not by much.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Topological sort</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/topological-sorting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/topological-sorting/</guid><description>&lt;p&gt;A topological sort is a linear ordering of a directed graph. The ordering works
similarly to &lt;a href="https://maladroit.dev/kb/computer-engineering/depth-first-search"&gt;Depth-first-search&lt;/a&gt;, but
the nodes are considered &amp;ldquo;visited&amp;rdquo; when all of it&amp;rsquo;s dependencies are visited.
This is an algorithm that is commonly used for discovering dependencies or
prerequisites between nodes.&lt;/p&gt;
&lt;h2 id="examples"&gt;Examples&lt;/h2&gt;
&lt;h3 id="go"&gt;go&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e0def4;background-color:#232136;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;type&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;struct&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;type&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;node&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;struct&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;name&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;edges&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;NewGraph&lt;/span&gt;&lt;span style="color:#908caa"&gt;()&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;{}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;NewNode&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;name&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;string&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;{&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;name&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;name&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;edges&lt;/span&gt;&lt;span style="color:#908caa"&gt;:&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;{}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;AddNode&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;append&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;AddEdge&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;e&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;edges&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;append&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;edges&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;e&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;TopologicalSort&lt;/span&gt;&lt;span style="color:#908caa"&gt;()&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;len&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color:#f6c177"&gt;0&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;map&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;_&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;node&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;nodes&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;==&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;false&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;tsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;_&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;n&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ea9a97"&gt;fmt&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;Println&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;n&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;name&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#3e8fb0"&gt;func&lt;/span&gt; &lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;g&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;graph&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;tsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt; &lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;map&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt;&lt;span style="color:#3e8fb0"&gt;bool&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt; &lt;span style="color:#908caa"&gt;[]&lt;/span&gt;&lt;span style="color:#908caa"&gt;*&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;for&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;_&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;edge&lt;/span&gt; &lt;span style="color:#908caa"&gt;:=&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;range&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;edges&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#3e8fb0"&gt;if&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;[&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;edge&lt;/span&gt;&lt;span style="color:#908caa"&gt;]&lt;/span&gt; &lt;span style="color:#908caa"&gt;==&lt;/span&gt; &lt;span style="color:#3e8fb0"&gt;false&lt;/span&gt; &lt;span style="color:#908caa"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt; &lt;span style="color:#908caa"&gt;=&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;g&lt;/span&gt;&lt;span style="color:#908caa"&gt;.&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;tsTraverse&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;edge&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;visited&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#3e8fb0"&gt;return&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;append&lt;/span&gt;&lt;span style="color:#908caa"&gt;(&lt;/span&gt;&lt;span style="color:#ea9a97"&gt;stack&lt;/span&gt;&lt;span style="color:#908caa"&gt;,&lt;/span&gt; &lt;span style="color:#ea9a97"&gt;node&lt;/span&gt;&lt;span style="color:#908caa"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#908caa"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit.dev/kb/reference/tech-interview-handbook"&gt;Tech-Interview-Handbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Traverse from right</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/traverse-from-right/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/traverse-from-right/</guid><description>&lt;p&gt;Occasionally it can be effect to traverse an array from right to left instead of
left to right.&lt;/p&gt;</description></item><item><title>Two pointers</title><link>https://maladroit.dev/kb/computer-engineering/algorithms/two-pointers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit.dev/kb/computer-engineering/algorithms/two-pointers/</guid><description>&lt;p&gt;The two pointers technique is a generalization of the
&lt;a href="https://maladroit.dev/kb/computer-engineering/sliding-window"&gt;Sliding-window&lt;/a&gt; technique. The primary
difference is that the two pointers can cross over one another and could
reference different arrays.&lt;/p&gt;
&lt;h2 id="common-use-cases"&gt;Common use cases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Palindromic sub-strings&lt;/li&gt;
&lt;li&gt;Sorting colors&lt;/li&gt;
&lt;li&gt;Merging sorted arrays&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>