fast-replace/go-fast-replace/README.md

54 lines
1.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Go Fast Replace
An implementation in Go.
## To build
````bash
make build
````
## To run
````bash
make run
````
## To test
````bash
make test
````
## Conclusions
### Replace
Current implementations:
- `bm` uses `strings.NewReplacer` which uses the [BoyerMoore](https://go.dev/src/strings/search.go) algorithm.
- `cw` uses [CommentzWalter](https://en.wikipedia.org/wiki/Commentz-Walter_algorithm) algorithm.
#### Results
- `bm` varies a lot, but is never over _460µs_.
- `cw` is a lot slower, at around _3.5ms_, but it can search for multiple patterns at once.
````shell
$ make run
./bin/corpus
Creating corpus...
./bin/pairs
Creating pairs...
./bin/replace
bm: 273.621µs
cw: 2.939254ms
````
#### Todo:
- Implement parallelism on the CommentzWalter implementation.
- [BoyerMoore variants](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm#Variants)
- [RabinKarp](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm) algorithm.
- [AhoCorasick](https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm) algorithm.