Beyler python kodu 10000'e (yazıyla onbin) kadar asalları bulurken, php
100000'e (yazıyla yüzbin) kadar asalları buluyor.

Biliyorsunuz python virtual machine üzerinde çalışıyor fakat php direk
olarak C extension'larını çağırarak hesaplamaları yaptırıyor. Dolayısıyla
php biraz daha iyi performans gösterir.

Kodları optimize ederek tekrar yazdım, asal sayı bulurken sayıyı
karekökünden yukarıdaki sayılara bölmek anlamsız olduğu için bu kontrolleri
ekledim. Sonuçları  aşağıda görebilirsiniz, php dediğim nedenlerden ötürü
biraz daha hızlı.

an...@db05:~/public_html/sahi$ time php test.php
78498
real    0m35.846s
user    0m35.790s
sys     0m0.060s

an...@db05:~/public_html/sahi$ time python test.py
78498
real    0m39.011s
user    0m38.980s
sys     0m0.030s
an...@db05:~/public_html/sahi$

###########################################

<?php
$primeNumbers = array();

for ($i = 2; $i < 1000000; $i++)
{
    $divisible = false;
    $sqrt = sqrt($i);
    foreach ($primeNumbers as $number)
    {
        if ($number > $sqrt ){
                break;
        }
        elseif ($i % $number == 0)
        {
            $divisible = true;
        }
    }

    if ($divisible == false)
    {
        $primeNumbers[] = $i;
    }
}

echo sizeof($primeNumbers);

?>



#########################################


#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
primeNumbers = []

for i in range(2, 1000000):
    divisible = False
    sqrt = math.sqrt(i)

    for number in primeNumbers:
        if sqrt < number:
            break
        if i % number == 0:
            divisible = True

    if divisible == False:
        primeNumbers.append(i)

print str(len(primeNumbers))







07 Aralık 2009 02:36 tarihinde aşkın yollu <[email protected]> yazdı:

