⊗ppSpOtAU 82 of 83 menu

PHPда кераксиз массивларни оптимизациялаш

Бир программистнинг олдига 1 дан 100000000 гача бўлган бутун сонларнинг йиғиндисини топиш вазифаси қўйилган деб фараз қилайлик.

Бизнинг программист бу вазифанинг чиройли ечимини яратди, мана бу йу́л билан:

<?php echo array_sum(range(1, 100000000)); ?>

Чиройли ечим, тўғрими? Битар сатрда ва шунга ўхшаш нарсалар. Лекин у ишламайди! Ушбу кодни ишга тушириб кўринг ва у сиз жуда кўп оператив хотира сўраганлингиз ҳақида хатоликни экрангга чиқаради.

Ҳм, 100000000 ўзи жуда кўп эмас-ку? Ёки кўпми? Ҳисоблаб кўрайлик. range функсияси 100000000 та сондан иборат массив яратади. PHP ҳар бир сон учун 2 байт хотира ажратади деб фараз қилайлик - у ҳолда бизнинг массивимизни сақлаш учун 200000000 байт, яъни тахминан 200 мегабайт оператив хотира зарур.

Аммо аслида оператив хотира жуда кўпроқ зарур бўлади, чунки PHPда массивни сақлашда жуда катта қўшимча харажатлар мавжуд. Мисол учун, менинг хатолик матимымда, мен 4294967304 байт хотира ажратмоқчи бўлганим ҳақида хабар бериляпти - тахминан 4 гигабайтга яқин!

Энди нега хатолик юз беляптини тушунимиз - биз рухсат этилган хотира лимитидан анча ошиб кетдик.

Бизнинг скриптимизни бошқа, амалда оператив хотира истемайдиган скриптга ўзгартириш қийин эмас:

<?php $sum = 0; for ($i = 1; $i <= 100000000; $i++) { $sum += $i; } echo $sum; ?>

Янада яхшироқ, математик ечимдан фойдаланамиз:

<?php $n = 1000000; $sum = $n * ($n + 1) / 2; echo $sum; ?>

Бир программистнинг олдига берилган соннинг факториалини топиш вазифаси қўйилган эди. У уни қуйидагича ечди:

<?php $n = 100; echo array_product(range(1, $n)); ?>

Бу кодда нима но tugri эканлигини тушантиринг. Кодни янада оптималроқ қилиб ёзинг.

Бир программистнинг олдига 1 дан 1000000 гача бўлган барча бутун сонларни ёзиш учун ишлатиладиган рақамлар сонини топиш вазифаси қўйилган эди. У уни қуйидагича ечди:

<?php echo strlen(implode('', range(1, 1000000))); ?>

Бу кодда нима но tugri эканлигини тушантиринг. Кодни янада оптималроқ қилиб ёзинг.

Бир программистнинг олдига берилган оралиқда жойлашган, 7 га бўлинғанда қолдиқ қолдирмайдиган сонларнинг сонини топиш вазифаси қўйилган эди. У уни қуйидагича ечди:

<?php $arr = []; for ($i = 0; $i <= 1000; $i++) { if ($i % 7 == 0) { $arr[] = $i; } } echo count($arr); ?>

Бу кодда нима но tugri эканлигини тушантиринг. Кодни янада оптималроқ қилиб ёзинг.

Бир программистнинг олдига соннинг бўлувчиларининг йиғиндисини топиш вазифаси қўйилган эди. У уни қуйидагича ечди:

<?php $num = 320; $divs = []; for ($i = 0; $i <= $num; $i++) { if ($num % $i == 0) { $divs[] = $i; } } echo array_sum($divs); ?>

Бу кодда нима но tugri эканлигини тушантиринг. Кодни янада оптималроқ қилиб ёзинг.

Ўзбек
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш