РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsSpOtMm 278 of 294 menu
◀ ▶

JavaScriptda xotira sarfini optimallashtirish

Yaratilgan barcha o‘zgaruvchilar kompyuterning operativ xotirasida saqlanadi. Ba’zan beparvo kod yozish xotira sarfini keskin oshirishi mumkin.

Keling, buni misol orqali ko‘rib chiqaylik. Faraz qilaylik, bizning vazifamiz 1 dan 100000000 gacha bo‘lgan butun sonlar yig‘indisini topish. Faraz qilaylik, bizda berilgan oraliqdagi butun sonlar bilan massivni to‘ldiruvchi funksiya bor:

function fillArr(a, b) { let res = []; for (let i = a; i <= b; i++) { res.push(i); } return res; }

Faraz qilaylik, shuningdek, massiv elementlari yig‘indisini topadigan funksiya ham bor:

function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; }

Ushbu funksiyalarning kombinatsiyasi yordamida berilgan vazifani osongina hal qilish mumkin:

let sum = getSum(fillArr(1, 100000000));

Yechim nafis bo‘ldi. Biroq, unda muammo bor: u juda ko‘p operativ xotira sarflaydi.

Keling, hisoblaylik. fillArr funksiyasi 100000000 ta son bilan massiv yaratadi. Faraz qilaylik, JavaScript son uchun 2 bayt ajratadi - unda bizning massivimizni saqlash uchun 200000000 bayt, ya’ni taxminan 200 megabayt operativ xotira kerak bo‘ladi.

Lekin aslida operativ xotira ko‘proq talab qilinadi, chunki JavaScript-da massivni saqlashda juda katta qo‘shimcha xarajatlar bor.

Muammoni tushunib, vazifani hal qiladigan va amalda operativ xotira sarflamaydigan funksiyani yasash oson:

function getNumsSum(max) { let sum = 0; for (let i = 1; i <= max; i++) { sum += i; } return sum; }

Keling, vazifani ushbu funksiya yordamida hal qilaylik:

let sum = getNumsSum(100000000);

Bir dasturchi oldiga 7 ga qoldiqsiz bo‘linadigan, berilgan oraliqda joylashgan sonlar miqdorini topish vazifasi qo‘yilgan edi. U uni quyidagicha hal qildi:

let arr = []; for (let i = 0; i <= 1000; i++) { if (i % 7 == 0) { arr.push(i); } } console.log(arr.length);

Ushbu kodda nima noto‘g‘ri ekanligini tushuntiring. Kodni yanada optimalroq qilib qayta yozing.

Bir dasturchi oldiga sonning bo‘luvchilari yig‘indisini topish vazifasi qo‘yilgan edi. U uni quyidagicha hal qildi:

function getDivisors(num) { let res = []; for (let i = 1; i <= num; i++) { if (num % i === 0) { res.push(i); } } return res; } function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; } let sum = getSum(getDivisors(320)); console.log(sum);

Ushbu kodda nima noto‘g‘ri ekanligini tushuntiring. Kodni yanada optimalroq qilib qayta yozing.

← →
↑
Oʻzbek▼
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish