3v4l.org

run code in 300+ PHP versions simultaneously
<?php abstract class Drzewo { public $waga; public $znaki; // tworzymy nowe Drzewo - zeby to zrozumiec przydaje sie zajrzec do konstruktora Rozgalezionego drzewa function nowe_Drzewo($prawe) { $nowawaga = $this->waga + $prawe->waga; $noweznaki = $this->znaki + $prawe->znaki; return new Rozgalezione($this,$prawe,$noweznaki,$nowawaga); } // to nalezy przeczytac po zobaczeniu jak tworzone sa drzewa function dekoduj_znak($bity) { if ($this instanceof Lisc) return array($this->znak,$bity); else if ($bity[0] == 0) $nowedrzewo = $this->lewe; else $nowedrzewo = $this->prawe; return $nowedrzewo->dekoduj_znak(array_slice($bity,1)); } function dekoduj($bity){ if ($bity == array()) array(); else { $odkodowany_znak = dekoduj_znak($bity); $znak = $odkodowany_znak[0]; $nowebity = $odkodowany_znak[1]; $dekodowanareszta = $this->dekoduj($nowebity); return array_merge(array($a),$dekodowanareszta); } } } //Drzewo jest Lisciem class Lisc extends Drzewo { public $znak; function __construct($z,$w){ $this->znak = $z; $this->waga = $w; $this->znaki = array($z); } } // ... albo ma poddrzewa class Rozgalezione extends Drzewo { public $lewe; public $prawe; function __construct($podDrzewo_lewe, $podDrzewo_prawe, $z , $w){ $this->lewe = $podDrzewo_lewe; $this->prawe = $podDrzewo_prawe; $this->znaki = $z; $this->waga = $w; } } /* function nowe_Drzewo($lewe,$prawe) { $nowawaga = $lewe->waga + $prawe->waga; $noweznaki = array_merge($lewe->znaki, $prawe->znaki); return new Rozgalezione($lewe,$prawe, $noweznaki, $nowawaga); } function zamien_na_tablice($str){ //oprocz zmiany w tablice usuwamy spacje $str = str_replace(' ','',$str); return str_split($str); } /*nazwa sama sie wyjasnia wystapienia_w_tekscie : array[Char] -> array[(Char,Int)] */ function wystapienia_w_tekscie($tekst) { $wystapienia = array(); $dl = count($tekst); // ZAL TEKST JEST LISTA CHAR'OW for ($i = 0; $i < $dl ; $i++){ $litera = $tekst[$i]; $wystapienia[$litera] +=1; } return $wystapienia; } /* stworz_liste_Lisci_dla_znakow : array[(Char,Int)] -> array[drzewa] */ function stworz_liste_Lisci_dla_znakow( $wystapienia ) { usort($wystapienia); $a = array(); foreach ($wystapienia as $znak => $ile) { $Lisc_w_Liscie = new Lisc($znak,$ile); $a = array_merge($a,array($Lisc_w_Liscie)); } return $a; } /*to jest to samo co insert z insertion sort umiesc_w_odpowiednim_miejscu : drzewa x array[drzewa] -> array[drzewa] */ function umiesc_w_odpowiednim_miejscu($d , $a){ if ($a == array()) return array($d); else { $glowa = $a[0]; $ogon = array_slice($a,1); if ($glowa->waga <= $d->waga) return array_merge( array($glowa) , umiesc_w_odpowiednim_miejscu($d,$ogon)); else return array_merge( array($d), $a); } } /* konstruuj_z_drzew : array[drzewa] -> drzewa MOMENT - NAJWAZNIEJSZY POMYSL HUFFMANNA jesli mamy poszeregowane wzgl. czestosci znaki, to tworzymy Drzewo kodujace w nast sposob : - umieszczamy 'na dole' Drzewo scalone z Lisci o 2 najrzadziej wystepujace symbolach - rekurencyjnie stosujemy funkcje do reszty - doklejamy wyzej opisane Liscie */ function konstruuj_z_drzew($drzewa) { /* zakladamy ze drzewa sa wysortowane - funkcja stworz_liste_Lisci_dla_znakow sortuje wejscie, a ta funkcje bedziemy stosować do jej wyjscia */ if (length($drzewa) <= 1) return $drzewa; else { // TO WARTO SOBIE NARYSOWAC $d1 = $drzewa[0]; $d2 = $drzewa[1]; $dolne = $d1->nowe_Drzewo($d2) ; $reszta = array_slice($drzewa,2); umiesc_w_odpowiednim_miejscu($dolne,konstruuj_Drzewo_huffmana($reszta)); } } ?>

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0070.00718.29
8.3.50.0070.00821.99
8.3.40.0060.01018.71
8.3.30.0060.00818.92
8.3.20.0000.00720.39
8.3.10.0030.00623.53
8.3.00.0040.00419.14
8.2.180.0110.01118.23
8.2.170.0070.00722.96
8.2.160.0110.00720.46
8.2.150.0090.00024.18
8.2.140.0050.00324.66
8.2.130.0070.01126.16
8.2.120.0050.00322.08
8.2.110.0070.01022.30
8.2.100.0040.00717.53
8.2.90.0080.00019.10
8.2.80.0050.00317.97
8.2.70.0000.00817.38
8.2.60.0050.00317.91
8.2.50.0090.00018.07
8.2.40.0000.00818.03
8.2.30.0020.00517.90
8.2.20.0030.00617.54
8.2.10.0000.00717.95
8.2.00.0030.00917.72
8.1.280.0060.00925.92
8.1.270.0120.00322.18
8.1.260.0060.00326.35
8.1.250.0000.00728.09
8.1.240.0170.00323.68
8.1.230.0070.00318.95
8.1.220.0000.00817.74
8.1.210.0060.00318.77
8.1.200.0090.00017.35
8.1.190.0040.00417.30
8.1.180.0050.00318.10
8.1.170.0090.00018.52
8.1.160.0040.00421.93
8.1.150.0060.00318.57
8.1.140.0020.00517.43
8.1.130.0000.00717.69
8.1.120.0050.00317.36
8.1.110.0020.00517.25
8.1.100.0100.00017.07
8.1.90.0000.00717.43
8.1.80.0040.00417.44
8.1.70.0040.00417.27
8.1.60.0030.00617.42
8.1.50.0050.00317.47
8.1.40.0040.00417.32
8.1.30.0030.00517.48
8.1.20.0000.00817.43
8.1.10.0040.00417.48
8.1.00.0000.00817.34
8.0.300.0040.00418.77
8.0.290.0040.00417.04
8.0.280.0030.00318.38
8.0.270.0000.00817.09
8.0.260.0050.00217.20
8.0.250.0030.00316.89
8.0.240.0040.00416.95
8.0.230.0070.00016.74
8.0.220.0040.00416.79
8.0.210.0030.00316.72
8.0.200.0060.00016.89
8.0.190.0000.00816.84
8.0.180.0040.00416.88
8.0.170.0080.00016.89
8.0.160.0030.00416.81
8.0.150.0070.00016.65
8.0.140.0060.00316.78
8.0.130.0000.00613.29
8.0.120.0000.00816.87
8.0.110.0040.00416.82
8.0.100.0040.00416.73
8.0.90.0000.00816.80
8.0.80.0030.01216.82
8.0.70.0030.00616.84
8.0.60.0040.00416.82
8.0.50.0040.00416.79
8.0.30.0080.01416.91
8.0.20.0070.01317.40
8.0.10.0050.00316.77
8.0.00.0110.00716.62
7.4.330.0050.00015.02
7.4.320.0000.00616.54
7.4.300.0000.00616.54
7.4.290.0040.00416.39
7.4.280.0060.00316.33
7.4.270.0000.00716.54
7.4.260.0030.00316.42
7.4.250.0040.00416.55
7.4.240.0020.00516.44
7.4.230.0030.00316.42
7.4.220.0060.01316.64
7.4.210.0080.00916.53
7.4.200.0030.00316.62
7.4.190.0020.00516.40
7.4.160.0100.01016.20
7.4.150.0200.00017.40
7.4.140.0080.01317.86
7.4.130.0160.00516.43
7.4.120.0120.00816.47
7.4.110.0070.01116.52
7.4.100.0120.00616.43
7.4.90.0080.00816.46
7.4.80.0060.01619.39
7.4.70.0060.01016.42
7.4.60.0070.01016.18
7.4.50.0040.00416.10
7.4.40.0030.01522.77
7.4.30.0080.01716.36
7.4.00.0060.00615.00
7.3.330.0000.00513.29
7.3.320.0000.00713.20
7.3.310.0030.00516.11
7.3.300.0030.00316.24
7.3.290.0090.00916.26
7.3.280.0090.00816.21
7.3.270.0170.00017.40
7.3.260.0070.01116.31
7.3.250.0050.01216.50
7.3.240.0130.00316.54
7.3.230.0130.00316.39
7.3.210.0140.00316.32
7.3.200.0100.01319.39
7.3.190.0030.01416.42
7.3.180.0100.00716.33
7.3.170.0150.00316.27
7.3.160.0120.00916.21
7.3.120.0070.01014.67
7.2.330.0120.00616.29
7.2.320.0070.01116.65
7.2.310.0120.00616.73
7.2.300.0100.00716.64
7.2.290.0070.01116.66
7.2.00.0060.00619.24
7.1.100.0040.00717.87
7.1.70.0050.00216.96
7.1.60.0060.01619.46
7.1.50.0090.00934.75
7.1.00.0100.07022.45
7.0.200.0180.00314.57
7.0.140.0030.07722.10
7.0.100.0300.07719.95
7.0.90.0300.08319.98
7.0.80.0300.08319.99
7.0.70.0370.07019.99
7.0.60.0300.09019.91
7.0.50.0370.06720.45
7.0.40.0230.06720.16
7.0.30.0070.06319.95
7.0.20.0030.08320.10
7.0.10.0130.08020.04
7.0.00.0070.07319.99
5.6.280.0030.07320.93
5.6.250.0030.08320.50
5.6.240.0130.07320.79
5.6.230.0030.08720.55
5.6.220.0100.08020.52
5.6.210.0100.07720.50
5.6.200.0070.08321.21
5.6.190.0170.07721.13
5.6.180.0130.06721.09
5.6.170.0030.08320.99
5.6.160.0130.08021.04
5.6.150.0030.08721.09
5.6.140.0100.07020.99
5.6.130.0130.08321.01
5.6.120.0130.07721.07
5.6.110.0200.07321.10
5.6.100.0070.07721.02
5.6.90.0100.08021.14
5.6.80.0130.07720.46
5.6.70.0130.07020.44
5.6.60.0130.06720.34
5.6.50.0170.03720.37
5.6.40.0170.06320.46
5.6.30.0100.07720.50
5.6.20.0070.07720.40
5.6.10.0070.08020.42
5.6.00.0130.07020.38
5.5.380.0070.04320.38
5.5.370.0130.07720.39
5.5.360.0030.08320.46
5.5.350.0170.07720.37
5.5.340.0100.04320.83
5.5.330.0000.06020.90
5.5.320.0070.08320.94
5.5.310.0100.05320.95
5.5.300.0130.04720.94
5.5.290.0100.08020.82
5.5.280.0000.07320.83
5.5.270.0030.05320.91
5.5.260.0130.07020.82
5.5.250.0000.07320.71
5.5.240.0070.08020.19
5.5.230.0100.07720.14
5.5.220.0030.08320.04
5.5.210.0070.08020.31
5.5.200.0030.07720.10
5.5.190.0100.07020.24
5.5.180.0100.07720.01
5.5.160.0070.07720.13
5.5.150.0170.06020.23
5.5.140.0070.04720.29
5.5.130.0030.08320.25
5.5.120.0030.08020.29
5.5.110.0070.08320.09
5.5.100.0100.07720.16
5.5.90.0070.03720.19
5.5.80.0130.07019.97
5.5.70.0030.04020.13
5.5.60.0030.03720.09
5.5.50.0100.03320.16
5.5.40.0030.04320.05
5.5.30.0000.04320.17
5.5.20.0100.03319.98
5.5.10.0030.04019.99
5.5.00.0030.04020.13
5.4.450.0130.07719.42
5.4.440.0130.07319.37
5.4.430.0070.08319.17
5.4.420.0030.08319.49
5.4.410.0030.06719.36
5.4.400.0100.07018.98
5.4.390.0030.07718.90
5.4.380.0170.06319.05
5.4.370.0100.06019.14
5.4.360.0000.08319.13
5.4.350.0200.07019.18
5.4.340.0130.08019.21
5.4.320.0100.06719.16
5.4.310.0000.07319.24
5.4.300.0170.07018.96
5.4.290.0130.07018.90
5.4.280.0170.06718.95
5.4.270.0130.06719.13
5.4.260.0030.06719.03
5.4.250.0100.04719.13
5.4.240.0070.07719.04
5.4.230.0030.04318.92
5.4.220.0070.03319.13
5.4.210.0100.03318.87
5.4.200.0030.03719.16
5.4.190.0070.03319.12
5.4.180.0000.04019.11
5.4.170.0030.04019.13
5.4.160.0000.04019.13
5.4.150.0030.03718.86
5.4.140.0000.05316.47
5.4.130.0000.06016.37
5.4.120.0070.04316.50
5.4.110.0030.05016.40
5.4.100.0030.03316.56
5.4.90.0030.07016.48
5.4.80.0030.03716.39
5.4.70.0100.02716.31
5.4.60.0070.06316.32
5.4.50.0170.05016.37
5.4.40.0000.06016.56
5.4.30.0030.04716.39
5.4.20.0100.03316.41
5.4.10.0130.02716.43
5.4.00.0030.06015.79
5.3.290.0030.08014.63
5.3.280.0030.04014.70
5.3.270.0070.04014.62
5.3.260.0130.03314.62
5.3.250.0030.04014.67
5.3.240.0100.03014.63
5.3.230.0000.04014.68
5.3.220.0170.02714.63
5.3.210.0070.03714.71
5.3.200.0070.05314.54
5.3.190.0030.07314.72
5.3.180.0070.06314.71
5.3.170.0000.04014.61
5.3.160.0030.06714.60
5.3.150.0070.03314.70
5.3.140.0030.04014.52
5.3.130.0000.04014.55
5.3.120.0100.04014.72
5.3.110.0000.04014.65
5.3.100.0000.04014.03
5.3.90.0030.03713.99
5.3.80.0130.03014.09
5.3.70.0000.05014.18
5.3.60.0030.06013.96
5.3.50.0070.03313.91
5.3.40.0100.03314.12
5.3.30.0000.05013.86
5.3.20.0030.07313.82
5.3.10.0070.03013.72
5.3.00.0000.04313.69

preferences:
50.2 ms | 401 KiB | 5 Q