RcppAlgos 2.4.1 2020-03-24

Bug Fixes:

  • Removed broken URL in NEWS.Rd

RcppAlgos 2.4.0 Unreleased

New Features:

  • Added comboIter and permuteIter. These functions return iterators for iterating over combinations and permutations. They have a similar interface to comboGeneral and permuteGeneral and currently only work with standard combinations and permutations. They do not yet work with constraints (This will be the focus of the next release).

  • Added “High Performance Benchmarks” and “Combinatorial Iterators in RcppAlgos” vignettes


Bug Fixes:

  • In 2.3.5 and 2.3.6, we mistakingly allowed a constraintFun to be applied to a logical vector which was crashing R. We have corrected this in 2.4.0.

  • Changed the data type for sizing the index matrix in permuteGeneral. Originally, we were using int and when the output was large enough, it was causing an integer overflow thus causing the index matrix to be unproperly sized. We have sinced changed the data type to the recommended std::size_t (See Is there a max array length limit in C++?)

RcppAlgos 2.3.6 2020-01-29

Bug Fixes:

  • Fixed bug associated with integer vectors, multisets, and constraints. See Issue #12 for more information.

RcppAlgos 2.3.5 2020-01-26

New Features:

  • Added comboGroups, comboGroupsCount, and comboGroupsSample. These functions deal with partitioning a vector/set into groups of equal size. See Combinations in R by Groups. See the related integer sequences A025035-A025042 at https://oeis.orgOEIS (E.g. https://oeis.org/A025036A025036 for Number of partitions of (1, 2, ..., 4n) into sets of size 4.)

  • Added vignettes (First version with vignettes)

  • Added website via the excellent package pkgdown

  • Now using C++11 instead of C++14. See Issue #10 for more information.


Bug Fixes:

  • Corrected checks for total number of partitions and assignment of number of rows when upper is applied in combo/permuteGeneral. See Issue #9 for more information.

  • permuteGeneral no longer alters source vector. See Issue #11 for more information.

RcppAlgos 2.3.4 2019-07-03

  • Fixed clang/gcc-ASAN and valgrind issues in 2.3.3. These issues were arising from finding the first vector to meet the criteria in PartitionRep/Distinct. We also found further issues in the standard functions when the length of the partition was 2. The algorithm would eventually try and access an element of a vector at index -1. These fixes were confirmed by successful Rdevel CMD check under ‘r-devel-ubsan-clang’ via docker using the advice found here: https://knausb.github.io/2017/06/reproducing-a-clang-ubsan-issue/ and http://dirk.eddelbuettel.com/code/sanitizers.html.

RcppAlgos 2.3.3 2019-06-30

  • Fixed clang-UBSAN issue in 2.3.2. It was caused by populating a vector of ints with values larger than 2^31 - 1.

  • Added optimized algorithm to combo/permuteGeneral when constraintFun = "sum", comparisonFun = "==", and the vector passed has a special form. This problem is a special case of the subset sum problem.

  • Using std::vector and push_back member function instead of pre-allocating matrix when constraint is applied in combo/permuteGeneral. This alleviates the need to guess the upper limit and subsequently subset as only elements that meet the constraints are added.

  • Fixed error in PollardRho.cpp when number passed had factors close to the limit in the predefined lookup table (i.e. constexpr int64_t FirstOmittedPrime = 3989)

RcppAlgos 2.3.2 2019-04-14

  • Fixed clang-UBSAN issue in 2.3.1. It was caused by casting extremely large values to int64_t.

  • Corrected handling of small values in PrimeSieveBig.

RcppAlgos 2.3.1 2019-03-21

  • Explicitly casted to double for sqrt to silence Solaris

  • Corrected handling of NaNs

RcppAlgos 2.3.0 2019-03-17

  • All functions now have parallel capabilites via RcppThread.

  • Utilizes RMatrix.h from RcppParallel for thread safe matrix class.

  • Major overhaul of primeSieve for large primes.

  • Added stdThreadMax for obtaining the number of threads available on a machine

RcppAlgos 2.2.0 2018-09-14

  • Disabled Parallel argument as it was causing unpredictable errors on certain platforms. Research is ongoing to correct this for use in future versions. The development version will retain this feature.

  • Corrected UBSAN error that caused by filling a vector of integers with numbers larger than 2^31 - 1.

RcppAlgos 2.1.0 2018-09-11

