⊗ppSpOtAU 82 of 83 menu

Optimisasi Array yang Tidak Perlu dalam PHP

Misalkan seorang programmer dihadapkan pada tugas menjumlahkan bilangan bulat dari 1 hingga 100000000.

Programmer kita menulis solusi yang elegan untuk tugas ini, seperti ini:

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

Solusi yang cantik, bukan? Hanya dalam satu baris dan semuanya. Tapi itu tidak bekerja! Cobalah menjalankan kode ini dan dia akan menampilkan kesalahan tentang meminta terlalu banyak memori RAM.

Hmm, 100000000 sepertinya tidak terlalu banyak? Atau banyak? Mari kita hitung. Fungsi range membuat array dengan 100000000 angka. Misalkan PHP mengalokasikan 2 byte untuk satu angka - maka untuk menyimpan array kita dibutuhkan 200000000 byte, yaitu sekitar 200 megabyte memori RAM.

Tapi sebenarnya memori RAM yang dibutuhkan akan jauh lebih banyak karena dalam PHP ada overhead yang sangat besar saat menyimpan array. Sebagai contoh, di teks error saya, dilaporkan bahwa saya mencoba mengalokasikan 4294967304 byte - sekitar 4 gigabyte!

Jelas sekarang, mengapa errornya muncul - kita jauh melampaui batas memori yang diizinkan.

Tidak terlalu sulit untuk menulis ulang skrip kita menjadi yang lain, yang hampir tidak mengonsumsi memori RAM:

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

Atau lebih baik lagi kita gunakan solusi matematis:

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

Seorang programmer dihadapkan pada tugas mencari faktorial dari suatu angka. Dia menyelesaikannya dengan cara berikut:

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

Jelaskan, apa yang salah dengan kode ini. Ubahlah kode menjadi lebih optimal.

Seorang programmer dihadapkan pada tugas mencari jumlah digit yang dapat digunakan untuk menulis semua bilangan bulat dari 1 hingga 1000000. Dia menyelesaikannya dengan cara berikut:

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

Jelaskan, apa yang salah dengan kode ini. Ubahlah kode menjadi lebih optimal.

Seorang programmer dihadapkan pada tugas mencari jumlah angka yang habis dibagi 7, yang berada dalam rentang tertentu. Dia menyelesaikannya dengan cara berikut:

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

Jelaskan, apa yang salah dengan kode ini. Ubahlah kode menjadi lebih optimal.

Seorang programmer dihadapkan pada tugas mencari jumlah dari pembagi suatu angka. Dia menyelesaikannya dengan cara berikut:

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

Jelaskan, apa yang salah dengan kode ini. Ubahlah kode menjadi lebih optimal.

Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak