Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add enum based rust solution for binarytrees #385

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

reflix
Copy link

@reflix reflix commented Apr 17, 2023

Hello,

I found an optimisation to the rust solution of the binary_trees algorithm (5.rs) by switching from structs to enums
in combination with rust's powerful match expression. This replaces multiple if expressions with a single match expression within TreeNode::check(&self) allowing the check function to be written in a functional style.

Further improvements are heavily appreciated :)

hyperfine shows a slight performance improvement (on my machine, unverified) using rustc 1.68.2 (9eb3afe9e 2023-03-27)

5.rs yields

Benchmark 1: target/release/binary_tree 15
Time (mean ± σ): 109.7 ms ± 0.8 ms [User: 105.0 ms, System: 4.1 ms]
Range (min … max): 108.4 ms … 112.2 ms 27 runs

Benchmark 1: target/release/binary_tree 20
Time (mean ± σ): 5.377 s ± 0.018 s [User: 5.086 s, System: 0.286 s]
Range (min … max): 5.362 s … 5.408 s 10 runs

6.rs yields

Benchmark 1: target/release/binary_tree 15
Time (mean ± σ): 106.1 ms ± 0.5 ms [User: 101.4 ms, System: 4.2 ms]
Range (min … max): 105.0 ms … 107.4 ms 27 runs

Benchmark 1: target/release/binary_tree 20
Time (mean ± σ): 5.201 s ± 0.018 s [User: 4.918 s, System: 0.280 s]
Range (min … max): 5.177 s … 5.230 s 10 runs

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant