-
-
Notifications
You must be signed in to change notification settings - Fork 30
Add binary search #37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code looks very good! However, I recommend adding a recursive binary search in order to provide another alternative to people who wants to learn binary search. See https://www.geeksforgeeks.org/binary-search/
Thank you for the link! I added recursive version and fixed a little inconsistency: |
SatinWukerORIG
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great!
ZoomRmc
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your contribution! Please, consider the proposed changes.
dlesnoff
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your nice implementation!
Some more tests are required but apart from that, the implementation is great.
Please specify that you do not provide a specific element in case of duplicates.
The choice of pivot has to be explained. You use a neat trick to avoid arithmetic overflow and that particularity is non-trivial for beginners.
dlesnoff
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed my mind. Let us just refer to Wikipedia for precisions on theoretical aspects, it will ever be more reviewed and better referenced as well.
Simplify the docstring as suggested, and I'll finally accept the changes.
|
Run nimpretty to remove trailing whitespaces. You can wrap the arguments on one line by adding a line break after the parenthesis instead of the automatically inserted line break by nimpretty. |
dlesnoff
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice first contribution!
* Add binary search * Update binary search: add recursive version * Update binary search: better description * Update binary search: update runnableExamples * Update binary search: improve tests, add overload for recursive func * Update binary search: evaluate if-expression into result * grammar * Update binary search: improve description, add comments * Update binary search: add missing test cases * Update binary search: add info about pivot choice in description, rearrange it * Update binary search: change int to Natural * Update binary search: if block -> guard clause * Update binary search: test cases * Update binary search: simplify docs * Update binary search: nimpretty
* Add binary search * Update binary search: add recursive version * Update binary search: better description * Update binary search: update runnableExamples * Update binary search: improve tests, add overload for recursive func * Update binary search: evaluate if-expression into result * grammar * Update binary search: improve description, add comments * Update binary search: add missing test cases * Update binary search: add info about pivot choice in description, rearrange it * Update binary search: change int to Natural * Update binary search: if block -> guard clause * Update binary search: test cases * Update binary search: simplify docs * Update binary search: nimpretty
* Add binary search * Update binary search: add recursive version * Update binary search: better description * Update binary search: update runnableExamples * Update binary search: improve tests, add overload for recursive func * Update binary search: evaluate if-expression into result * grammar * Update binary search: improve description, add comments * Update binary search: add missing test cases * Update binary search: add info about pivot choice in description, rearrange it * Update binary search: change int to Natural * Update binary search: if block -> guard clause * Update binary search: test cases * Update binary search: simplify docs * Update binary search: nimpretty
* Add binary search * Update binary search: add recursive version * Update binary search: better description * Update binary search: update runnableExamples * Update binary search: improve tests, add overload for recursive func * Update binary search: evaluate if-expression into result * grammar * Update binary search: improve description, add comments * Update binary search: add missing test cases * Update binary search: add info about pivot choice in description, rearrange it * Update binary search: change int to Natural * Update binary search: if block -> guard clause * Update binary search: test cases * Update binary search: simplify docs * Update binary search: nimpretty
* Add a .github action to build DIRECTORY.md * Update gh action build_directory_md * Add ignored paths and git credentials * chore: minor Gitpod improvements (#34) Add Gitpod badge and prebuilds for all branches and forks * Add binary search (#37) * Add binary search * Update binary search: add recursive version * Update binary search: better description * Update binary search: update runnableExamples * Update binary search: improve tests, add overload for recursive func * Update binary search: evaluate if-expression into result * grammar * Update binary search: improve description, add comments * Update binary search: add missing test cases * Update binary search: add info about pivot choice in description, rearrange it * Update binary search: change int to Natural * Update binary search: if block -> guard clause * Update binary search: test cases * Update binary search: simplify docs * Update binary search: nimpretty * Apply suggestions from code review Co-authored-by: David Leal <halfpacho@gmail.com> * Replace by an attempt of github pr create * Fix branching and environment variable in the PR Co-authored-by: David Leal <halfpacho@gmail.com> * Create and populate the Maths directory (#4) * Add a sample of maths basic algorithms * Update maths/abs.nim Co-authored-by: Zoom <ZoomRmc@users.noreply.github.com> * Use openArray in absMaxSort Co-authored-by: Zoom <ZoomRmc@users.noreply.github.com> * Fix seq->openArray and int->SomeInteger * Use Positive as input instead * Update maths/addition_without_arithmetic.nim Co-authored-by: Pietro Peterlongo <pietro.peterlongo@gmail.com> * Name allocation number * [maths/abs] Replace maxAbsSort by signed[Min/Max]Abs * [Aliquot Sum] Add header * Add empty line at end of file * Remove Allocation number since it is a non standard algorithm * Fix titles * Run nimpretty on the files * Rename file and add DIRECTORY.md --------- Co-authored-by: Dimitri LESNOFF <dimitri.lesnoff@lip6.fr> Co-authored-by: David Leal <halfpacho@gmail.com> * Add arc length (#10) * Fix linear search (#33) * Use a dynamic allocated array (sequence) for strings * Run nimpretty * Add requested changes * Fix documentation generation * Fix test title according to changes Co-authored-by: Satin Wuker <74630829+SatinWuker@users.noreply.github.com> * Update comments to warn about indexing issues Modified a bit the suggestions of comments. Please check them before approving. Co-authored-by: Zoom <ZoomRmc@users.noreply.github.com> --------- Co-authored-by: Dimitri LESNOFF <dimitri.lesnoff@lip6.fr> Co-authored-by: Zoom <ZoomRmc@users.noreply.github.com> * chore: run `apt-get update` before running other commands (#41) This will run `sudo apt-get update` before running any other commands on the Gitpod prebuild image (`.gitpod.dockerfile`). * Readme: fix gitter link, add Nim logo, formatting fixes (#42) * Update README.md Use more extended markdown syntax instead of HTML, Add Matrix links Superseed PR #40 * Actually fix gitter! Move img src links to footer. Also changed the TheAlgorithms logo image link. * Restore TheAlgorithms logo link * More link fixes --------- Co-authored-by: dlesnoff <54949944+dlesnoff@users.noreply.github.com> * fix: nimpretty for `arc_length.nim` (#43) * chore: `gc`->`mm`, move back to `config.nims` (#47) * chore: revert #41 (#45) * Update codeowners * Fix: CONTRIBUTING.md links (#49) Uppercase `directory.md` to `DIRECTORY.md` * feat: add Levenshtein distance (#46) * feat: add Levenshtein distance * Apply suggestions from code review Co-authored-by: Zoom <ZoomRmc@users.noreply.github.com> * refactor: use toKey in initSubsolutions * style: use .Natural * style: remove blank line * refactor: add Key type * style: use descriptive variable names * style: use a, b instead of strA, strB * docs: add note about complexity * refator: add name to TestCase * docs: remove sentence about dp * docs: update documentation of `levenshteinDistance` Co-authored-by: Zoom <ZoomRmc@users.noreply.github.com> * docs: rename initLevenshteinDistanceMatrix and add its documentation * refactor: add fillLevenshteinDistanceMatrix * tests: reorganise tests, remove TestCase type * docs: add edit distance to module-level documentation * docs: mention Wagner–Fischer algorithm * docs: add comment in fillLevenshteinDistanceMatrix * style: reformat fillLevenshteinDistanceMatrix * docs: update DIRECTORY.md --------- Co-authored-by: Zoom <ZoomRmc@users.noreply.github.com> * docs: add missing `#` (#50) * docs: add missing `#` * docs: update DIRECTORY.md * docs: remove ` of a Circle` * docs: update DIRECTORY.md --------- Co-authored-by: dlesnoff <54949944+dlesnoff@users.noreply.github.com> * Fix: Remove unuseful date command * chore: Update checkout version to v4 in build_directory_md * Add error status checking + separate compilation and execution of directory.nim --------- Co-authored-by: Dimitri LESNOFF <dimitri.lesnoff@lip6.fr> Co-authored-by: David Leal <halfpacho@gmail.com>
I used linear_search.nim as base, so
checkBinarySearchtemplate is redundant, but could be useful in future for other implementations. I am also not sure if it is a good idea or not to check if array is sorted at the start of function; for example: