Skip to content

Add skew heap data structure. #3238

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

Merged
merged 8 commits into from
Oct 14, 2020
Merged

Conversation

Phil9l
Copy link
Contributor

@Phil9l Phil9l commented Oct 12, 2020

Add skew heap data structure.

A data structure that allows inserting a new value and to pop the smallest
values. Both operations take O(logN) time where N is the size of the structure.

  • 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}.

@Phil9l Phil9l requested a review from cclauss as a code owner October 12, 2020 17:26
@cclauss cclauss mentioned this pull request Oct 14, 2020
14 tasks
Copy link
Member

@cclauss cclauss left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of curiosity, how would you create a SkewHeap.__len__() method?

@cclauss cclauss merged commit e3c07f9 into TheAlgorithms:master Oct 14, 2020
@Phil9l Phil9l deleted the skew-heap branch October 14, 2020 10:51
@Phil9l
Copy link
Contributor Author

Phil9l commented Oct 14, 2020

Out of curiosity, how would you create a SkewHeap.__len__() method?

  • One way that requires O(1) memory would be to just add a field that keeps track of it. Insert increases it by one. Pop decreases. Clear sets to 0. Merging results as the sum of two heap sizes. But in this case, we can't merge for example the left child of the heap with another heap, because we don't know the size of the children.
  • Another one is to save the size of the subtree. Leaves are 1s, any node is left.size + right.size + 1. And then it is easy to get the heap size just as the root size. But it requires O(n) additional memory to store n ints.

@cclauss
Copy link
Member

cclauss commented Oct 14, 2020

just add a field that keeps track of it

Not a fan... Too many places for bugs to pop up.

@Phil9l
Copy link
Contributor Author

Phil9l commented Oct 14, 2020

Not a fan... Too many places for bugs to pop up.

Yep, agreed, I always implement the second approach when I need it.

stokhos pushed a commit to stokhos/Python that referenced this pull request Jan 3, 2021
* Add skew heap data structure.

* fixup! Add skew heap data structure.

* fixup! Add skew heap data structure.

* fixup! Add skew heap data structure.

* Add tests.

* Add __iter__ method.

* fixup! Add __iter__ method.
Panquesito7 pushed a commit to Panquesito7/Python that referenced this pull request May 13, 2021
* Add skew heap data structure.

* fixup! Add skew heap data structure.

* fixup! Add skew heap data structure.

* fixup! Add skew heap data structure.

* Add tests.

* Add __iter__ method.

* fixup! Add __iter__ method.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants