⚡️ Speed up function find_last_node by 23,855%
#186
Closed
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.
📄 23,855% (238.55x) speedup for
find_last_nodeinsrc/algorithms/graph.py⏱️ Runtime :
101 milliseconds→420 microseconds(best of250runs)📝 Explanation and details
The optimization transforms a quadratic O(n*m) algorithm into a linear O(n+m) one by eliminating repeated edge traversals.
Key Change: Instead of checking
all(e["source"] != n["id"] for e in edges)for every node (which scans all edges for each node), the optimized version pre-computes a set of all source IDs:sources = {e["source"] for e in edges}. Then it uses fast O(1) set membership testing:n["id"] not in sources.Why It's Faster:
Performance Impact: The 238x speedup (from 101ms to 420μs) demonstrates the dramatic difference between quadratic and linear algorithms. This improvement scales exponentially with input size - larger graphs will see even greater speedups.
Test Case Analysis: The optimization excels across all scenarios:
The optimization is particularly valuable for graph analysis workflows where this function might be called repeatedly on large datasets.
✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-find_last_node-mjaqp5q2and push.