⚡️ Speed up function find_last_node by 16,072%
#214
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📄 16,072% (160.72x) speedup for
find_last_nodeinsrc/algorithms/graph.py⏱️ Runtime :
91.0 milliseconds→563 microseconds(best of250runs)📝 Explanation and details
The optimized code achieves a 160x speedup by eliminating a nested loop that created O(n*m) complexity where n = number of nodes and m = number of edges.
Key Optimization
Original approach: For each node, iterate through ALL edges to check if that node is a source
all(e["source"] != n["id"] for e in edges)Optimized approach: Pre-compute all source node IDs once into a set, then do O(1) lookups
sources = {e["source"] for e in edges}- O(m)n["id"] not in sources- O(1) per nodeWhy This Is Faster
inoperator on sets) is dramatically faster than list iterationPerformance Impact by Test Case
The optimization shines particularly well with:
Even on tiny graphs (2-3 nodes), the optimization provides 25-100% speedups, demonstrating the overhead of nested iteration even at small scales.
✅ Correctness verification report:
🌀 Click to see Generated Regression Tests
To edit these changes
git checkout codeflash/optimize-find_last_node-mjiw54c4and push.