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])

Yadda saxlama
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

Cənab cavab verdi - Azərbaycandakı supermarket kassalarında işlədilən proqram (5 saat əvvəl)

E. Hacı cavab verdi - Proqramlaşdırma - fəlsəfə (1 gün əvvəl)

kapiltp cavab verdi - Proqramlaşdırma - fəlsəfə (2 gün əvvəl)

Cənab cavab verdi - kurs diplomu ilə işləyə bilərəm? (3 gün əvvəl)

kapiltp cavab verdi - Proqramlaşdırma - fəlsəfə (5 gün əvvəl)

E. Hacı cavab verdi - Proqramlaşdırma - fəlsəfə (5 gün əvvəl)

kapiltp cavab verdi - Proqramlaşdırma - fəlsəfə (6 gün əvvəl)

kapiltp cavab verdi - Proqramlaşdırma - fəlsəfə (7 gün əvvəl)

E. Hacı cavab verdi - Proqramlaşdırma - fəlsəfə (7 gün əvvəl)

kapiltp cavab verdi - Proqramlaşdırma - fəlsəfə (9 gün əvvəl)

Aysu2009 cavab verdi - Azərbaycan əsgər mahnısının sözlərini ingilis dilinə tərcümə etmək (9 gün əvvəl)

Aysu2009 cavab verdi - Atestat almaq üçün ne etmeliyem? (9 gün əvvəl)

Aysu2009 cavab verdi - Azərbaycan əsgər mahnısının sözlərini ingilis dilinə tərcümə etmək (9 gün əvvəl)

Software Developer cavab verdi - Xamaya başqa nə deyirlər? 6 hərflidir (14 gün əvvəl)

Erol34 cavab verdi - Xamaya başqa nə deyirlər? 6 hərflidir (15 gün əvvəl)

Software Developer - 615 xal

E. Hacı - 608 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ş 23295 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

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