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? 

1#!/usr/bin/python
2##eulerproject 02/05/13 No 4
3 
4sade = []
5a = 1     
6while len(sade)<10002:
7    a += 1
8    for s in sade:
9        if a % s == 0:
10            break
11    else:
12        sade.append(a)
13         
14##print (sade)
15##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ə:

1def sade(a): ## Sade ededlerin tapilmasi
2    if a == 1:
3        return
4    for s in range(2, a):
5        if a % s == 0:
6            return
7    else:
8        return 1
9   
10array = []
11a = 0
12n = 1000
13while a<n:
14   a += 1
15   if sade(a): 
16     array.append(a)
17    
18    
19print 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.

      1sade = []
      2a = 1
      3sadenums = 0 ## cache edirik
      4while sadenums<10000:
      5    a += 1
      6    for s in sade:
      7        if a % s == 0:
      8            break
      9    else:
      10        sade.append(a)
      11        sadenums +=1
      12         
      13print (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.

1import math
2 
3def isPerfect(x):
4 
5    c = math.sqrt(x)
6    if c*c == x: return True
7    else: return False
8 
9def isFibo(x):
10 
11    t = 5*x*x
12    if isperfect(t+4) or isperfect(t-4): return True
13    else: return False
14 
15def isEven(x):
16 
17    if x%2 == 0: return True
18    else: return False
19 
20evenFibos = [x for x in range(4000000) if isFibo(x) and isEven(x)]
21 
22print 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 - Elektron servis xidmətləri (9 saat əvvəl)

cavaninsan cavab verdi - Amerika səhmləri (9 gün əvvəl)

Software Developer cavab verdi - Amerika səhmləri (9 gün əvvəl)

SN cavab verdi - Kripto vergi (18 gün əvvəl)

Nicat97 cavab verdi - ilkaddimlar.com-a nə oldu? (25 gün əvvəl)

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

nicatmemmedli cavab verdi - ilkaddimlar.com-a nə oldu? (28 gün əvvəl)

Software Developer cavab verdi - ilkaddimlar.com-a nə oldu? (39 gün əvvəl)

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

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

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

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

E. Hacı cavab verdi - Telefon almışam kamerasında ləkə var qaytarmaq istəyirəm, mağaza qaytarmır (50 gün əvvəl)

Software Developer cavab verdi - Rus dili yatırımı (51 gün əvvəl)

Cənab cavab verdi - Rus dili yatırımı (51 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ş 23309 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

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