>
>
> 2009/12/7 aşkın yollu <[email protected]>
>
>
>>
>> 2009/12/6 Ozgur Batur <[email protected]>
>>
>> Threadlerin başlıkları farklı devam ettiği için Barış beyin attığı
>>> düzeltmeyi görmemişim. Python scriptinde range 10000 değil 100000
>>> olacak, denerken ben de dikkat etmemişim. Düzeltme ile:
>>>
>>> python test.py:
>>> Başlangıç = 1260123258.11
>>> Bitiş = 1260123340.4
>>> Süre =~82.29
>>>
>>> Php %50 olamasa da %35 daha hızlı çıktı, nedeni diğer threadde
>>> tartışılan konular olabilir. time konusunda haklısınız, programın
>>> içinden ölçmekten çok daha sağlıklı olacaktır.
>>>
>>> 2009/12/6 Mehmet Salih YILDIRIM <[email protected]>:
>>> > Bu kadar fark olmaması lazım bence. Yorumlayıcıların yaptıkları
>>> > optimizasyonları bilmediğimden kesin birşey diyemeyeceğim ancak,
>>> > fiziksel zamanı ölçmek yerine cputime değerine bakmak lazım gelir. Şu
>>> an
>>> > yaptığınız işlemde preemption dolayısı ile eşzamanlı çalışan diğer
>>> > process ler de çalışma süresini etkilerler. Ama bir process'in cpu
>>> > üzerinde ne kadar süre running durumunda kaldığı tam olarak
>>> > karşılaştırılabilecek veridir. Bu yüzden bu şekilde karşılaştırmak
>>> yerine
>>> >
>>> > "time python test.py" komutu ile "time php test.php" komutlarını
>>> kullanınız.
>>> >
>>> > Ozgur Batur wrote:
>>> >> Merhaba,
>>> >>
>>> >> Pazar akşamı yapacak bir işim yok :)
>>> >> Scriptleri birebir denedim:
>>> >>
>>> >> python test.py:
>>> >> Başlangıç = 1260120673.71
>>> >> Bitiş = 1260120674.85
>>> >> Süre =~1.14
>>> >>
>>> >> php test.php:
>>> >> Başlangıç = 1260120770.21
>>> >> Bitiş = 1260120831.07
>>> >> Süre = ~60.86
>>> >>
>>> >> Kullandığım python sürümü: 2.6.4rc2
>>> >> Php sürümü: PHP 5.2.10-2ubuntu6.3 with Suhosin-Patch 0.9.7 (cli), Zend
>>> >> Engine v2.2.0
>>> >>
>>> >> Sonuç python phpden yaklaşık 53 kat daha hızlı çıktı. Üstelik
>>> >> verdiğiniz python scriptinde output ekrana basılmasına rağmen php
>>> >> scriptinde echo kapalı. Ya bilmediğim çok hızlı bir php yorumlayıcı
>>> >> kullanıyorsunuz, ya da yapılandırmanızda bir problem var.
>>> >>
>>> >> İyi günler,
>>> >>
>>> >> 2009/12/5 Baris <[email protected]>:
>>> >>
>>> >>> Merhaba arkadaşlar bu sabah çok ilginç bir durum ile karşılaştım
>>> mod_python
>>> >>> ile ile ilgili internette gelişmelere bakarken, şöyle iki kod
>>> parçacığı
>>> >>> gözüme takıldı, konsoldan calıştırılan ve 2 ile 100000 arası asal
>>> sayıları
>>> >>> bulamak üzere yazılmış python betiği, yine aynı amaç için yazılmış
>>> php
>>> >>> betiğinden %50 daha yavaş çalışmakta olduğunu sınadım. Nedenini
>>> >>> açıklayabilecek arkadaşlar açıklamada bulunabilirse sevinirim.
>>> >>>
>>> >>> Python için;
>>> >>>
>>> >>> #!/usr/bin/python
>>> >>> # -*- coding: utf-8 -*-
>>> >>> import time
>>> >>> print time.time()
>>> >>> primeNumbers = []
>>> >>> output = []
>>> >>>
>>> >>> for i in range(2, 10000):
>>> >>>     divisible = False
>>> >>>     for number in primeNumbers:
>>> >>>         if i % number == 0:
>>> >>>             divisible = True
>>> >>>
>>> >>>     if divisible == False:
>>> >>>         primeNumbers.append(i)
>>> >>>         output.append(str(i))
>>> >>>
>>> >>> print ' '.join(output)
>>> >>>
>>> >>> print time.time()
>>> >>>
>>> >>> ----------------------------------------
>>> >>>
>>> >>> Php için:
>>> >>>
>>> >>> <?php
>>> >>> echo microtime(true) ."\n";
>>> >>> $primeNumbers = array();
>>> >>> $output = '';
>>> >>>
>>> >>> for ($i = 2; $i < 100000; $i++)
>>> >>> {
>>> >>>     $divisible = false;
>>> >>>     foreach ($primeNumbers as $number)
>>> >>>     {
>>> >>>         if ($i % $number == 0)
>>> >>>         {
>>> >>>             $divisible = true;
>>> >>>         }
>>> >>>     }
>>> >>>
>>> >>>     if ($divisible == false)
>>> >>>     {
>>> >>>         $primeNumbers[] = $i;
>>> >>>         $output .= $i;
>>> >>>     }
>>> >>> }
>>> >>>
>>> >>> #echo $output;
>>> >>> echo "\n" . microtime(true) ."\n";
>>> >>> ?>
>>>
>>
>> Bende daha ilginç bi durum var, python kısa bir sürede tamamlarken, php
>> çook uzun sürüyor, henüz php betiğinin tamamlandığını daha görmedim.
>> Yapılandırmayla ilgili sorunlar olabilir.
>>
>> Bu arada kodların biraz iyileştirmeye ihtiyacı var :)
>>
>>
> Sonunda bitti :)
>
> time php -f asal.php
> real    3m36.432s
> user    3m30.674s
> sys     0m0.520s
>
> time python asal.py
> real    0m3.681s
> user    0m3.628s
> sys     0m0.008s
>
> Python yaklaşık 70 kat daha hızlı çalıştı.
>
>
> --
> Aşkın Yollu
> http://askin.ws
>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>
>


-- 
Anıl Özselgin
http://negaripseylervarya.blogspot.com/
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap