Skip to content

Instantly share code, notes, and snippets.

@amalmurali47
Forked from sarciszewski/gist:9076640
Last active August 29, 2015 13:56
Show Gist options
  • Save amalmurali47/9077238 to your computer and use it in GitHub Desktop.
Save amalmurali47/9077238 to your computer and use it in GitHub Desktop.
<?php
// My original function
function max_length($array) {
$max = 0;
foreach($array as $child) {
if(count($child) > $max) {
$max = count($child);
}
}
return $max;
}
// From Stack Overflow
function max_length_so1($input_arr) {
$counts = array_map('count', $input_arr);
$key = array_flip($counts)[max($counts)];
return count($input_arr[$key]);
}
function max_length_so2($input_arr) {
$count = array_map('count', $input_arr);
$min = array_keys($count , max($count))[0];
return count($input_arr[$min]);
}
$dataset = [
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,30), 'a'),
array_fill(0, mt_rand(2,30), 'b'),
array_fill(0, mt_rand(2,30), 'c'),
array_fill(0, mt_rand(2,30), 'd'),
array_fill(0, mt_rand(2,30), 'e'),
array_fill(0, mt_rand(1,50), 'f'),
array_fill(0, mt_rand(2,30), 'g'),
array_fill(0, mt_rand(2,30), 'h'),
['i'],
array_fill(0, mt_rand(30,55), 'j'),
array_fill(0, mt_rand(1,80), 'k'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'),
array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x'), array_fill(0, mt_rand(2,20), 'x')
];
$start = microtime(1);
for($i = 0; $i < 100000; ++$i) {
$x = max_length($dataset);
}
$end = microtime(1);
echo "Naive solution:\n";
echo "Result {$x} calculated in " . ( $end - $start) . " seconds.\n";
$start = microtime(1);
for($i = 0; $i < 100000; ++$i) {
$x = max_length_so1($dataset);
}
$end = microtime(1);
echo "Stack Overflow 1:\n";
echo "Result {$x} calculated in " . ( $end - $start) . " seconds.\n";
$start = microtime(1);
for($i = 0; $i < 100000; ++$i) {
$x = max_length_so2($dataset);
}
$end = microtime(1);
echo "Stack Overflow 2:\n";
echo "Result {$x} calculated in " . ( $end - $start) . " seconds.\n";
/*
$ php array.php
Naive solution:
Result 43 calculated in 9.6717028617859 seconds.
Stack Overflow 1:
Result 43 calculated in 15.327514886856 seconds.
Stack Overflow 2:
Result 43 calculated in 14.802617788315 seconds.
*/
@sarciszewski
Copy link

Changing N to 250000:

Naive solution:
Result 47 calculated in 12.74768781662 seconds.
Stack Overflow 1:
Result 47 calculated in 21.176842927933 seconds.
Stack Overflow 2:
Result 47 calculated in 18.850181102753 seconds.

So it appears that your second solution is better than your first, but the naive approach still wins the race.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment