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

E. Hacı cavab verdi - Adsense ya görə VÖEN gəlir vergisi 20% istəyirlər (1 saat əvvəl)

Triste cavab verdi - Adsense ya görə VÖEN gəlir vergisi 20% istəyirlər (6 gün əvvəl)

Software Developer cavab verdi - Adsense ya görə VÖEN gəlir vergisi 20% istəyirlər (6 gün əvvəl)

Triste cavab verdi - Google Adsense vergi (6 gün əvvəl)

E. Hacı cavab verdi - Xif mn kodu (14 gün əvvəl)

Khagrov cavab verdi - Axtardığım mahnını tapa bilmirəm kömək edin (33 gün əvvəl)

E. Hacı cavab verdi - Dünəndən Kompüterlə Twitter/X və Pinterest -ə girə bilmirəm. (40 gün əvvəl)

orkhanrza cavab verdi - AZ9095də bağlama qalıb (45 gün əvvəl)

Ismayil1997 cavab verdi - İndiki dövrdə İngilis dili müəllimliyi ixtisasını seçməyə dəyər? (54 gün əvvəl)

revan orucov cavab verdi - Bakıda evə 100mbps+ internet verən provayder var? (58 gün əvvəl)

E. Hacı cavab verdi - WordPress sistemli saytda Facebook və İnstagram platformalarına özəl target_blank tənzimlənməsi haqqında... (60 gün əvvəl)

Jurnalist cavab verdi - WordPress sistemli saytda Facebook və İnstagram platformalarına özəl target_blank tənzimlənməsi haqqında... (60 gün əvvəl)

asssa1 cavab verdi - Riyazi proqramlar üçün proqram (62 gün əvvəl)

Aleks cavab verdi - İndiki dövrdə İngilis dili müəllimliyi ixtisasını seçməyə dəyər? (68 gün əvvəl)

E. Hacı cavab verdi - İndiki dövrdə İngilis dili müəllimliyi ixtisasını seçməyə dəyər? (68 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ş 23288 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

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