Changelog
Source:NEWS.md
RcppAlgos 2.9.0
RcppAlgos 2.8.3
CRAN release: 2023-12-10
RcppAlgos 2.8.1
CRAN release: 2023-08-14
Bug Fixes:
Fixed integer overflow bug when converting vector size to number of rows in a matrix. See Issue #45.
Fixed constraint permutation iterator. Before this fix, if a user requested a certain number of results such that the
std::next_permutationalgorithm was not exhausted, the next iteration requested would be nonsensical.
RcppAlgos 2.5.5
New Features:
Added ranking functions:
comboRank,permuteRank, andpartitionsRank.Added back the ability to interrupt general constraint problems via
cpp11::check_user_interrupt().
Other:
- Corrected
if()conditions comparingclass()to string. Changed tois.character.
Bug Fixes:
Now checking class of input vector for partition funcitons.
Now when
partitionsCountreturns 0, the number of results is zero. Before, we were checking for count of partitions to be greater than zero, otherwise we would use the standard combinatorial counting functions to determine the number of results. This lead to strange results with elements not present in the original vector.For
partitionsSample, in cases when we would rely on generating the partitions one at a time until there are no more (e.g. withpartitionsGeneral), the number of partitions isn’t calculated. This leads to the error: “n exceeds the maximum number of possible results”. This is now fixed.
RcppAlgos 2.5.0
CRAN release: 2022-03-16
New Features:
Added partition specific functions:
partionsGeneral,partitionsCount,partitionsIter, andpartitionsSamplecomboIterandpermuteIternow work with constraints.Dropped
RcppandRcppThreadas a dependency to reduce compile time and binary size. As a result, there is no longer the ability to interrupt long running processes. Will investigate in next release.We have added the parameter
FUN.VALUEtocomboGeneralandpermuteGeneral. It acts as a template for the return value ofFUN. The implementation is modeled aftervapply.
Enhancements:
Improved underlying algorithm for
comboGridto be more memory efficient.Made minor changes to make data types more consistent in
primeCountandprimeSieve.
Bug Fixes:
When
permuteGeneralis used with multisets and the width is maximized, multithreading would fail. This is fixed in 2.5.0.Fixed bug in retreiving the nth result in
comboGroupandcomboGroupSamplewhen the number of results was greater than2^31 - 1and less than2^53 - 1. E.g.comboGroupsSample(27, 9, seed = 4, sampleVec = 1606990240475839)gives incorrect results in the 5th group in prior versions. Now fixed!.
Other:
- In this version we no longer output lexicographical composititions in very special circumstances outlined in older documentation using
permuteGeneral. This was done for consistency as we felt that the output diverged too much from the general constrained output ofpermuteGeneral(See Output Order with permuteGeneral). Research is in the initial stage that is focused on implementing a new family of functions similar to the partition family of functions, but for compositions.
RcppAlgos 2.4.2
RcppAlgos 2.4.0
New Features:
Added
comboIterandpermuteIter. These functions return iterators for iterating over combinations and permutations. They have a similar interface tocomboGeneralandpermuteGeneraland 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
Enhancements:
- Now able to interrupt general constraint problems (See Interrupt Execution with Rcpp::checkUserInterrupt)
Bug Fixes:
In 2.3.5 and 2.3.6, we mistakenly allowed a
constraintFunto 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 usingintand when the output was large enough, it was causing an integer overflow thus causing the index matrix to be improperly sized. We have since changed the data type to the recommendedstd::size_t(See Is there a max array length limit in C++?)
RcppAlgos 2.3.5
CRAN release: 2020-01-26
New Features:
Added
comboGroups,comboGroupsCount, andcomboGroupsSample. 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.org (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
pkgdownNow using C++11 instead of C++14. See Issue #10 for more information.
Enhancements:
Extended general partitions algorithm to multisets. E.g.
comboGeneral(10, 8, freqs = rep(1:5, 2), constraintFun = "sum", comparisonFun = "==", limitConstraints = 55)Improved constraint algorithm for the general case.
Added support for complex and raw types for all combinatorial functions.
Improved permutation algorithm for all cases (I.e. no rep, with rep, and with multisets).
Added loop unrolling to prime sieve algorithm for improved efficiency.
RcppAlgos 2.3.4
CRAN release: 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
CRAN release: 2019-06-30
Fixed clang-UBSAN issue in
2.3.2. It was caused by populating a vector of ints with values larger than2^31 - 1.Added optimized algorithm to
{combo|permute}GeneralwhenconstraintFun = "sum",comparisonFun = "==", and the vector passed has a special form. This problem is a special case of the subset sum problem.Using
std::vectorandpush_backmember function instead of pre-allocating matrix when constraint is applied in{combo|permute}General. 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.cppwhen number passed had factors close to the limit in the predefined lookup table (i.e.constexpr int64_t FirstOmittedPrime = 3989)
RcppAlgos 2.3.2
CRAN release: 2019-04-14
Fixed clang-UBSAN issue in
2.3.1. It was caused by casting extremely large values toint64_t.Corrected handling of small values in
PrimeSieveBig.
RcppAlgos 2.3.1
CRAN release: 2019-03-21
Explicitly casted to double for sqrt to silence Solaris
Corrected handling of
NaNs
RcppAlgos 2.3.0
CRAN release: 2019-03-17
All functions now have parallel capabilities via
RcppThread.Utilizes
RMatrix.hfromRcppParallelfor thread safe matrix class.Major overhaul of primeSieve for large primes.
Added
stdThreadMaxfor obtaining the number of threads available on a machine
RcppAlgos 2.2.0
CRAN release: 2018-09-14
Disabled
Parallelargument 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
UBSANerror that caused by filling a vector of integers with numbers larger than2^31 - 1.
RcppAlgos 2.1.0
CRAN release: 2018-09-11
-
Added argument
Parallelto general and sampling functions for increased gains in efficiency.comboGeneral(30, 10, Parallel = TRUE)permuteGeneral(12, 7, TRUE, constraintFun = "sum", Parallel = TRUE)
Logical class is now preserved in combinatorial functions
-
Added gmp support to combinatorial functions. Now, one can accurately and quickly work with combinations/permutations of large vectors E.g.:
comboSample(runif(10000), 100, n = 10, seed = 42, Parallel = TRUE)permuteGeneral(factor(state.name), 20, lower = 1e15, upper = 1e15 + 1000)
Added
FUNargument to all combinatorial functions. Allows user to pass custom functions to be applied to combinations/permutations.
RcppAlgos 2.0.3
CRAN release: 2018-06-30
- Corrected clang
UBSANerror 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.0
Changed max value and explicitly casted a few values to
int64_tin PollardRho.cpp for efficiency while still maintaining accuracy from2^60to2^62(isPrimeRcppis 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.rowCapis nowupper.Added
comboSample,permuteSample,comboCount, andpermuteCountFixed bug with
numDivisorSieveanddivisorSievewhen the lower bound was greater than 1 and less than thesqrtof the upper bound. In the previous version, the numbers in this range would have duplicated values/counts.Increased efficiency of
numDivisorSieveby a factor of 2.Updated unit tests for greater coverage. See the function
package_coveragefrom the packagecovr.
RcppAlgos 1.0.1
CRAN release: 2018-03-10
Corrected precision limits in documentation from
2^64to2^63.Changed const type in
PollardRho.cppfromint64_ttodoubleto correct “UndefinedBehaviorSanitizer”Changed examples in
primeFactorizeSieveto reduce check timeAdded
RcppAlgos-packageman file.
RcppAlgos 1.0.0
CRAN release: 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
primeSievefunction. It is now a segmented sieve of Eratosthenes with wheel factorization based on primesieve by Kim Walisch.Renamed
divisorsListtodivisorsSieve(reason for the major version update to1.0.0)Renamed
primeFactorizationListtoprimeFactorizeSieveMade 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
libdivideby ridiculousfish.
RcppAlgos 0.2.5
CRAN release: 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, andprimeFactorizationList.Fixed bug when non-unique elements are present with factors.
RcppAlgos 0.2.4
CRAN release: 2017-12-18
- Fixed bug that occurs when non-unique elements are present for combinations with replacement.
RcppAlgos 0.2.3
Fixed segmentation fault error highlighted by valgrind check in version
0.2.2.Updated
DESCRIPTIONfile.
RcppAlgos 0.2.2
CRAN release: 2017-12-15
Fixed bug in constraint functions that occurred when
m = 1and the constraint limit was equal to the last element inv. 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.
comboGeneralcan now find all combinations of multisets.Both
comboGeneralandpermuteGeneralcan utilize the argumentmwhen dealing with multisets. Before,permuteGeneralwould simply return all permutations of a multiset. Now you can specify the lengths of the output.
RcppAlgos 0.2.1
CRAN release: 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
CRAN release: 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
Rcpptypes (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
CRAN release: 2017-11-03
Corrected minor typo in
READMEfile.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
CRAN release: 2017-11-03
Improved
ComboConstraintfunction by removing unnecessary subsetting.Improved
PrimeSieveinternalC++algorithm.Corrected the errors with respect to the math functions in
C++. Explicitly overloaded the parameters of these functions by casting them to thedoubletype.