-
-
Save amalmurali47/9077238 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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. | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Changing N to 250000:
So it appears that your second solution is better than your first, but the naive approach still wins the race.