<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Data Structures |</title><link>https://ad25aderram.github.io/my-portfolio/tags/data-structures/</link><atom:link href="https://ad25aderram.github.io/my-portfolio/tags/data-structures/index.xml" rel="self" type="application/rss+xml"/><description>Data Structures</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 01 Nov 2025 00:00:00 +0000</lastBuildDate><image><url>https://ad25aderram.github.io/my-portfolio/media/icon_hu_b93c5070c370bd46.png</url><title>Data Structures</title><link>https://ad25aderram.github.io/my-portfolio/tags/data-structures/</link></image><item><title>Advanced Algorithms &amp; Data Structures</title><link>https://ad25aderram.github.io/my-portfolio/projects/advanced-algorithms/</link><pubDate>Sat, 01 Nov 2025 00:00:00 +0000</pubDate><guid>https://ad25aderram.github.io/my-portfolio/projects/advanced-algorithms/</guid><description>&lt;p&gt;A series of algorithm implementations focused on understanding performance trade-offs through experimental analysis. Rather than relying on theoretical Big-O alone, every implementation is benchmarked and visualised against real data.&lt;/p&gt;
&lt;h2 id="sorting--search-complexity"&gt;Sorting &amp;amp; search complexity&lt;/h2&gt;
&lt;p&gt;Seven sorting algorithms benchmarked across four data distributions — random, ascending, descending, and identical values:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Complexity&lt;/th&gt;
&lt;th&gt;Best case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Quick sort (dual-pivot)&lt;/td&gt;
&lt;td&gt;O(n log n) avg&lt;/td&gt;
&lt;td&gt;Random data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge sort&lt;/td&gt;
&lt;td&gt;O(n log n)&lt;/td&gt;
&lt;td&gt;Consistent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heap sort&lt;/td&gt;
&lt;td&gt;O(n log n)&lt;/td&gt;
&lt;td&gt;Consistent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Insertion sort&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;Nearly-sorted data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Selection sort&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bubble sort&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary search&lt;/td&gt;
&lt;td&gt;O(log n)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Runtime was normalised against T(n)/n, T(n)/(n log n), and T(n)/n² to empirically verify complexity classes. Key finding: insertion sort consistently outperforms O(n log n) algorithms on nearly-sorted data — a result that only becomes intuitive when you see it in a plot.&lt;/p&gt;
&lt;h2 id="hash-tables"&gt;Hash tables&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Chaining with linked lists for collision handling&lt;/li&gt;
&lt;li&gt;Open addressing: linear probing, quadratic probing, double hashing&lt;/li&gt;
&lt;li&gt;Benchmarked on datasets up to 100,000 elements — collision rates and lookup times compared across all strategies&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="probabilistic-filters"&gt;Probabilistic filters&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bloom filter&lt;/strong&gt; with k = 2, 3, 4 hash functions — false positive rate vs. memory trade-off&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Count-Min Sketch&lt;/strong&gt; for frequency estimation — precision vs. hash function count&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="string-pattern-matching"&gt;String pattern matching&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Naïve search vs. &lt;strong&gt;deterministic finite automaton (DFA)&lt;/strong&gt; — transition function computation and pattern recognition on randomly generated text&lt;/li&gt;
&lt;li&gt;Performance comparison shows DFA&amp;rsquo;s advantage grows with text length&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="dynamic-programming"&gt;Dynamic programming&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fibonacci: naïve recursion vs. memoisation — exponential-to-linear improvement demonstrated empirically&lt;/li&gt;
&lt;li&gt;Coin change: minimum coin count with full optimal solution reconstruction&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tech-stack"&gt;Tech stack&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Language&lt;/strong&gt;: Python&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Libraries&lt;/strong&gt;: Matplotlib, NumPy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Focus&lt;/strong&gt;: Algorithm design, complexity analysis, experimental benchmarking&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>