Foreword

I designed this manuscript with a simple goal in mind: creating a resource I would have enjoyed reading at the beginning of my PhD. Looking for such a resource, I found that many articles focused on either algorithms or implementation, but rarely both: theoretical papers rarely connected their results to implementation choices, while engineering-focused work often lacked a clear account of the underlying ideas. This document is my attempt to combine both perspectives, building from shared foundations before focusing on contributions that make the link between design choices and practical performance explicit.

The three parts can be read independently, but together they build toward a common argument: that careful implementation matters as much as algorithm design, that memory representation plays a key role in practical performance, and that at the largest scales, sparser representations become necessary. The first part asks how fast a genomic pipeline can run when the CPU is fully put to use, and builds vectorized methods for parsing, hashing, and minimizer extraction that approach the hardware limit. The second asks how the internal representation of k‑mer sets influences what is actually fast in practice, and shows that structures exploiting the locality of consecutive k‑mers can improve upon generic solutions while supporting richer operations. The third asks how much information can be discarded while still answering similarity queries reliably, and shows that a carefully chosen subset of k‑mers is often sufficient to preserve the answers we care about. Each part assumes only the introduction as a prerequisite, begins with additional background before focusing on new contributions, and closes with my perspectives on this work and what could come next.

I hope you’ll enjoy reading it.