kompüterdə yaddaş problemi

salam. kompüterdə kiçik miqyaslı riyazi hesablamalar aparan zaman yaddaşda, məlumatın emalında olduqca böyük problemlər yaşanır – məsələn adicə ilk 10 min sadə ədədi hesablamaq üçün skript yazanda, kompüterin cavabı olduqca gecikir bəzən isə timeout yaxud, out of memory yazır.  burda aydındır ki, iki problem ola bilər – ya kodlaşdırma həddən artıq qaba aparılır ya da ki, sadəcə olaraq kompüter resursları yetərsizdir. ikincinin həlli üçün kompüteri təzələmək yaxud təzə ram, prosessor quraşdırmaq lazımdır ki bunu hələlik iqnor edirəm. əsasən ilk problemin həllinə fokuslanmaq istəyirəm. kodlaşdırma zamanı kompüterin resurslarını da nəzərə alan adekvat həll kimi təcrübəli proqramçılar nələri təklif edirlər? 

məsələn aşağıdakı skripti necə daha optimal hala gətirə bilərəm? 

#!/usr/bin/python
##eulerproject 02/05/13 No 4

sade = [] 
a = 1      
while len(sade)<10002:
    a += 1
    for s in sade:
        if a % s == 0:
            break
    else:
        sade.append(a)
        
##print (sade)
##print (sade[10001])

Kateqoriya: Sual . , , . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (5 cavab var)

(14:49, 08/05/2013 ) #29740

Salam. Düzdür təcrübəli proqramçı deyiləm bu dil üzrə, sadəcə maraqlanıram php-dən başım açılan kimi:)
Python ən ağır işləyən dillərdən olsa da, kompüter resurslarını məhv edəcək qədər deyil. Yuxarıda yazılan kodda sadə ədəd düzgün təyin olunmur, ona görə də nəyinki 10000, heç 100-ə kimi olanları da göstərmir.
Nümunə:

def sade(a): ## Sade ededlerin tapilmasi
    if a == 1:
        return
    for s in range(2, a):
        if a % s == 0:
            return
    else:
        return 1
  
array = []
a = 0
n = 1000
while a<n:
   a += 1 
   if sade(a):  
     array.append(a)
   
   
print array

10000-ə kimi ədədləri təxminən 4-5 saniyəyə tapır. Amma üstünə düşsək bir az da mükəmməlləşdirmək olar məncə.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (01:56, 09/05/2013 ) #29772

    salam V -))
    düzgün təyin olunmayıb? niyə ki?
    mən yuxarıda yazdığım kodda, ilk n qədər sadə ədədi tapmağa çalışıram, (ilk n ədədə qədərki sadə ədədləri yox) və müəyyən bir həddə qədər də tapılır. burda ilk üç min var.
    while len(sade) < x – ifadəsinə diqqət edin: sadə ədədlərin daxil olduğu listdəki ədədlərin sayı x-dən kiçik olana qədər. ki, bunu yuxarıda da yazmışdım – "ilk 10 min sadə ədədi hesablamaq".

    amma orda 3000 yerinə 5000 yazsanız, artıq codepad interpreteri, timeout cavabı verəcək. mənə isə məhz müəyyən bir həddə qədər, bu tip hesablamaları apara bilməyin optimal variantı lazımdır.

    yollardan biri əlbəttə ki, alqoritmi riyazi əsaslarla daha optimal variantda yazmaqdır. məsələn yuxarıdakı məsələdə, ikimizin və çox adamın elədiyi "səhv" kimi, sadəliyi təyin etmək üçün, seçilən ədədi özündən əvvəlki bütün sadə ədədlərə bölmək yox, həmin ədədin kvadratkökünün təqribi dəyərinə qədər olan sadə ədədlərə bölməkdir. bu təxminən ikiqat sürət verəcək. amma bu sadəcə bu məsələyə aid spesifiklikdir.
    kodlaşdırmanın özünə müncər edilə biləcək hansısa "qənaət metodları" varmı? bunu sırf python üçün demirəm – ümumi bir məsələ kimi soruşuram.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (11:56, 09/05/2013 ) #29781

      Hə, deyəsən sualı səhv anlamışdım) Onda bir balaca da sürət əldə etmək üçün hər dəfə massivi saymamaq lazımdır. Belə etmək olar. Xeyli sürət fərqi əldə olunacaq, resurs da az işlənəcək.

      sade = [] 
      a = 1 
      sadenums = 0 ## cache edirik
      while sadenums<10000:
          a += 1
          for s in sade:
              if a % s == 0:
                  break
          else:
              sade.append(a)
              sadenums +=1
              
      print (sade)

      Qısası burda resursu sökən massivin sayılmasıdır dövr hər dəfə işə düşdükcə. Əgər kifayət etməsə yenə nəsə düşünmək olar.

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(20:26, 01/12/2014 ) #50007

