<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Complexity on CS Theorems</title><link>https://cs.lozic.me/areas/complexity/</link><description>Recent content in Complexity on CS Theorems</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 03 Dec 2027 12:00:00 +0100</lastBuildDate><atom:link href="https://cs.lozic.me/areas/complexity/index.xml" rel="self" type="application/rss+xml"/><item><title>Register Allocation Is Graph Coloring</title><link>https://cs.lozic.me/posts/t107-register-allocation-is-graph-coloring/</link><pubDate>Fri, 03 Dec 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t107-register-allocation-is-graph-coloring/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You write a function with forty local variables. The x86-64 machine it runs on
has sixteen general-purpose registers, two of which are effectively spoken for.&lt;/p&gt;
&lt;p&gt;Something must decide which values live in registers and which live in memory.
Get it right and the function runs at register speed. Get it wrong and every
operation costs a load and a store, and on a modern machine an L1 hit is around
4 cycles against roughly 1 for a register, with an L2 miss costing 12 to 20 and
a trip to DRAM 200 or more.&lt;/p&gt;</description></item><item><title>IP = PSPACE</title><link>https://cs.lozic.me/posts/t036-ip-equals-pspace/</link><pubDate>Fri, 08 Oct 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t036-ip-equals-pspace/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You have a claim you cannot check. A cloud provider ran a computation on a
petabyte you do not have and reports an answer. A model was trained on data you
cannot access. A database returned an aggregate over rows you are not permitted
to read.&lt;/p&gt;</description></item><item><title>BPP, Pseudorandomness, and Derandomization</title><link>https://cs.lozic.me/posts/t035-bpp-pseudorandomness-and-derandomization/</link><pubDate>Fri, 23 Jul 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t035-bpp-pseudorandomness-and-derandomization/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You need to test whether two arithmetic circuits compute the same polynomial.
The deterministic approach is to expand both into normal form, and the expansion
is exponentially large.&lt;/p&gt;
&lt;p&gt;The randomized approach takes four lines. Pick a random point, evaluate both
circuits there, compare. If they differ as polynomials, the
Schwartz-Zippel lemma says a random point catches it with probability at least
$1 - d/|S|$. Repeat a few times and the error is negligible.&lt;/p&gt;</description></item><item><title>The Exponential Time Hypothesis and Fine-Grained Complexity</title><link>https://cs.lozic.me/posts/t037-the-exponential-time-hypothesis-and-fine-grained-complexity/</link><pubDate>Fri, 16 Jul 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t037-the-exponential-time-hypothesis-and-fine-grained-complexity/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You have a string algorithm. Edit distance between two sequences, the classic
dynamic program, $O(n^2)$ time. It has been in production for years.&lt;/p&gt;
&lt;p&gt;Now the inputs are genome-scale. At $n = 10^5$ characters, $n^2 = 10^{10}$
operations, about &lt;strong&gt;10 seconds&lt;/strong&gt; at a billion ops per second. At $n = 10^6$ it is
$10^{12}$ operations, about &lt;strong&gt;1000 seconds&lt;/strong&gt; — seventeen minutes for one pair of
strings. You need to do a million pairs.&lt;/p&gt;</description></item><item><title>Parity Is Not in AC^0</title><link>https://cs.lozic.me/posts/t034-parity-is-not-in-ac0/</link><pubDate>Fri, 09 Jul 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t034-parity-is-not-in-ac0/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You have just read T030 and you are demoralized. Relativization kills the
techniques that treat machines as black boxes. Natural proofs kill the
combinatorial ones, assuming pseudorandom functions exist. Between them they
appear to rule out everything anyone knows how to do, and the honest summary of
fifty years is that nobody can prove any interesting problem is hard.&lt;/p&gt;</description></item><item><title>Parameterized Complexity (FPT and W[1])</title><link>https://cs.lozic.me/posts/t033-parameterized-complexity-fpt-and-w1/</link><pubDate>Fri, 21 May 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t033-parameterized-complexity-fpt-and-w1/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;Your problem is NP-hard, and yet it keeps being easy.&lt;/p&gt;
&lt;p&gt;You are computing a minimum vertex cover to select monitoring points in a
network. Twelve thousand nodes. NP-hard, per T028, so you brace for the worst —
and the answer comes back in under a second, every time. The cover is small,
around thirty nodes, because the network is sparse and the interesting nodes are
few.&lt;/p&gt;</description></item><item><title>Approximation Algorithms and Ratios</title><link>https://cs.lozic.me/posts/t032-approximation-algorithms-and-ratios/</link><pubDate>Fri, 14 May 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t032-approximation-algorithms-and-ratios/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You have accepted that the problem is NP-hard. Now what?&lt;/p&gt;
&lt;p&gt;The literature offers a wall of results with numbers attached: 2-approximation,
$\ln n$-approximation, PTAS, FPTAS, 0.878. Nobody explains what these numbers
buy you, how they are proved, or how they connect to the heuristic you already
wrote. Meanwhile your greedy heuristic is running in production and you have no
idea whether it is within 5% or a factor of 50 of optimal, because &lt;strong&gt;you cannot
compute the optimum to compare against&lt;/strong&gt; — that was the whole problem.&lt;/p&gt;</description></item><item><title>The PCP Theorem and Inapproximability</title><link>https://cs.lozic.me/posts/t031-the-pcp-theorem-and-inapproximability/</link><pubDate>Fri, 07 May 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t031-the-pcp-theorem-and-inapproximability/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You gave up on exact (T028) and went looking for an approximation.&lt;/p&gt;
&lt;p&gt;Vertex cover: you find a 2-approximation in four lines. Knapsack: an FPTAS, any
accuracy you want. Encouraged, you go looking for the same for max-clique, and
you find nothing. Not &amp;ldquo;nothing good&amp;rdquo; — the best known ratio is around
$n/(\log n)^2$, which on a 10,000-vertex graph means the algorithm might return
a clique nearly 60 times smaller than the true maximum. That is not an
approximation, it is a rumour.&lt;/p&gt;</description></item><item><title>The Barriers: Relativization and Natural Proofs</title><link>https://cs.lozic.me/posts/t030-the-barriers-relativization-and-natural-proofs/</link><pubDate>Fri, 02 Apr 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t030-the-barriers-relativization-and-natural-proofs/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You have read T026 and T027 and you are wondering the obvious thing.&lt;/p&gt;
&lt;p&gt;Fifty years. Thousands of researchers. A million-dollar prize. And P vs NP has
not moved. That is strange — most famous problems yield partial results, near
misses, special cases that suggest the shape of the answer. Here there is
almost nothing. We cannot even prove that NP requires more than linear-size
circuits, which is a laughably weak statement compared to what everyone
believes.&lt;/p&gt;</description></item><item><title>Karp's 21 Problems</title><link>https://cs.lozic.me/posts/t028-karps-21-problems/</link><pubDate>Fri, 26 Mar 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t028-karps-21-problems/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;Three weeks into a project, you are still trying to write an exact algorithm.&lt;/p&gt;
&lt;p&gt;The problem is yours and it looks specific: assign delivery vans to routes such
that every stop is covered, no van exceeds its capacity, and the total distance
is minimized. Nothing in the literature matches it exactly. So you keep going —
better data structures, smarter pruning, a cleverer greedy pass with a repair
step — and each version works on your test set and falls over on production
data.&lt;/p&gt;</description></item><item><title>The Cook–Levin Theorem</title><link>https://cs.lozic.me/posts/t027-the-cook-levin-theorem/</link><pubDate>Fri, 19 Mar 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t027-the-cook-levin-theorem/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You know reductions (T017): to prove your problem hard, reduce a known-hard
problem to it. Fine. But that begs the obvious question, and it is the question
a sharp colleague asks the first time you use the technique.&lt;/p&gt;</description></item><item><title>P vs NP</title><link>https://cs.lozic.me/posts/t026-p-vs-np/</link><pubDate>Fri, 12 Mar 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t026-p-vs-np/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You are handed a scheduling problem. Two hundred tasks, precedence constraints,
shared resources, and a deadline. Somebody wants an optimal schedule.&lt;/p&gt;
&lt;p&gt;Checking a proposed schedule takes seconds: walk the list, verify each
constraint, add up the makespan. Finding one is different. Your search runs for
a day and finds nothing. You try simulated annealing, then a genetic algorithm,
then branch and bound. Each gives good schedules and none gives the best one, and
you cannot tell whether the problem is hard or you are not clever enough.&lt;/p&gt;</description></item><item><title>Reductions</title><link>https://cs.lozic.me/posts/t017-reductions/</link><pubDate>Fri, 05 Feb 2027 12:00:00 +0100</pubDate><guid>https://cs.lozic.me/posts/t017-reductions/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;
&lt;p&gt;You have a new problem. Your build system needs to decide whether two
configuration files can ever produce conflicting outputs. Or your linter needs to
decide whether a regex with backreferences can match a string of a given length.
Or your scheduler needs to decide whether a set of periodic tasks is feasible.&lt;/p&gt;</description></item></channel></rss>