The Wayback Machine - https://web.archive.org/web/20201006210730/https://github.com/TheAlgorithms/Python/pull/2475
Skip to content
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

Heaps algorithm #2475

Merged
merged 18 commits into from Sep 29, 2020
Merged

Heaps algorithm #2475

merged 18 commits into from Sep 29, 2020

Conversation

@grochedix
Copy link
Contributor

@grochedix grochedix commented Sep 24, 2020

Describe your change:

Added the Heap's algorithm under the "divide and conquer" folder. It outputs all possible permutations from a list of elements.

  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Documentation change?

Checklist:

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms have a URL in its comments that points to Wikipedia or other similar explanation.
  • If this pull request resolves one or more open issues then the commit message contains Fixes: #{$ISSUE_NO}.
[[]]
>>> heaps([0])
[[0]]
>>> heaps([-1, 1])
[[-1, 1], [1, -1]]
>>> heaps([1, 2, 3])
[[1, 2, 3], [2, 1, 3], [3, 1, 2], [1, 3, 2], [2, 3, 1], [3, 2, 1]]
Comment on lines 15 to 21

This comment has been minimized.

@cclauss

cclauss Sep 24, 2020
Member

Instead of (or in addition to) manual doctest results, please test this against https://docs.python.org/3/library/itertools.html#itertools.permutations to ensure they both deliver identical results.

This comment has been minimized.

@grochedix

grochedix Sep 24, 2020
Author Contributor

Done. Added one comparison between my algo and itertools permutations. Also outputed my permutations as list of tuples instead of list of lists to match itertools.

This comment has been minimized.

@grochedix

grochedix Sep 24, 2020
Author Contributor

I use set() since i have to compare the result of a generator (itertools) vs mine (list of tuple), as well as the order of tuples might also be different from one version to the other but can still be correct. Maybe you see another "cleaner" way of doing this ?
I don't think comparing with combinations is a good idea, the Heap's algorithm outputs permutations (order of elements matters).

This comment has been minimized.

@cclauss

cclauss Sep 24, 2020
Member

tuple(permutations(data)) and if that does not work sorted(permutations(data))

This comment has been minimized.

@grochedix

grochedix Sep 25, 2020
Author Contributor

Used sorted() but had to used it on both permutations() and heaps().

This comment has been minimized.

@grochedix

grochedix Sep 28, 2020
Author Contributor

Updated with your comment relative to the iterative version.

@grochedix grochedix requested a review from cclauss Sep 24, 2020
grochedix added 2 commits Sep 25, 2020
@grochedix grochedix mentioned this pull request Sep 28, 2020
11 of 14 tasks complete
@TravisBuddy
Copy link

@TravisBuddy TravisBuddy commented Sep 28, 2020

Hey @grochedix,
Something went wrong with the build.

TravisCI finished with status errored, which means the build failed because of something unrelated to the tests, such as a problem with a dependency or the build process itself.

View build log

TravisBuddy Request Identifier: 9d04df70-01b6-11eb-9be6-0d9634a5fbe7
grochedix added 2 commits Sep 28, 2020
Copy link
Member

@cclauss cclauss left a comment

LGTM

@cclauss cclauss merged commit d95d643 into TheAlgorithms:master Sep 29, 2020
2 checks passed
2 checks passed
codespell
Details
Travis CI - Pull Request Build Passed
Details
@grochedix grochedix deleted the grochedix:heaps_algorithm branch Sep 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
3 participants
You can’t perform that action at this time.