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

Optimizing list.insert(0, v) #2276

Open
wants to merge 2 commits into
base: master
from
Open

Optimizing list.insert(0, v) #2276

wants to merge 2 commits into from

Conversation

@Omarfos
Copy link

Omarfos commented Aug 3, 2020

Initially, there was a call to "binary.insert(0, num % 2)", this woud be an O(n^2) algorithm per
https://docs.python.org/3/library/collections.html#collections.deque.

"Though list objects support similar operations, they are optimized for
fast fixed-length operations and incur O(n) memory movement costs for
pop(0) and insert(0, v) operations which change both the size and
position of the underlying data representation."

Changed to a deque to be O(n)

Describe your change:

  • 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}.
… be an O(n^2) algorithm per

https://docs.python.org/3/library/collections.html#collections.deque.

"Though list objects support similar operations, they are optimized for
fast fixed-length operations and incur O(n) memory movement costs for
pop(0) and insert(0, v) operations which change both the size and
position of the underlying data representation."

Changed to a deque to be O(n)
@TravisBuddy
Copy link

TravisBuddy commented Aug 3, 2020

Hey @Omarfos,
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: e489c980-d5df-11ea-8ca9-c37e1b84d109
Copy link
Contributor

ruppysuppy left a comment

Travis CI is failing, make sure that the tests pass

@spamegg1
Copy link
Contributor

spamegg1 commented Aug 4, 2020

@Omarfos Build log says:

/conversions/decimal_to_binary.py:5:1: E302 expected 2 blank lines, found 1

Really easily fixable. Also you can pip install black and black decimal_to_binary.py to format it automatically before submitting.

@Omarfos
Copy link
Author

Omarfos commented Aug 4, 2020

Thank you @spamegg1, should be good to merge now

@cclauss
Copy link
Member

cclauss commented Aug 11, 2020

Please add a timeit benchmark that proves the performance gain between the new code and the old code.

Copy link
Member

cclauss left a comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

6 participants
You can’t perform that action at this time.