Add PHP example based on DS extension for chapter 08 - greedy algorithms (#97)
* Add PHP example based on DS extension for chapter 08 - greedy algorithms * Add code formatting * Add code formatting / 2
This commit is contained in:
committed by
Aditya Bhargava
parent
ac08df2ee7
commit
2bf2ab5062
36
08_greedy_algorithms/php/01_set_covering.php
Normal file
36
08_greedy_algorithms/php/01_set_covering.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
// You need to install Data Structures (DS) extension.
|
||||||
|
// More details here - http://php.net/manual/en/book.ds.php
|
||||||
|
use \Ds\Set;
|
||||||
|
|
||||||
|
$statesNeeded = new Set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"]);
|
||||||
|
$stations = [];
|
||||||
|
$stations["kone"] = new Set(["id", "nv", "ut"]);
|
||||||
|
$stations["ktwo"] = new Set(["wa", "id", "mt"]);
|
||||||
|
$stations["kthree"] = new Set(["or", "nv", "ca"]);
|
||||||
|
$stations["kfour"] = new Set(["nv", "ut"]);
|
||||||
|
$stations["kfive"] = new Set(["ca", "az"]);
|
||||||
|
$finalStations = new Set();
|
||||||
|
|
||||||
|
while (!$statesNeeded->isEmpty()) {
|
||||||
|
$bestStation = null;
|
||||||
|
$statesCovered = new Set();
|
||||||
|
foreach (array_keys($stations) as $station) {
|
||||||
|
$states = $stations[$station];
|
||||||
|
$covered = new Set($statesNeeded);
|
||||||
|
$covered = $covered->filter(function ($value) use ($states) {
|
||||||
|
return $states->contains($value);
|
||||||
|
});
|
||||||
|
if ($covered->count() > $statesCovered->count()) {
|
||||||
|
$bestStation = $station;
|
||||||
|
$statesCovered = $covered;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$statesNeeded = new Set($statesNeeded);
|
||||||
|
$statesNeeded = $statesNeeded->filter(function ($value) use ($statesCovered) {
|
||||||
|
return !$statesCovered->contains($value);
|
||||||
|
});
|
||||||
|
$finalStations->add($bestStation);
|
||||||
|
}
|
||||||
|
|
||||||
|
print_r($finalStations); // ["kone", "ktwo", "kthree", "kfive"]
|
||||||
Reference in New Issue
Block a user