graph TD subgraph Costs["Hidden Costs of Slow Software"] A("Slow\nAlgorithm") --> B("CPU Time\nWasted โณ") A --> C("Energy\nWasted ๐") B --> D("Developer\nFrustration ๐ค") C --> E("Cloud\nBill ๐ธ") D --> F("User\nChurn ๐") E --> F end style A fill:#f44336 style B fill:#ff9800 style C fill:#ff9800 style D fill:#9c27b0 style E fill:#f44336 style F fill:#d32f2f
graph TD subgraph Before["Before: O(range)"] B1("max=100") -- "clear bucket 100" --> B2("clear bucket 99") B2 -- "clear bucket 98" --> B3("...") B3 -- "... all the way to 0" --> B4("๐ซ 100 iterations") end style Before fill:#ffcdd2 style B1 fill:#f44336 style B4 fill:#d32f2f
graph TD subgraph After["After: O(k)"] A1("nonempty_set = {3, 17, 42, 99}") --> A2("clear bucket 3 โ ") A2 --> A3("clear bucket 17 โ ") A3 --> A4("clear bucket 42 โ ") A4 --> A5("clear bucket 99 โ ") A5 --> A6("๐ 4 iterations!") end style After fill:#c8e6c9 style A1 fill:#4caf50 style A6 fill:#388e3c
graph LR subgraph Parallel["Parallel: O(C ร Nยฒ) / P"] P1("Thread 1: Cluster 0") P2("Thread 2: Cluster 1") P3("Thread 3: Cluster 2") P4("Thread P: Cluster ...") end style Parallel fill:#c8e6c9 style P1 fill:#4caf50 style P2 fill:#2196f3 style P3 fill:#ff9800 style P4 fill:#9c27b0
graph TD Q("Which Data Structure?") --> A("std::vector") Q --> B("std::set / std::map") Q --> C("std::unordered_set / _map") Q --> D("std::set vs std::unordered_set") A --> A1("โ Cache-friendly\nโ O(1) index\nโ O(n) search") B --> B1("โ Ordered\nโ O(log n) CRUD\nโ Tree overhead") C --> C1("โ O(1) average\nโ No ordering\nโ Hash overhead") D --> D1("std::set: ordered iteration,\npredecessor queries") D --> D2("std::unordered_set: faster\nlookups, no order") style A fill:#2196f3 style B fill:#ff9800 style C fill:#9c27b0 style D fill:#4caf50 style D1 fill:#c8e6c9 style D2 fill:#c8e6c9
graph LR subgraph Ordered["std::map: Deterministic Iteration"] direction LR O1("edge_face_map sorted by (u,v)") --> O2("Deterministic\ndual graph") O2 --> O3("Stable\nMAX-CUT result โ ") end subgraph Unordered["std::unordered_map: Non-deterministic"] direction LR U1("hash order varies") --> U2("Different\ndual graph") U2 --> U3("Wrong\nMAX-CUT result โ") end style Ordered fill:#c8e6c9 style Unordered fill:#ffcdd2
graph LR A("Translation Unit 1") -- "object file" --> C("Linker") B("Translation Unit 2") -- "object file" --> C C -- "LTO: sees ALL code" --> D("Optimized\nBinary ๐") style C fill:#4caf50 style D fill:#2196f3
graph TD subgraph Serial["Serial MAX-CUT"] S1("Decompose\nbiconnected") --> S2("Solve block 1\nall-pairs + MWPM") S2 --> S3("Solve block 2\nall-pairs + MWPM") S3 --> S4("... sequential") S4 --> S5("Union results") end subgraph Parallel["Parallel MAX-CUT"] P1("Decompose\nbiconnected") --> P2("Thread 1:\nblock 1") P1 --> P3("Thread 2:\nblock 2") P1 --> P4("Thread P:\nblock P") P2 --> P5("Union results") P3 --> P5 P4 --> P5 end style Serial fill:#ffcdd2 style Parallel fill:#c8e6c9
graph LR A("Consider Parallelism?") --> B{"Data\nDependent?"} B -->|"Yes"| C("โ Not safe\n(use atomics/locks)") B -->|"No"| D{"Overhead >\nBenefit?"} D -->|"Yes (small workload)"| E("โ Not worth it") D -->|"No (large workload)"| F("โ Go parallel!") C --> G("Try lock-free\nor reduce sharing") style A fill:#2196f3 style C fill:#f44336 style D fill:#ff9800 style E fill:#f44336 style F fill:#4caf50
graph LR A("Baseline") --> B("+Degree Cache") B --> C("+OpenMP") C --> D("+MinHash") D --> E("+Nonempty Set") E --> F("๐ Fast!") style A fill:#f44336 style B fill:#ff9800 style C fill:#ffeb3b style D fill:#4caf50 style E fill:#2196f3 style F fill:#9c27b0
graph LR A("๐ Profile") --> B("๐ฏ Identify\nHotspot") B --> C("๐ Analyze\nComplexity") C --> D("๐ก Propose\nOptimization") D --> E("๐ง Implement\nChange") E --> F("๐ Benchmark\nVerify") F -->|"Faster โ "| G("๐ Document\n& Ship") F -->|"Not faster โ"| H("โฉ๏ธ Revert") H --> A G --> A style A fill:#2196f3 style B fill:#9c27b0 style C fill:#ff9800 style D fill:#4caf50 style E fill:#f44336 style F fill:#ffeb3b style G fill:#4caf50 style H fill:#f44336
graph TD Q("Your Question โ") --> A("Measure ๐") Q --> B("Analyze ๐ฌ") Q --> C("Optimize โก") Q --> D("Verify โ ") style Q fill:#4caf50 style A fill:#2196f3 style B fill:#ff9800 style C fill:#f44336 style D fill:#9c27b0