Skip to content

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.

3 participants