RcppAlgos 2.0.3 2018-06-30

  • Corrected clang UBSAN error identified by two different unit tests. In both situations, the problem was occurring as a result of populating a vector of integers with values from a vector of doubles that contained a nan (Not-a-Number). Most information was obtained from Brian J. Knaus’s blog titled : “Reproducing a clang-UBSAN issue” (https://knausb.github.io/2017/06/reproducing-a-clang-ubsan-issue/)

RcppAlgos 2.0.2 2018-06-14

  • Corrected divide by zero in divisorsRcpp unit test.

RcppAlgos 2.0.1 2018-06-10

  • Corrected spelling in DESCRIPTION

RcppAlgos 2.0.0 Unreleased

  • Changed max value and explicitly casted a few values to int64_t in PollardRho.cpp for efficiency while still maintaining accuracy from 2^60 to 2^62 (isPrimeRcpp is roughly 10% faster now).

  • Updated core permutation algorithm for greater efficiency and generality

  • Added capability of generating specific combinations/permutations

  • Changed arguments to comboGeneral/permuteGeneral. rowCap is now upper.

  • Added comboSample, permuteSample, comboCount, and permuteCount

  • Fixed bug with numDivisorSieve and divisorSieve when the lower bound was greater than 1 and less than the sqrt of the upper bound. In the previous version, the numbers in this range would have duplicated values/counts.

  • Increased efficiency of numDivisorSieve by a factor of 2.

  • Updated unit tests for greater coverage. See the function package_coverage from the package covr.

RcppAlgos 1.0.1 2018-03-10

  • Corrected precision limits in documentation from 2^64 to 2^63.

  • Changed const type in PollardRho.cpp from int64_t to double to correct “UndefinedBehaviorSanitizer”

  • Changed examples in primeFactorizeSieve to reduce check time

  • Added RcppAlgos-package man file.

RcppAlgos 1.0.0 2018-03-07

  • Added the following functions: primeFactorize (vectorized pollard rho factorization), divisorsRcpp (vectorized factoring (complete)), isPrimeRcpp (vectorized primality testing using Miller-Rabin algorithm), & primeCount (based on the primecount algorithm by Kim Walisch)

  • Completely revamped the primeSieve function. It is now a segmented sieve of Eratosthenes with wheel factorization based on primesieve by Kim Walisch.

  • Renamed divisorsList to divisorsSieve (reason for the major version update to 1.0.0)

  • Renamed primeFactorizationList to primeFactorizeSieve

  • Made the sieving functions more flexible. They are now able to generate results over a range and can also produce named objects.

  • All number theoretic functions have been made more efficient. Some make use of the fast integer division library libdivide by ridiculousfish.

RcppAlgos 0.2.5 2018-01-04

  • Added unit tests.

  • Removed unnecessary files.

  • Fixed bug in primeSieve that occurred when a number with a decimal was passed (e.g. 2.01).

  • Adjusted accepted lower bound for numDivisorSieve, eulerPhiSieve, divisorsList, primeSieve, and primeFactorizationList.

  • Fixed bug when non-unique elements are present with factors.

RcppAlgos 0.2.4 2017-12-18

  • Fixed bug that occurs when non-unique elements are present for combinations with replacement.

RcppAlgos 0.2.3 Unreleased

  • Fixed segmentation fault error highlighted by valgrind check in version 0.2.2.

  • Updated DESCRIPTION file.

RcppAlgos 0.2.2 2017-12-15

  • Fixed bug in constraint functions that occurred when m = 1 and the constraint limit was equal to the last element in v. It was returning a 2x1 matrix with the same value twice. It is now correctly returning a 1x1 matrix with the correct value 1 time.

  • Reorganized source code such that all utility functions for the combinatoric functions are now in their own file. Additionally added header for this file.

  • All combinatoric functions can now utilize the rowCap argument. Before, rowCap only applied to the combinatorial functions with constraints.

  • comboGeneral can now find all combinations of multisets.

  • Both comboGeneral and permuteGeneral can utilize the argument m when dealing with multisets. Before, permuteGeneral would simply return all permutations of a multiset. Now you can specify the lengths of the output.

RcppAlgos 0.2.1 2017-11-29

  • Fixed bug that would occur in two edge cases involving the constraint functions.

  • Slightly modified formatting for primeSieve.Rd

RcppAlgos 0.2.0 2017-11-28

  • Updated combination algorithms. They are now more than twice as fast.

  • Updated constraint functions so that memory access is always within container bounds

  • Consolidated redundant code for outputting different Rcpp types (e.g. IntegerMatrix, CharacterMatrix, etc.) via a templated approach.

  • Added the function permuteGeneral that is analogous to comboGeneral only instead of combinations, it gives all permutations. It has an additional argument (i.e. ‘freqs’) that is used to generate permutations of multisets.

  • All combinatoric functions now support factor types.

RcppAlgos 0.1.2 2017-11-03

  • Corrected minor typo in README file.

  • Fixed minor error regarding explicitly comparing variables to large numbers that are typed out. Simply adding a decimal along with a zero remedies the situation.

RcppAlgos 0.1.1 2017-11-03

  • Improved ComboConstraint function by removing unnecessary subsetting.

  • Improved PrimeSieve internal C++ algorithm.

  • Corrected the errors with respect to the math functions in C++. Explicitly overloaded the parameters of these functions by casting them to the double type.

RcppAlgos 0.1.0 2017-10-26

  • Initial Release