mikegarde / partition
Partition a set of values into equal sets or near equal sets.
Installs: 18 631
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 3
Open Issues: 0
pkg:composer/mikegarde/partition
Requires
- php: ^5.6|^7.4|^8.0
- dusank/knapsack: ^10.0
Requires (Dev)
README
A PHP function to partition a set of values into equal sets or near equal sets (partitions). Read more about the partition problem on wikipedia.
Installing
Find on packagist.org
composer require mikegarde/partition
Example
<?php require 'vendor/autoload.php'; use partition\partition; $data = [ [ 'id' => 'A', 'value' => 5, ], [ 'id' => 'B', 'value' => 5, ], [ 'id' => 'C', 'value' => 15, ], [ 'id' => 'D', 'value' => 5, ], [ 'id' => 'E', 'value' => 9, ], [ 'id' => 'F', 'value' => 3, ], [ 'id' => 'G', 'value' => 7, ], [ 'id' => 'H', 'value' => 12, ], ]; $partition = new partition($data, 4); $partition->process(); $results = $partition->getResults(); $part = $partition->getPartition(0);
A JSON representation of $results and $part
{
"summary": [
15,
17,
14,
15
],
"partitions": [
[
{
"id": "C",
"value": 15
}
],
[
{
"id": "H",
"value": 12
},
{
"id": "D",
"value": 5
}
],
[
{
"id": "E",
"value": 9
},
{
"id": "B",
"value": 5
}
],
[
{
"id": "G",
"value": 7
},
{
"id": "A",
"value": 5
},
{
"id": "F",
"value": 3
}
]
]
}
[
{
"id": "C",
"value": 15
}
]
TODO:
- Replace dusank/knapsack with a custom implementation
- Move/Duplicate to GitHub Actions