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

WIP: Added heap sort, tested against aseba_comb_sort and C++ std::sort #688

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

shilingwang
Copy link
Contributor

@shilingwang shilingwang commented Sep 18, 2017

As described in issue #674, the complexity of math.sort (comb sort) is worst case O(n^2) and best case O(n log(n)). Here I implement heap sort, which should be worst-case O(n log(n)) complexity. The test results (Linux x86_64, g++ 5.4.0, i7-5600U CPU, no optimisation) for comb sort, heap sort and c++ std::sort show that when the data are in random order, the three implementations are not much different and std::sort and comb sort are always a little bit better than heap sort. When the data are already in sorted order without duplication, heap sort is slower than the other two (no more than double). However, when the data is const, heap sort is much faster than comb sort (10 times or more).

@stephanemagnenat
Copy link
Member

Here (macOS 10.12.6, clang 8.1.0, Core i7-6700K, -O2), std::sort outperforms everything else in any condition. For 1k element arrays, heap sort is 4 times faster than comb sort on constant arrays, 4 times slower on already-sorted arrays, and about the same speed otherwise.

It would be very interesting to test on the typical target processor of Aseba, I expect heap sort to be proportionally faster when the processor becomes more primitive.

@stephanemagnenat
Copy link
Member

Do we have a way to run performance test on a simulator of the target's device?

@davidjsherman
Copy link
Collaborator

The Microchip simulator has a Stopwatch that can measure the number of milliseconds between breakpoints. So it should be possible to test the timing in the MPLABX IDE simulator.

While it is possible to submit a script of commands to Microchip's command-line simulator sim30, as far as I can tell the stopwatch isn't available.

If you write an Aseba language program that tests the sorting speed, for example by incrementing a counter with every onevent motor, then I suppose one could run that bytecode in the Microchip simulator. The sim30 script could write the contents of the counters to the pseudo-UART, so that it wouldn't be necessary to analyze a VM memory dump.

@stephanemagnenat
Copy link
Member

That's a good idea. Actually we could also try with the physical robot. One just need to recompile the firmware.

@stephanemagnenat stephanemagnenat changed the title Added heap sort, tested against aseba_comb_sort and C++ std::sort WIP: Added heap sort, tested against aseba_comb_sort and C++ std::sort Mar 1, 2018
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.

None yet

3 participants