Jump to content

Recommended Posts

DreiMalAli, 1.000.000 dan başlar mı ? Bal gibi de başlar. Hatta exesini atıyorum , dosyaya da yazıyor.

cinali, bende 8 saniye civarı bir sürede buluyor(Aslında daha az ama büyütelim :) Dosyayı kendi oluşturuyor.)

Sevgiler.

Milyon.zip DreiMalAli için, 8saniye de cinali için...

Milyon.zip

8saniye.zip

Link to post
Sitelerde Paylaş
  • İleti 101
  • Created
  • Son yanıt

Top Posters In This Topic

1 saniye olmaz.

0-1.000.000 arasındaki bütün asalları 1 saniyede mi buluyorsun? Tam anlayamadım ben.

:D

Evet!

Ama sadece bir array listesi hazırlamak için geçen süre bu. Bu listedeki asal sayıları stringe çevirmeden ve yazdırmadan.

Bu gün aklıma bir code değişikliği geldi. Değişikliği yaparsam, sanırım süre daha da düşer.

Sevgiler

Link to post
Sitelerde Paylaş

DreiMalAli, 1.000.000 dan başlar mı ? Bal gibi de başlar. Hatta exesini atıyorum , dosyaya da yazıyor.

cinali, bende 8 saniye civarı bir sürede buluyor(Aslında daha az ama büyütelim :) Dosyayı kendi oluşturuyor.)

Sevgiler.

Milyon.zip DreiMalAli için, 8saniye de cinali için...

:D

1 000 000 ile 2 000 000 arası asal sayıları listelemek, senin metodunle ikinci bilgisayarın göreviydi.

Böylece iikinci bilgisayar birinci bilgisayarın görevini de yapmış oldu. Yani birinci bilgisayara gerek kalmadı.

Yukarda yazdığım A metodu idi.

Senin uygulamak istediğin metodla, yani birden fazla bilgisayar kullanarak, zaman kazancının olup olmadığını anlamak için şunu yapmak lazım (Tabi vaktin olduğunda):

A.

1. bilgisayar 2 ile 1 000 000 arası asal sayıları, 2. bilgisayar 1 000 001 ile 2 000 000 arası asal sayıları listeleyecek. Hangisinin harcadığı zaman daha büyükse, buna T2 diyelim.

B.

SAdece 1 tane bilgisayar 2 ile 2 000 000 arası asal sayıları listeleyecek. Harcanan zaman T1 diyelim.

T1 ile T2'yi karşılaştıracağız.

Bakalım hangi zaman daha büyük.

Sevgiler

Link to post
Sitelerde Paylaş

:D

1 000 000 ile 2 000 000 arası asal sayıları listelemek, senin metodunle ikinci bilgisayarın göreviydi.

Böylece iikinci bilgisayar birinci bilgisayarın görevini de yapmış oldu. Yani birinci bilgisayara gerek kalmadı.

Yukarda yazdığım A metodu idi.

Senin uygulamak istediğin metodla, yani birden fazla bilgisayar kullanarak, zaman kazancının olup olmadığını anlamak için şunu yapmak lazım (Tabi vaktin olduğunda):

A.

1. bilgisayar 2 ile 1 000 000 arası asal sayıları, 2. bilgisayar 1 000 001 ile 2 000 000 arası asal sayıları listeleyecek. Hangisinin harcadığı zaman daha büyükse, buna T2 diyelim.

B.

SAdece 1 tane bilgisayar 2 ile 2 000 000 arası asal sayıları listeleyecek. Harcanan zaman T1 diyelim.

T1 ile T2'yi karşılaştıracağız.

Bakalım hangi zaman daha büyük.

Sevgiler

Ne gerek var ki buna :) 2. Bilgisayar 1. nin görevini kesinlikle yapmıyor. 2. Bilgisayar 1. Bilgisayardan çok kısa bir süre sonra sonucu bulacak. Çok istemci de olduğu zaman tadından yenmez :)

Link to post
Sitelerde Paylaş

Senin 8 saniye bende 32 saniye falan sürüyo, hem ekrana hem de txt dosyasına yazıyor.

Dreimalali'ye hiç inanamadım 1 saniye sürüyo diyor, ne var sizde süpercomputerler mı var, DeepBlue falan.

görelim bakalım bir saniye... :)

:D

1 000 000'a kadar asal sayıları listeleme süresi: 0,156 saniye:

primzahlenbis1000000.jpg

10 000 000'a kadar asal sayıları listeleme süresi: 2,53 saniye:

primzahlenbis10000000.jpg

100 000 000'a kadar asal sayıları listeleme süresi: 52,76 saniye:

primzahlenbis100000000.jpg

Tekrar ediyorum: Sadece asal sayıları tesbit edip bir arrayda toplamak için geçen süre bunlar. Ne dosya hazırlandı ne de herhangi bir yere yazıldı.

Sevgiler

Link to post
Sitelerde Paylaş
gönderildi (düzenlendi)

Bence yarışma fikri güzeldi. Dosyaya yazmadan hızı objektif olarak ölçemeyiz. Kurallar şöyle olmalı:

liste.txt dosyasına yazılmalı.

Hız ölçümü GetTickCount fonksiyonu ile ve döngüden hemen önce ve yazımdan hemen sonra çalıştırılmalı.

Kategoriler:

10.000 sınırı

100.000 sınırı

1.000.000 sınırı

Haydi bakalım nasıl şeyler yapacağız :)

tarihinde BrainDamage tarafından düzenlendi
Link to post
Sitelerde Paylaş
gönderildi (düzenlendi)

100.000 = 0.16 saniye

1.000.000 = 0.530 saniye

10.000.000 = 12.714 saniye

Exe dosyasını ekte verdim. GetTickCount fonksiyonunun çalışma sisteminden dolayı 1000 ve 10000 sayıları için 0.0 saniye sonucunu elde ettim :)

AsalTest.zip

tarihinde BrainDamage tarafından düzenlendi
Link to post
Sitelerde Paylaş

Bu da pascal versyonu. Belki birinin işine yarar.

program ProjectAsal;

{$APPTYPE CONSOLE}

uses

SysUtils,

winProcs,

DateUtils;

var

Asallar:array of Integer;

UstSinir,TestEdilen:Integer;

AsalMi:Boolean;

BulunanAdet:Integer;

Start:Cardinal;

c:Integer;

F:TextFile;

begin

Write('Ust Sinir? ');

Readln(ustSinir);

Writeln;

Start:=GetTickCount;

AssignFile(F,ExtractFilePath(ParamStr(0))+'liste.txt');

Rewrite(F);

SetLength(Asallar,1);

Asallar[0]:=2;

Writeln(F,2);

BulunanAdet:=1;

for TestEdilen:=3 to UstSinir do

begin

AsalMi:=True;

for c:=0 to High(Asallar) do

begin

if Asallar[c]>Sqrt(TestEdilen) then

Break;

if (TestEdilen mod Asallar[c])=0 then

begin

AsalMi:=False;

Break;

end;

end;

if AsalMi then

begin

SetLength(Asallar,High(Asallar)+2);

Asallar[High(Asallar)]:=TestEdilen;

Inc(BulunanAdet);

Writeln(F,TestEdilen);

end;

end;

CloseFile(F);

Writeln(InttoStr(BulunanAdet)+' adet asal bulundu '+ExtractFilePath(ParamStr(0))+'liste.txt');

Writeln(FormatDateTime('hh:nn:ss:zzz', IncMilliSecond(0,GetTickCount-Start)));

ReadLn;

end.

ProjectAsal.zip

tarihinde devart tarafından düzenlendi
Link to post
Sitelerde Paylaş

Bence yarışma fikri güzeldi. Dosyaya yazmadan hızı objektif olarak ölçemeyiz. Kurallar şöyle olmalı:

liste.txt dosyasına yazılmalı.

Hız ölçümü GetTickCount fonksiyonu ile ve döngüden hemen önce ve yazımdan hemen sonra çalıştırılmalı.

Kategoriler:

10.000 sınırı

100.000 sınırı

1.000.000 sınırı

Haydi bakalım nasıl şeyler yapacağız :)

Makinanın hızına da bağlı olduğu için aslında pek fazla bir şey ifade etmiyor.

Bu gün txt dosyası da hazırladım. Txt dosyası hazırlamak, textboxa yazdırmaktan çok daha az zaman harcıyor.

auswertung.jpg

1 000 000 000'a kadar dosya hazırlarken, asal sayı string arrayı 32 969 274. asal sayıyı kaydederken OutOfMemoryException hatası verdi. Böyle durumlarda bir kaç tane dosya hazırlayıp sonradan birleştirmem gerekiyor. Ama uğraşmadım.

10 000 000'a kadar asal sayı txt dosyasının büyüklüğü 5 754 kByte.

100 000 000'a kadar asal sayı txt dosyasının büyüklüğü 55 528 kByte.

Dosya hazırlamadan ölçülen zaman: Sadece array hazırlamak için geçen zaman.

Txt dosyası hazırlayarak ölçülen zaman: Start düğmesine basıştan proğrammın çalışması birinceye kadar geçen zaman.

Sevgiler

Link to post
Sitelerde Paylaş

Sevgili BrainDamage.

Yok! O konuda anlaşamadık.

:D

Sen düşünceni söyledin, ben düşüncemi söyledim.

Henüz birbirimizi ikna edemedik.

Hoş! İkna etmek zorunda da değiliz.

Yüksek yazılım dilleriyle aram pek iyi olmadığından, belki haklı da olabilirsin. Ama benim anlamam lazım.

Sevgiler

Link to post
Sitelerde Paylaş

:D

Neye itiraz ettiğimi şidiye dek anlatamamışım demekki!

Sevgili BrainDamage.

Yok yok!

Bana tekrar açıklamana gerek yok.

Bir kaç sefer sen düşünceni anlattın.

Bir kaç sefer de ben düşüncemi anlattım.

Hala anlaşılmadıysa....

Iıııhhh

Biz anlaşamayacağız.

:D

İtirazım, şu ilk iletinde siyahlaştırdığım yere.

Şu an yaptığım hobi amaçlı dosya paylaşım programım biter bitmez bu konu ile ilgili bir çalışma yapacağım. Bir server bir de birkaç gönüllü bilgisayar olacak. Çok büyük bir zaman tasarrufu sağlanacak. Örneğin 3 adet istemcimiz var diyelim. Bu istemcilere teker teker teker görevler verilecek. Ayrıca integer yerine daha büyük veri tiplerini kullanacağım. Belirlediğim bir sınır olacak. Şimdi bu sınırı S olarak alalım. Sunucumuz istemciye bir sayı gönderecek. İstemci de bu sayıdan sayı+S ' ye kadar olan asalları hesaplayıp bir dosyaya yazacak. Ama bu sırada sunucunun beklemesine gerek yok. İstemciye sayıyı gönderir göndermez hemen öbür istemciye (ilk istemciye gönderdiği sayı + S ) sayısını gönderecek. Ondan sonraki istemciye de 2. istemciye gönderdiği sayıdan S fazlasını gönderecek. İstemciler işini bitirdikleri zaman dosyayı göndermeye başlayacaklar. Bu da çok hızlı olacak zaten... İstemciler aynı anda çalıştıkları için örneğin 10 saniye içinde ilk sayı+S+S+S kadar asal sayı bulunmuş olacak :) İşi biten istemciye yeni işler verilecek...

Asal sayılar listesi hazırlama görevini bir kaç bilgisayara paylaştırıyorsun ve bu metot ile zamandan tasarruf edeceğin düşüncesindesin.

Ben ise, senin metodunun zaman açısından bir getirisi olmayacağını düşünüyorum. Benim düşünceme göre, tek bir bilgisayar o görevi daha kısa bir sürede yapar ve bitirir.

Sevgiler

Link to post
Sitelerde Paylaş

Listeler bağımsız olup birinin başladığı işi bir başkası bitirmeyecek :) Sen büyük ihtimalle görevlendirme kısmında takıldın. 1. Bilgisayara 2-1000000 arası verildiğinde o çalışmaya başlıyor. Sonra 2. Bilgisayara 1000000 - 2000000 arası veriliyor. Anahtar nokta burası işte. İkinci bilgisayarın çalışmaya başlaması için 1. Bilgisayara gereksinimi yok. 1. Bilgisayarın listesine de gereksinimi yok. O kendi aralığındaki listeyi oluşturup gönderiyor. Ana listeye kendi aralığını eklemiyor. Ortada dolaşan bir liste yok. Eğer 1. Bilgisayar görevini bitirdikten sonra 2. Bilgisayar başlasaydı daha uzun süre sürerdi ama biz paralel çalıştırıyoruz :) Bu meseleyi çözelim DreiMalAli , ben huzursuz oluyorum. Zira bu internet üzerinde çalışacağı için kod buradaki örneklerden 10 kat daha uzun olacak :) Önce kafamızda oluşturmamız gerekiyor.

Sevgiler...

Link to post
Sitelerde Paylaş

Sevgili BrainDamage.

Sen büyük ihtimalle görevlendirme kısmında takıldın.

:D

Yok yok! Bir yere takıldığım yok. Senin dediğini ilk iletide anlamıştım ben.

Ama ıııhh.

Biz anlaşamayacağız. :D

Anlaşabilmemeiz için beşinci iletide yaptığın 2. proğramı (kareköklü yöntem diye isimlendirmişsin) ile 3. proğramı (lste yöntemi diye isimlendirmnişsin) birleştirmen lazım.

Böylece daha hızlı bir yöntem elde edersin (Neden?).

Bunu yaptığında birden fazla bilgisayarı görevlendirmek mümkün olmaz. Ama ille de görevlendirmeye kalkarsan, bilgisayarlar fuzuli işlem yapmak zorunda kalırlar.

Sevgiler

Link to post
Sitelerde Paylaş
  • Konuyu Görüntüleyenler   0 kullanıcı

    Sayfayı görüntüleyen kayıtlı kullanıcı bulunmuyor.


Kitap

Yazar Ateistforum'un kurucularındandır. Kitabı edinme seçenekleri için: Kitabı edinme seçenekleri

Ateizmi Anlamak
Aydın Türk
Propaganda Yayınları; / Araştırma
ISBN: 978-0-9879366-7-7


×
×
  • Yeni Oluştur...