Skip to content

A collection of utility classes for dealing with combinations.

License

Notifications You must be signed in to change notification settings

PHPExpertsInc/Combinatorics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7a861c9 · Mar 31, 2021

History

4 Commits
Mar 31, 2021
Mar 31, 2021
Jun 15, 2019
Jun 15, 2019
Jun 15, 2019
Mar 31, 2021
Mar 31, 2021
Mar 31, 2021
Mar 31, 2021
Mar 31, 2021
Jun 15, 2019
Jun 15, 2019

Repository files navigation

Combinatorics

TravisCI Maintainability Test Coverage

Combinatorics is a PHP Experts, Inc., Project meant for the ease of access of Combinatorics algorithms.

See https://en.wikipedia.org/wiki/Combinatorics

Memory Consumption

Storing thousands of possibilities can be extremely memory intensive.

However, this project utilizes PHP Generators and uses only a few kilobytes to calculate and output millions of potential combinations (See the Benchmarks section below).

Generating All Possible Combinations

What are all the possibilities of A, B, C and D? More than you might think! 64. Add two more letters and you've got 1,956 possibilities.

How many different parking spot orderings can 8 cars occupy on any given day? Find out in the Usage section below!

Installation

Via Composer

composer require phpexperts/combinatorics

Usage

$generator = new CombinationsGenerator();

foreach ($generator->generate($styles) as $combination) {
    // If you can do what you need to do with the combinations here, without immediately storing
    // them into an array, then your memory usage will never exceed the amount needed store one 
    // combination.
}

You can see real-world usage of this project in the test suite of the Console Painter project](https://github.com/PHPExpertsInc/ConsolePainter).

Use cases

Testing

phpunit --testdox

To actually see what's going on -and- run the stress tests, run

phpunit --debug

Note: It takes over 5 minutes on an Intel i7 to run all of the stress tests.

Benchmarks

Level 1: Generating combinations for A
[
  Number of possibilities => 2
  Time (ms)               => 0.051975250244141
  Time (s)                => 5.1975250244141E-5
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 2: Generating combinations for A, B
[
  Number of possibilities => 4
  Time (ms)               => 0.047922134399414
  Time (s)                => 4.7922134399414E-5
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 3: Generating combinations for A, B, C
[
  Number of possibilities => 15
  Time (ms)               => 0.22578239440918
  Time (s)                => 0.00022578239440918
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 4: Generating combinations for A, B, C, D
[
  Number of possibilities => 64
  Time (ms)               => 1.0910034179688
  Time (s)                => 0.0010910034179688
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 5: Generating combinations for A, B, C, D, E
[
  Number of possibilities => 325
  Time (ms)               => 6.5748691558838
  Time (s)                => 0.0065748691558838
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 6: Generating combinations for A, B, C, D, E, F
[
  Number of possibilities => 1956
  Time (ms)               => 47.721147537231
  Time (s)                => 0.047721147537231
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 7: Generating combinations for A, B, C, D, E, F, G
[
  Number of possibilities => 13699
  Time (ms)               => 395.29585838318
  Time (s)                => 0.39529585838318
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 8: Generating combinations for A, B, C, D, E, F, G, H
[
  Number of possibilities => 109600
  Time (ms)               => 3834.4430923462
  Time (s)                => 3.8344430923462
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]
Level 9: Generating combinations for A, B, C, D, E, F, G, H, I
[
  Number of possibilities => 986409
  Time (ms)               => 37884.353876114
  Time (s)                => 37.884353876114
  Memory consumed         => 320
  Peak Memory (Diff)      => 0
]
Level 10: Generating combinations for A, B, C, D, E, F, G, H, I, J
[
  Number of possibilities => 9864100
  Time (ms)               => 422606.03785515
  Time (s)                => 422.60603785515
  Memory consumed         => 0
  Peak Memory (Diff)      => 0
]

Contributors

Theodore R. Smith theodore@phpexperts.pro
GPG Fingerprint: 4BF8 2613 1C34 87AC D28F 2AD8 EB24 A91D D612 5690
CEO: PHP Experts, Inc.

{ "transactionId" : "$transactionId", "crmId" : "$crmId", "zAccountId" : "$zuoraAccountId", "facilityId" : "$facilityId", "promo_code" : "$promo_code", "transactionTotal" : "$total_cost_for_facebook", "transactionProducts" : [$transactionProducts], "transactionAffiliation" : "U.S. LawShield" }

License

MIT license. Please see the license file for more information.

About

A collection of utility classes for dealing with combinations.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages