Skip to content

jibsen/spart-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stable Partitioning Examples

spart.hpp contains example code in C++ for the stable partitioning algorithms discussed in the Reordering Arguments blog post.

spart_test compares the output of the various partitioning functions to that of std::stable_partition.

spart_time compares the execution time and number of predicate applications for a vector of 1,000,000 elements. Here is the output from a MSVC compile, optimization turned on:

Timing all false:
  std::stable_partition        11.13 ms (1000000 predicates)
  stable_partition_recursive    7.49 ms (1000000 predicates)
  stable_partition_bottomup     7.20 ms (1999998 predicates)
  stable_partition_bsearch     13.33 ms (3999959 predicates)
  stable_partition_natural      1.29 ms (1000000 predicates)

Timing all true:
  std::stable_partition         2.09 ms (1000000 predicates)
  stable_partition_recursive    7.93 ms (1000000 predicates)
  stable_partition_bottomup    26.06 ms (19980544 predicates)
  stable_partition_bsearch     13.54 ms (2999961 predicates)
  stable_partition_natural      1.32 ms (1000000 predicates)

Timing first half false:
  std::stable_partition         7.00 ms (1000000 predicates)
  stable_partition_recursive   12.16 ms (1000000 predicates)
  stable_partition_bottomup    21.66 ms (10980537 predicates)
  stable_partition_bsearch     18.27 ms (3499955 predicates)
  stable_partition_natural      6.13 ms (2000000 predicates)

Timing alternating false/true:
  std::stable_partition         6.94 ms (1000000 predicates)
  stable_partition_recursive   20.87 ms (1000000 predicates)
  stable_partition_bottomup    37.17 ms (11490270 predicates)
  stable_partition_bsearch     36.23 ms (3499961 predicates)
  stable_partition_natural     41.18 ms (20000000 predicates)

Timing random:
  std::stable_partition         9.53 ms (1000000 predicates)
  stable_partition_recursive   30.10 ms (1000000 predicates)
  stable_partition_bottomup    48.42 ms (11350257 predicates)
  stable_partition_bsearch     45.86 ms (3457751 predicates)
  stable_partition_natural     45.53 ms (19000000 predicates)

Some observations from these results:

  • bsearch uses between 3n and 4n predicate applications.
  • bottomup and natural use worst-case around 20 million predicate applications, which is n log n.
  • natural expectedly performs well when few changes are needed.

License

This projected is licensed under the terms of the MIT license.

About

Example code for Reordering Arguments blog post (www.hardtoc.com)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages