⚡️ Speed up function find_last_node by 19,149%
#216
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.
📄 19,149% (191.49x) speedup for
find_last_nodeinsrc/algorithms/graph.py⏱️ Runtime :
93.6 milliseconds→486 microseconds(best of178runs)📝 Explanation and details
The optimized code achieves a 191x speedup by eliminating a nested loop antipattern that creates O(n*m) time complexity, where n is the number of nodes and m is the number of edges.
Key Optimization:
The original code uses a nested generator expression: for each node, it checks
all(e["source"] != n["id"] for e in edges), which means it iterates through ALL edges for EVERY node. This creates O(n*m) comparisons.The optimized version preprocesses edges into a set (
source_ids = set(e["source"] for e in edges)) once, then performs O(1) membership checks for each node. This reduces complexity to O(m + n).Why This Works:
n.get("id")instead ofn["id"]to handle nodes missing the 'id' field gracefully, preserving the original's behavior of returning nodes without accessing missing keysPerformance Impact by Test Case:
Best Use Cases:
The optimization excels when:
The optimization maintains correctness while transforming a quadratic algorithm into linear time.
✅ Correctness verification report:
🌀 Click to see Generated Regression Tests
To edit these changes
git checkout codeflash/optimize-find_last_node-mjizyrzyand push.