⚡️ Speed up function find_last_node
by 6%
#20
Closed
+5
−1
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.
📄 6% (0.06x) speedup for
find_last_node
insrc/dsa/nodes.py
⏱️ Runtime :
790 microseconds
→743 microseconds
(best of328
runs)📝 Explanation and details
Here is an optimized version of your program.
Optimization rationale
source_ids = {e["source"] for e in edges}
is already a good approach.n["id"] not in source_ids
for every node can be costly, especially ifnodes
is large.nodes
into an iterable of node IDs for efficient lookup/comparison, but functionally, the code is nearly minimal.n["id"]
once.That said, the
next((...), None)
daily pattern is already efficient. But you can squeeze out a bit more performance by:nodes
only once but precompute the set before.Below is the code.
Why is this faster?
"id"
lookup on every generator iteration.If you are guaranteed there is only ever one possible "last" node, you could even do.
But the first (set) version will slightly outperform your original for large lists, as it avoids repeating lookups.
Choose the version that best suits your typical data size and cardinality.
✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-find_last_node-mc5hogjb
and push.