-
-
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.