mövzu yenə aktualdı. məsələ budu – sonuncu həddi 4 milyonu keçməmək şərtilə cüt fibonaççi ədədlərinin cəmini tapın.

verilən n ədədinin fibonaççi ədədi olub-olmadığı belə yoxlanılır: (5n^2+4), yaxud (5n^2-4) ifadələrindən ən az biri tam kvadratdırsa n fibonaççi ardıcıllığının üzvüdü.

həlli ola biləcək ən sadə formada yazıram – sırf iterasiya hissəsinə fokuslanmaq üçün.

import math

def isPerfect(x):

    c = math.sqrt(x)
    if c*c == x: return True
    else: return False

def isFibo(x):

    t = 5*x*x
    if isperfect(t+4) or isperfect(t-4): return True
    else: return False

def isEven(x):

    if x%2 == 0: return True
    else: return False

evenFibos = [x for x in range(4000000) if isFibo(x) and isEven(x)]

print sum(evenFibos)
Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (20:54, 01/12/2014 ) #50008

    12-ci sətirdəki isperfect-lər isPerfect kimi olacaq.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Bu suala aid öz sualım var:
Sual verin
Bu suala cavab vermək istəyirəm:
Cavab verin

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Son cavablar və şərhlər

Cavablar AI cavab verdi - səsli kitab saytında müəllif hüquqları (35 gün əvvəl)

E. Hacı cavab verdi - səsli kitab saytında müəllif hüquqları (35 gün əvvəl)

evonline.az cavab verdi - Mahni axtariram, azerbaycanin klipi idi. (39 gün əvvəl)

Cənab cavab verdi - Abune kodu - qaz (53 gün əvvəl)

nihatt cavab verdi - Aztelekomun Huawei GPON modeminin login və şifrəsi (70 gün əvvəl)

Mesud cavab verdi - C++ aid məsələ (85 gün əvvəl)

Toofiq cavab verdi - Abune kodu - qaz (86 gün əvvəl)

Toofiq cavab verdi - Mahni axtariram, azerbaycanin klipi idi. (86 gün əvvəl)

selef cavab verdi - gömrük bağlamanı saxladı (105 gün əvvəl)

walkingdead4 cavab verdi - Niqodnilik haqqında yardım ederdiz (120 gün əvvəl)

Devequsu cavab verdi - Niqodnilik haqqında yardım ederdiz (122 gün əvvəl)

E. Hacı cavab verdi - Manual QA vs Wordpress (138 gün əvvəl)

SN cavab verdi - .az domaini whois serveri niyə işləmir? (181 gün əvvəl)

byshako cavab verdi - .az domaini whois serveri niyə işləmir? (182 gün əvvəl)

byshako cavab verdi - .az domaini whois serveri niyə işləmir? (182 gün əvvəl)

Software Developer - 616 xal

E. Hacı - 610 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 434 xal

Maqa - 346 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Sistemə daxil olmuş 23348 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2026